Skip to content
Snippets Groups Projects

New DatasetSet model

Merged ml bonhomme requested to merge dataset-sets-reset into master
20 files
+ 576
130
Compare changes
  • Side-by-side
  • Inline
Files
20
@@ -14,9 +14,14 @@ from arkindex.process.models import FeatureUsage, Repository, Worker, WorkerType
from arkindex.users.models import User
# Constants used in architecture project
IMAGE_SERVER_ID = 12345
IMAGE_SERVER_BUCKET = "iiif"
IMAGE_SERVER_REGION = "local"
UPLOADS_IMAGE_SERVER_ID = 12345
UPLOADS_IMAGE_SERVER_URL = "https://uploads.iiif.ark.localhost/iiif/2"
UPLOADS_IMAGE_SERVER_BUCKET = "uploads"
UPLOADS_IMAGE_SERVER_REGION = "local"
INGEST_IMAGE_SERVER_ID = 67890
INGEST_IMAGE_SERVER_URL = "https://ingest.iiif.ark.localhost/iiif/2"
INGEST_IMAGE_SERVER_BUCKET = "ingest"
INGEST_IMAGE_SERVER_REGION = "local"
PONOS_FARM_ID = "001e411a-1111-2222-3333-444455556666"
PONOS_FARM_NAME = "Bootstrap farm"
PONOS_FARM_SEED = "b12868101dab84984481741663d809d2393784894d6e807ceee0bd95051bf971"
@@ -52,6 +57,46 @@ class Command(BaseCommand):
user.save()
self.warn(f"Updated user {user} to admin")
def create_image_server(self, id, url, bucket, region, display_name):
try:
server = ImageServer.objects.get(Q(id=id) | Q(url=url))
if server.id != id:
# Migrate existing images & server id in a single transaction
with transaction.atomic():
server.images.update(server_id=id)
ImageServer.objects.filter(id=server.id).update(id=id)
self.warn(f"Image server {server.id} updated to {id}")
# Update internal reference for updates below
server.id = id
if server.url != url:
server.url = url
server.save()
# Update base settings
if server.s3_bucket != bucket or server.s3_region != region:
server.s3_bucket = bucket
server.s3_region = region
server.save()
self.warn(f"Updated image server {server.id} S3 settings")
else:
self.success(f"Image server {server.id} valid")
except ImageServer.DoesNotExist:
try:
server = ImageServer.objects.create(
id=id,
url=url,
s3_bucket=bucket,
s3_region=region,
display_name=display_name,
)
self.success(f"Image server {server.id} created")
except IntegrityError as e:
self.fail(f"Failed to create image server: {e}")
return
return server
def handle(self, **options):
# Never allow running this script in production
if not settings.DEBUG:
@@ -108,47 +153,18 @@ class Command(BaseCommand):
self.success(f"Created token {ADMIN_API_TOKEN}")
# an image server for local cantaloupe https://ark.localhost/iiif/2
try:
server = ImageServer.objects.get(url="https://ark.localhost/iiif/2")
if server.id != IMAGE_SERVER_ID:
# Migrate existing images & server id in a single transaction
with transaction.atomic():
server.images.update(server_id=IMAGE_SERVER_ID)
ImageServer.objects.filter(id=server.id).update(id=IMAGE_SERVER_ID)
self.warn(f"Image server {server.id} updated to {IMAGE_SERVER_ID}")
# Update internal reference for updates below
server.id = IMAGE_SERVER_ID
# Update base settings
if server.s3_bucket != IMAGE_SERVER_BUCKET or server.s3_region != IMAGE_SERVER_REGION:
server.s3_bucket = IMAGE_SERVER_BUCKET
server.s3_region = IMAGE_SERVER_REGION
server.save()
self.warn("Updated image server S3 settings")
else:
self.success(f"Image server {server.id} valid")
except ImageServer.DoesNotExist:
try:
server = ImageServer.objects.create(
id=IMAGE_SERVER_ID,
url="https://ark.localhost/iiif/2",
s3_bucket=IMAGE_SERVER_BUCKET,
s3_region=IMAGE_SERVER_REGION,
display_name="Development local server",
)
self.success("Image server created")
except IntegrityError as e:
self.fail(f"Failed to create image server: {e}")
return
uploads_server = self.create_image_server(UPLOADS_IMAGE_SERVER_ID , UPLOADS_IMAGE_SERVER_URL, UPLOADS_IMAGE_SERVER_BUCKET , UPLOADS_IMAGE_SERVER_REGION , "Local IIIF server for user uploaded files through frontend")
if uploads_server is None:
return
self.create_image_server(INGEST_IMAGE_SERVER_ID , INGEST_IMAGE_SERVER_URL, INGEST_IMAGE_SERVER_BUCKET , INGEST_IMAGE_SERVER_REGION , "Local IIIF server for ingested files from minio")
# Check there is not already a local server with invalid path
# We'll merge its image into the new one
# This bad server may have been created by automatic IIIF server detection
try:
bad_server = ImageServer.objects.get(url="https://ark.localhost/iiif")
bad_server.merge_into(server)
self.warn(f"Merged images from {bad_server.id} into {server.id}")
bad_server = ImageServer.objects.get(url="https://uploads.iiif.ark.localhost/iiif")
bad_server.merge_into(uploads_server)
self.warn(f"Merged images from {bad_server.id} into {uploads_server.id}")
bad_server.delete()
self.warn("Deleted old server")
@@ -194,17 +210,21 @@ class Command(BaseCommand):
)
self.success(f"Created revision {revision.hash}")
version, created = worker.versions.get_or_create(
revision=revision,
defaults={
"id": IMPORT_WORKER_VERSION_ID,
"configuration": {},
"state": WorkerVersionState.Created,
"gpu_usage": FeatureUsage.Disabled,
"docker_image": None,
"docker_image_iid": None,
}
)
try:
version = WorkerVersion.objects.get(id=IMPORT_WORKER_VERSION_ID)
created = False
except WorkerVersion.DoesNotExist:
version, created = worker.versions.get_or_create(
revision=revision,
defaults={
"id": IMPORT_WORKER_VERSION_ID,
"configuration": {},
"state": WorkerVersionState.Created,
"gpu_usage": FeatureUsage.Disabled,
"docker_image": None,
"docker_image_iid": None,
}
)
if created:
self.success(f"Created worker version {version.slug}")
else:
Loading