diff --git a/arkindex/documents/admin.py b/arkindex/documents/admin.py index 9b4c5526e739f46e73e30505ec56d658cbd9535f..9d41d26f50693bee59074fc0d4ebca154b23103d 100644 --- a/arkindex/documents/admin.py +++ b/arkindex/documents/admin.py @@ -31,7 +31,6 @@ class CorpusExportInline(admin.TabularInline): class CorpusAdmin(admin.ModelAdmin): list_display = ('id', 'name', 'public', 'top_level_type', 'created') - raw_id_fields = ('thumbnail', ) search_fields = ('name', ) inlines = (ElementTypeInline, UserMembershipInline, GroupMembershipInline, CorpusExportInline) ordering = ('-created', ) diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py index 9c11403cf2ca93ce7fb020db0c06bb94e0cfe616..8e49058427699b9453725a3a41ffbc9beb839015 100644 --- a/arkindex/documents/api/elements.py +++ b/arkindex/documents/api/elements.py @@ -1369,7 +1369,6 @@ class CorpusList(ListCreateAPIView): corpora = Corpus.objects \ .filter(id__in=corpora_level) \ .annotate(authorized_users=Count('memberships')) \ - .select_related('thumbnail__image__server') \ .prefetch_related('types') \ .order_by('name', 'id') diff --git a/arkindex/documents/fixtures/data.json b/arkindex/documents/fixtures/data.json index 0d06e59c37e90ce15d616ece600c7156ab61f97e..7e68b9217049a2d0b50bf8c6a9e37256c0b5ec54 100644 --- a/arkindex/documents/fixtures/data.json +++ b/arkindex/documents/fixtures/data.json @@ -248,8 +248,7 @@ "description": "", "top_level_type": null, "public": true, - "indexable": false, - "thumbnail": null + "indexable": false } }, { diff --git a/arkindex/documents/migrations/0059_remove_corpus_thumbnail.py b/arkindex/documents/migrations/0059_remove_corpus_thumbnail.py new file mode 100644 index 0000000000000000000000000000000000000000..ed17dae05651bfb9fc95583c64e5b81066e8302b --- /dev/null +++ b/arkindex/documents/migrations/0059_remove_corpus_thumbnail.py @@ -0,0 +1,17 @@ +# Generated by Django 4.0.4 on 2022-08-30 10:16 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0058_remove_corpus_repository'), + ] + + operations = [ + migrations.RemoveField( + model_name='corpus', + name='thumbnail', + ), + ] diff --git a/arkindex/documents/models.py b/arkindex/documents/models.py index dfe1c15d417bb70d9274aef38059bf7799c4c814..66b5aeb5023922a43f997b8f5581541c8ed182f4 100644 --- a/arkindex/documents/models.py +++ b/arkindex/documents/models.py @@ -49,15 +49,6 @@ class Corpus(IndexableModel): # Is this corpus indexable ? indexable = models.BooleanField(default=False) - thumbnail = models.OneToOneField( - 'documents.Element', - on_delete=models.SET_NULL, - related_name='thumbnail_corpus', - help_text='Optional element used as the thumbnail for this corpus', - null=True, - blank=True - ) - # Specific manager for ACL objects = CorpusManager() diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py index 696ca5773f9f39e440d4597e9c623a205dfea5d4..36a1ec4dfa0f28f91f6949188e7a6931bbd70e8c 100644 --- a/arkindex/documents/serializers/elements.py +++ b/arkindex/documents/serializers/elements.py @@ -276,13 +276,6 @@ class CorpusSerializer(serializers.ModelSerializer): read_only=True, help_text='Number of users or groups that have been granted access rights on this corpus.', ) - thumbnail = serializers.PrimaryKeyRelatedField( - queryset=Element.objects.none(), - allow_null=True, - default=None, - style={'base_template': 'input.html'}, - ) - thumbnail_url = serializers.SerializerMethodField(read_only=True) class Meta: model = Corpus @@ -297,8 +290,6 @@ class CorpusSerializer(serializers.ModelSerializer): 'created', 'authorized_users', 'indexable', - 'thumbnail', - 'thumbnail_url', ) extra_kwargs = { 'public': { @@ -313,8 +304,7 @@ class CorpusSerializer(serializers.ModelSerializer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if isinstance(self.instance, Corpus): - # There is an existing corpus; allow its elements as thumbnails and its types as top level types - self.fields['thumbnail'].queryset = self.instance.elements.exclude(image_id=None) + # There is an existing corpus; allow its types as top level types self.fields['top_level_type'].queryset = self.instance.types.all() @extend_schema_field(serializers.ListField(child=serializers.ChoiceField(['read', 'write', 'admin']))) @@ -339,11 +329,6 @@ class CorpusSerializer(serializers.ModelSerializer): count = corpus.memberships.count() return count - @extend_schema_field(serializers.URLField(allow_null=True)) - def get_thumbnail_url(self, corpus): - if corpus.thumbnail: - return corpus.thumbnail.iiif_url - def validate_public(self, public): """ Only an admin can toggle a corpus public property diff --git a/arkindex/documents/tests/test_corpus.py b/arkindex/documents/tests/test_corpus.py index a9c3c0bce653782193ed7aa964e4dc77c1e26746..742c6f23c910f762397a52286bf224a83ee99442 100644 --- a/arkindex/documents/tests/test_corpus.py +++ b/arkindex/documents/tests/test_corpus.py @@ -7,7 +7,6 @@ from django.urls import reverse from rest_framework import status from arkindex.documents.models import Corpus, Element -from arkindex.images.models import Image from arkindex.project.default_corpus import DEFAULT_CORPUS_TYPES from arkindex.project.tests import FixtureAPITestCase from arkindex.users.models import Role, User @@ -94,8 +93,6 @@ class TestCorpus(FixtureAPITestCase): 'description': '', 'created': DB_CREATED, 'authorized_users': 1, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, } ] @@ -128,8 +125,6 @@ class TestCorpus(FixtureAPITestCase): 'description': '', 'created': DB_CREATED, 'authorized_users': 2, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, }, { @@ -141,8 +136,6 @@ class TestCorpus(FixtureAPITestCase): 'description': '', 'created': DB_CREATED, 'authorized_users': 1, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, } ] @@ -176,8 +169,6 @@ class TestCorpus(FixtureAPITestCase): 'description': '', 'created': DB_CREATED, 'authorized_users': 2, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, }, { @@ -189,8 +180,6 @@ class TestCorpus(FixtureAPITestCase): 'description': '', 'created': DB_CREATED, 'authorized_users': 0, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, }, { @@ -202,8 +191,6 @@ class TestCorpus(FixtureAPITestCase): 'description': '', 'created': DB_CREATED, 'authorized_users': 1, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, } ] @@ -333,8 +320,6 @@ class TestCorpus(FixtureAPITestCase): 'rights': ['read'], 'created': DB_CREATED, 'authorized_users': 1, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, }) @@ -353,8 +338,6 @@ class TestCorpus(FixtureAPITestCase): 'types': [], 'created': DB_CREATED, 'authorized_users': 2, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, }) @@ -388,8 +371,6 @@ class TestCorpus(FixtureAPITestCase): 'rights': ['read', 'write', 'admin'], 'created': DB_CREATED, 'authorized_users': 1, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, }) @@ -417,8 +398,6 @@ class TestCorpus(FixtureAPITestCase): 'types': [], 'created': DB_CREATED, 'authorized_users': 2, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, }) @@ -439,8 +418,6 @@ class TestCorpus(FixtureAPITestCase): 'types': [], 'created': DB_CREATED, 'authorized_users': 2, - 'thumbnail': None, - 'thumbnail_url': None, 'top_level_type': None, }) @@ -455,69 +432,6 @@ class TestCorpus(FixtureAPITestCase): self.assertEqual(self.corpus_private.name, 'new name') self.assertEqual(self.corpus_private.description, 'new description') - def test_partial_update_thumbnail(self): - self.client.force_login(self.corpus_admin) - element = self.corpus_private.elements.create( - type=self.corpus_private.types.create( - slug='my_type', - display_name='My type', - ), - image=Image.objects.first(), - polygon=((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)), - name='An element', - ) - response = self.client.patch(reverse('api:corpus-retrieve', kwargs={'pk': self.corpus_private.id}), { - 'thumbnail': str(element.id), - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.corpus_private.refresh_from_db() - self.assertEqual(self.corpus_private.thumbnail, element) - - def test_partial_update_thumbnail_none(self): - self.client.force_login(self.corpus_admin) - element = self.corpus_private.elements.create( - type=self.corpus_private.types.create( - slug='my_type', - display_name='My type', - ), - image=Image.objects.first(), - polygon=((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)), - name='An element', - ) - self.corpus_private.thumbnail = element - self.corpus_private.save() - response = self.client.patch(reverse('api:corpus-retrieve', kwargs={'pk': self.corpus_private.id}), { - 'thumbnail': None - }, format='json') - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.corpus_private.refresh_from_db() - self.assertIsNone(self.corpus_private.thumbnail) - - def test_partial_update_thumbnail_no_zone(self): - self.client.force_login(self.corpus_admin) - folder = self.corpus_private.elements.create( - type=self.corpus_private.types.create(slug='folder', folder=True), - name='A folder', - ) - response = self.client.patch(reverse('api:corpus-retrieve', kwargs={'pk': self.corpus_private.id}), { - 'thumbnail': str(folder.id) - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), { - 'thumbnail': [f'Invalid pk "{folder.id}" - object does not exist.'] - }) - - def test_partial_update_thumbnail_wrong_corpus(self): - self.client.force_login(self.corpus_admin) - element = self.corpus_public.elements.filter(polygon__isnull=False).first() - response = self.client.patch(reverse('api:corpus-retrieve', kwargs={'pk': self.corpus_private.id}), { - 'thumbnail': str(element.id) - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), { - 'thumbnail': [f'Invalid pk "{element.id}" - object does not exist.'] - }) - def test_partial_update_private_to_public_normal_user(self): """ A normal user should not be able to make a private corpus public @@ -625,74 +539,6 @@ class TestCorpus(FixtureAPITestCase): 'name': ['This field is required.'], }) - def test_update_thumbnail(self): - self.client.force_login(self.corpus_admin) - element = self.corpus_private.elements.create( - type=self.corpus_private.types.create( - slug='my_type', - display_name='My type', - ), - image=Image.objects.first(), - polygon=((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)), - name='An element', - ) - response = self.client.put(reverse('api:corpus-retrieve', kwargs={'pk': self.corpus_private.id}), { - 'name': 'new name', - 'thumbnail': str(element.id), - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.corpus_private.refresh_from_db() - self.assertEqual(self.corpus_private.name, 'new name') - self.assertEqual(self.corpus_private.thumbnail, element) - - def test_update_thumbnail_none(self): - self.client.force_login(self.corpus_admin) - element = self.corpus_private.elements.create( - type=self.corpus_private.types.create( - slug='my_type', - display_name='My type', - ), - image=Image.objects.first(), - polygon=((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)), - name='An element', - ) - self.corpus_private.thumbnail = element - self.corpus_private.save() - response = self.client.put(reverse('api:corpus-retrieve', kwargs={'pk': self.corpus_private.id}), { - 'name': 'new name', - 'thumbnail': None - }, format='json') - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.corpus_private.refresh_from_db() - self.assertIsNone(self.corpus_private.thumbnail) - - def test_update_thumbnail_no_zone(self): - self.client.force_login(self.corpus_admin) - folder = self.corpus_private.elements.create( - type=self.corpus_private.types.create(slug='folder', folder=True), - name='A folder', - ) - response = self.client.put(reverse('api:corpus-retrieve', kwargs={'pk': self.corpus_private.id}), { - 'name': 'new name', - 'thumbnail': str(folder.id) - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), { - 'thumbnail': [f'Invalid pk "{folder.id}" - object does not exist.'] - }) - - def test_update_thumbnail_wrong_corpus(self): - self.client.force_login(self.corpus_admin) - element = self.corpus_public.elements.filter(polygon__isnull=False).first() - response = self.client.put(reverse('api:corpus-retrieve', kwargs={'pk': self.corpus_private.id}), { - 'name': 'new name', - 'thumbnail': str(element.id) - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertDictEqual(response.json(), { - 'thumbnail': [f'Invalid pk "{element.id}" - object does not exist.'] - }) - def test_update_private_to_public_normal_user(self): """ A normal user should not be able to make a private corpus public diff --git a/arkindex/sql_validation/corpus_delete.sql b/arkindex/sql_validation/corpus_delete.sql index 00542b4d0a63a5b902e23de1abfed2988b3218bd..42b188b4d14269116a6eeefcb67ac2e3cb1c77a3 100644 --- a/arkindex/sql_validation/corpus_delete.sql +++ b/arkindex/sql_validation/corpus_delete.sql @@ -5,8 +5,7 @@ SELECT "documents_corpus"."created", "documents_corpus"."description", "documents_corpus"."top_level_type_id", "documents_corpus"."public", - "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id" + "documents_corpus"."indexable" FROM "documents_corpus" WHERE "documents_corpus"."id" = '{corpus_id}'::uuid LIMIT 21; diff --git a/arkindex/sql_validation/corpus_delete_top_level_type.sql b/arkindex/sql_validation/corpus_delete_top_level_type.sql index b1038ff21aeaf9d3379dee870509145395e1c33c..c02e8ef3c345774cad4c2dbfe2362a59f67da39b 100644 --- a/arkindex/sql_validation/corpus_delete_top_level_type.sql +++ b/arkindex/sql_validation/corpus_delete_top_level_type.sql @@ -5,8 +5,7 @@ SELECT "documents_corpus"."created", "documents_corpus"."description", "documents_corpus"."top_level_type_id", "documents_corpus"."public", - "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id" + "documents_corpus"."indexable" FROM "documents_corpus" WHERE "documents_corpus"."id" = '{corpus_id}'::uuid LIMIT 21; diff --git a/arkindex/sql_validation/corpus_rights_filter.sql b/arkindex/sql_validation/corpus_rights_filter.sql index 25a1bda56cec14157fb80b732307da1a75f4238f..9122e1515ed7c904ccee5b86cdc30dd3cf2013a1 100644 --- a/arkindex/sql_validation/corpus_rights_filter.sql +++ b/arkindex/sql_validation/corpus_rights_filter.sql @@ -22,7 +22,6 @@ SELECT "documents_corpus"."created", "documents_corpus"."top_level_type_id", "documents_corpus"."public", "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id", LEAST("users_right"."level", T5."level") AS "max_level" FROM "documents_corpus" INNER JOIN "users_right" ON ("documents_corpus"."id" = "users_right"."content_id" diff --git a/arkindex/sql_validation/corpus_rights_filter_public.sql b/arkindex/sql_validation/corpus_rights_filter_public.sql index 2eeb47798d6f912c479ad5a2152a3acc31d57454..03bc0851e01179c602279af11a40745878a860a3 100644 --- a/arkindex/sql_validation/corpus_rights_filter_public.sql +++ b/arkindex/sql_validation/corpus_rights_filter_public.sql @@ -23,7 +23,6 @@ LIMIT 21; "documents_corpus"."top_level_type_id", "documents_corpus"."public", "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id", LEAST("users_right"."level", T5."level") AS "max_level" FROM "documents_corpus" INNER JOIN "users_right" ON ("documents_corpus"."id" = "users_right"."content_id" @@ -43,7 +42,6 @@ UNION "documents_corpus"."top_level_type_id", "documents_corpus"."public", "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id", 10 AS "max_level" FROM "documents_corpus" WHERE "documents_corpus"."public") diff --git a/arkindex/sql_validation/element_links.sql b/arkindex/sql_validation/element_links.sql index d54f4c2bbfd1f4ea3f4c7ace332e7cae15d1488d..f2fee404b2a4a1150d2c5b4b88eaaa83b7c99065 100644 --- a/arkindex/sql_validation/element_links.sql +++ b/arkindex/sql_validation/element_links.sql @@ -7,8 +7,7 @@ SELECT "documents_element"."id", "documents_corpus"."description", "documents_corpus"."top_level_type_id", "documents_corpus"."public", - "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id" + "documents_corpus"."indexable" FROM "documents_element" INNER JOIN "documents_corpus" ON ("documents_element"."corpus_id" = "documents_corpus"."id") WHERE "documents_element"."id" = '{element_id}'::uuid diff --git a/arkindex/sql_validation/element_links_not_found.sql b/arkindex/sql_validation/element_links_not_found.sql index 3ab9b4885f401a639c7888a15dbe9f23bc715d12..81df4cee727db310d5bd2c0887fa4c3bd2e65c56 100644 --- a/arkindex/sql_validation/element_links_not_found.sql +++ b/arkindex/sql_validation/element_links_not_found.sql @@ -7,8 +7,7 @@ SELECT "documents_element"."id", "documents_corpus"."description", "documents_corpus"."top_level_type_id", "documents_corpus"."public", - "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id" + "documents_corpus"."indexable" FROM "documents_element" INNER JOIN "documents_corpus" ON ("documents_element"."corpus_id" = "documents_corpus"."id") WHERE "documents_element"."id" = '{element_id}'::uuid diff --git a/arkindex/sql_validation/list_elements.sql b/arkindex/sql_validation/list_elements.sql index 579b3c735be98bc346290af5fe2905d9a7de97d8..9d23eaa4b2445d297a72b24db9636033ca1b73fa 100644 --- a/arkindex/sql_validation/list_elements.sql +++ b/arkindex/sql_validation/list_elements.sql @@ -5,8 +5,7 @@ SELECT "documents_corpus"."created", "documents_corpus"."description", "documents_corpus"."top_level_type_id", "documents_corpus"."public", - "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id" + "documents_corpus"."indexable" FROM "documents_corpus" WHERE "documents_corpus"."id" = '{corpus_id}'::uuid LIMIT 21; diff --git a/arkindex/sql_validation/process_elements_filter_type.sql b/arkindex/sql_validation/process_elements_filter_type.sql index 34b1efa60b7f9b47e4836a386f92918dd40940ea..bbe7357519b10e06bdc361b6ffe1745a83b137fd 100644 --- a/arkindex/sql_validation/process_elements_filter_type.sql +++ b/arkindex/sql_validation/process_elements_filter_type.sql @@ -51,8 +51,7 @@ SELECT "documents_corpus"."created", "documents_corpus"."description", "documents_corpus"."top_level_type_id", "documents_corpus"."public", - "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id" + "documents_corpus"."indexable" FROM "documents_corpus" WHERE "documents_corpus"."id" = '{corpus_id}'::uuid LIMIT 21; diff --git a/arkindex/sql_validation/process_elements_top_level.sql b/arkindex/sql_validation/process_elements_top_level.sql index 378858eb7d6ed6b6db6f7dcd71e2f048b8d8cf5d..3eb749289f100938050480927994e52ccfdf2e2c 100644 --- a/arkindex/sql_validation/process_elements_top_level.sql +++ b/arkindex/sql_validation/process_elements_top_level.sql @@ -51,8 +51,7 @@ SELECT "documents_corpus"."created", "documents_corpus"."description", "documents_corpus"."top_level_type_id", "documents_corpus"."public", - "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id" + "documents_corpus"."indexable" FROM "documents_corpus" WHERE "documents_corpus"."id" = '{corpus_id}'::uuid LIMIT 21; diff --git a/arkindex/sql_validation/process_elements_with_image.sql b/arkindex/sql_validation/process_elements_with_image.sql index da5c5a83c597c396f10caad0444efcf26456f898..364a9a26b3911a6cb36c0678b2ff76928c9bdb78 100644 --- a/arkindex/sql_validation/process_elements_with_image.sql +++ b/arkindex/sql_validation/process_elements_with_image.sql @@ -51,8 +51,7 @@ SELECT "documents_corpus"."created", "documents_corpus"."description", "documents_corpus"."top_level_type_id", "documents_corpus"."public", - "documents_corpus"."indexable", - "documents_corpus"."thumbnail_id" + "documents_corpus"."indexable" FROM "documents_corpus" WHERE "documents_corpus"."id" = '{corpus_id}'::uuid LIMIT 21;