Loading resources/helpers.py +3 −5 Original line number Diff line number Diff line Loading @@ -157,9 +157,8 @@ def make_iiif(f: models.File): def delete_exif_metas(f: models.File) -> int: deleted_counter = 0 public_project = models.fetch_public_project() exiftools_metas_set = models.MetadataSet.objects.filter( title="ExifTool", project=public_project title="ExifTool", project=f.project ).first() for meta_value in models.MetadataResourceValue.objects.filter( resource=f, metadata__set=exiftools_metas_set Loading @@ -177,19 +176,18 @@ def set_exif_metas(f: models.File) -> int: as project. """ added_counter = 0 public_project = models.fetch_public_project() exiftools_metas = image_metadatas(f.local_path()) if "ExifTool:Error" not in exiftools_metas: # first delete ExifTool metas delete_exif_metas(f) # then insert new metas from extracted data exiftools_metas_set = models.MetadataSet.objects.filter( title="ExifTool", project=public_project title="ExifTool", project=f.project ).first() if exiftools_metas_set: for key in exiftools_metas: metadata, created = models.Metadata.objects.get_or_create( title=key, set=exiftools_metas_set, project=public_project title=key, set=exiftools_metas_set, project=f.project ) models.MetadataResourceValue.objects.get_or_create( metadata=metadata, Loading resources/management/commands/loadfixtures.py +24 −18 Original line number Diff line number Diff line from django.core.management.base import BaseCommand, CommandError from django.contrib.auth.models import User from resources.models import ( FileExtension, FileType, Loading @@ -8,8 +7,8 @@ from resources.models import ( MetadataType, ResourceClass, Collection, fetch_public_project, Permission, Project, ) import json import csv Loading @@ -35,13 +34,13 @@ def set_base_permissions(): Permission.objects.get_or_create(label="file.download_source") def load_fixtures(*args): set_base_permissions() def set_root(): Collection.objects.get_or_create(title="root") def set_file_types(): for title in ["text", "numeric", "json", "xml", "integer", "float"]: MetadataType.objects.get_or_create(title=title) default_user, created = User.objects.get_or_create(username="public_user") public_project = fetch_public_project() Collection.objects.get_or_create(owner=default_user, title="root") with open( "{}/mimes.json".format(pathlib.Path(__file__).parent.absolute()), "r" ) as f: Loading @@ -54,7 +53,17 @@ def load_fixtures(*args): label=extension ) file_type.extensions.add(extension) for mime in IIIF_SUPPORT: try: file_type = FileType.objects.get(mime=mime) file_type.serve_with_iiif = True file_type.save() except FileType.DoesNotExist: pass # deprecate ? def set_basic_vocabularies_metas(project: Project): metadatasets = {} with open( "{}/vocabulary.csv".format(pathlib.Path(__file__).parent.absolute()), "r" Loading @@ -63,7 +72,7 @@ def load_fixtures(*args): next(reader) for row in reader: metadatasets[row[0]], created = MetadataSet.objects.get_or_create( title=row[4], owner=default_user, project=public_project title=row[4], project=project ) metadatas = {} with open( Loading @@ -75,8 +84,7 @@ def load_fixtures(*args): metadatas[row[0]], created = Metadata.objects.get_or_create( title=row[3], set_id=metadatasets[row[2]].pk, owner=default_user, project=public_project, project=project, ) with open( "{}/resource_class.csv".format(pathlib.Path(__file__).parent.absolute()), Loading @@ -92,16 +100,14 @@ def load_fixtures(*args): verbose_title=row[4], description=row[5], ) for mime in IIIF_SUPPORT: try: file_type = FileType.objects.get(mime=mime) file_type.serve_with_iiif = True file_type.save() except FileType.DoesNotExist: pass def load_fixtures(*args): set_root() set_base_permissions() set_file_types() class Command(BaseCommand): # mimes database from https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json def handle(self, *args, **options): load_fixtures() resources/migrations/0016_auto_20210920_1717.py 0 → 100644 +64 −0 Original line number Diff line number Diff line # Generated by Django 3.2.2 on 2021-09-20 17:17 from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ ("resources", "0015_auto_20210920_1419"), ] operations = [ migrations.AlterField( model_name="collection", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), migrations.AlterField( model_name="file", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), migrations.AlterField( model_name="metadata", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), migrations.AlterField( model_name="metadataset", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), migrations.AlterField( model_name="tag", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), ] resources/migrations/0017_auto_20210920_1727.py 0 → 100644 +57 −0 Original line number Diff line number Diff line # Generated by Django 3.2.2 on 2021-09-20 17:27 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("resources", "0016_auto_20210920_1717"), ] operations = [ migrations.RemoveField( model_name="resource", name="ptr_owner", ), migrations.AlterUniqueTogether( name="collection", unique_together={("title", "project", "parent")}, ), migrations.AlterUniqueTogether( name="file", unique_together={("project", "hash")}, ), migrations.AlterUniqueTogether( name="metadata", unique_together={("title", "set", "project")}, ), migrations.AlterUniqueTogether( name="metadataset", unique_together={("title", "project")}, ), migrations.AlterUniqueTogether( name="tag", unique_together={("uid", "project")}, ), migrations.RemoveField( model_name="collection", name="owner", ), migrations.RemoveField( model_name="file", name="owner", ), migrations.RemoveField( model_name="metadata", name="owner", ), migrations.RemoveField( model_name="metadataset", name="owner", ), migrations.RemoveField( model_name="tag", name="owner", ), ] resources/migrations/0018_alter_project_label.py 0 → 100644 +18 −0 Original line number Diff line number Diff line # Generated by Django 3.2.2 on 2021-09-21 08:39 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("resources", "0017_auto_20210920_1727"), ] operations = [ migrations.AlterField( model_name="project", name="label", field=models.TextField(unique=True), ), ] Loading
resources/helpers.py +3 −5 Original line number Diff line number Diff line Loading @@ -157,9 +157,8 @@ def make_iiif(f: models.File): def delete_exif_metas(f: models.File) -> int: deleted_counter = 0 public_project = models.fetch_public_project() exiftools_metas_set = models.MetadataSet.objects.filter( title="ExifTool", project=public_project title="ExifTool", project=f.project ).first() for meta_value in models.MetadataResourceValue.objects.filter( resource=f, metadata__set=exiftools_metas_set Loading @@ -177,19 +176,18 @@ def set_exif_metas(f: models.File) -> int: as project. """ added_counter = 0 public_project = models.fetch_public_project() exiftools_metas = image_metadatas(f.local_path()) if "ExifTool:Error" not in exiftools_metas: # first delete ExifTool metas delete_exif_metas(f) # then insert new metas from extracted data exiftools_metas_set = models.MetadataSet.objects.filter( title="ExifTool", project=public_project title="ExifTool", project=f.project ).first() if exiftools_metas_set: for key in exiftools_metas: metadata, created = models.Metadata.objects.get_or_create( title=key, set=exiftools_metas_set, project=public_project title=key, set=exiftools_metas_set, project=f.project ) models.MetadataResourceValue.objects.get_or_create( metadata=metadata, Loading
resources/management/commands/loadfixtures.py +24 −18 Original line number Diff line number Diff line from django.core.management.base import BaseCommand, CommandError from django.contrib.auth.models import User from resources.models import ( FileExtension, FileType, Loading @@ -8,8 +7,8 @@ from resources.models import ( MetadataType, ResourceClass, Collection, fetch_public_project, Permission, Project, ) import json import csv Loading @@ -35,13 +34,13 @@ def set_base_permissions(): Permission.objects.get_or_create(label="file.download_source") def load_fixtures(*args): set_base_permissions() def set_root(): Collection.objects.get_or_create(title="root") def set_file_types(): for title in ["text", "numeric", "json", "xml", "integer", "float"]: MetadataType.objects.get_or_create(title=title) default_user, created = User.objects.get_or_create(username="public_user") public_project = fetch_public_project() Collection.objects.get_or_create(owner=default_user, title="root") with open( "{}/mimes.json".format(pathlib.Path(__file__).parent.absolute()), "r" ) as f: Loading @@ -54,7 +53,17 @@ def load_fixtures(*args): label=extension ) file_type.extensions.add(extension) for mime in IIIF_SUPPORT: try: file_type = FileType.objects.get(mime=mime) file_type.serve_with_iiif = True file_type.save() except FileType.DoesNotExist: pass # deprecate ? def set_basic_vocabularies_metas(project: Project): metadatasets = {} with open( "{}/vocabulary.csv".format(pathlib.Path(__file__).parent.absolute()), "r" Loading @@ -63,7 +72,7 @@ def load_fixtures(*args): next(reader) for row in reader: metadatasets[row[0]], created = MetadataSet.objects.get_or_create( title=row[4], owner=default_user, project=public_project title=row[4], project=project ) metadatas = {} with open( Loading @@ -75,8 +84,7 @@ def load_fixtures(*args): metadatas[row[0]], created = Metadata.objects.get_or_create( title=row[3], set_id=metadatasets[row[2]].pk, owner=default_user, project=public_project, project=project, ) with open( "{}/resource_class.csv".format(pathlib.Path(__file__).parent.absolute()), Loading @@ -92,16 +100,14 @@ def load_fixtures(*args): verbose_title=row[4], description=row[5], ) for mime in IIIF_SUPPORT: try: file_type = FileType.objects.get(mime=mime) file_type.serve_with_iiif = True file_type.save() except FileType.DoesNotExist: pass def load_fixtures(*args): set_root() set_base_permissions() set_file_types() class Command(BaseCommand): # mimes database from https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json def handle(self, *args, **options): load_fixtures()
resources/migrations/0016_auto_20210920_1717.py 0 → 100644 +64 −0 Original line number Diff line number Diff line # Generated by Django 3.2.2 on 2021-09-20 17:17 from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ ("resources", "0015_auto_20210920_1419"), ] operations = [ migrations.AlterField( model_name="collection", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), migrations.AlterField( model_name="file", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), migrations.AlterField( model_name="metadata", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), migrations.AlterField( model_name="metadataset", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), migrations.AlterField( model_name="tag", name="project", field=models.ForeignKey( default=1, on_delete=django.db.models.deletion.CASCADE, to="resources.project", ), preserve_default=False, ), ]
resources/migrations/0017_auto_20210920_1727.py 0 → 100644 +57 −0 Original line number Diff line number Diff line # Generated by Django 3.2.2 on 2021-09-20 17:27 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("resources", "0016_auto_20210920_1717"), ] operations = [ migrations.RemoveField( model_name="resource", name="ptr_owner", ), migrations.AlterUniqueTogether( name="collection", unique_together={("title", "project", "parent")}, ), migrations.AlterUniqueTogether( name="file", unique_together={("project", "hash")}, ), migrations.AlterUniqueTogether( name="metadata", unique_together={("title", "set", "project")}, ), migrations.AlterUniqueTogether( name="metadataset", unique_together={("title", "project")}, ), migrations.AlterUniqueTogether( name="tag", unique_together={("uid", "project")}, ), migrations.RemoveField( model_name="collection", name="owner", ), migrations.RemoveField( model_name="file", name="owner", ), migrations.RemoveField( model_name="metadata", name="owner", ), migrations.RemoveField( model_name="metadataset", name="owner", ), migrations.RemoveField( model_name="tag", name="owner", ), ]
resources/migrations/0018_alter_project_label.py 0 → 100644 +18 −0 Original line number Diff line number Diff line # Generated by Django 3.2.2 on 2021-09-21 08:39 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("resources", "0017_auto_20210920_1727"), ] operations = [ migrations.AlterField( model_name="project", name="label", field=models.TextField(unique=True), ), ]