diff --git a/arkindex/documents/api/entities.py b/arkindex/documents/api/entities.py index cdd2a1fa7ed51d29511c1347eae4bccca1a3bf46..bc94fd03f65369dde228c8a50537854c19a9066c 100644 --- a/arkindex/documents/api/entities.py +++ b/arkindex/documents/api/entities.py @@ -7,13 +7,7 @@ from django.shortcuts import get_object_or_404 from drf_spectacular.utils import OpenApiExample, OpenApiParameter, extend_schema, extend_schema_view from rest_framework import permissions, serializers, status from rest_framework.exceptions import NotFound, PermissionDenied -from rest_framework.generics import ( - CreateAPIView, - ListAPIView, - ListCreateAPIView, - RetrieveAPIView, - RetrieveUpdateDestroyAPIView, -) +from rest_framework.generics import CreateAPIView, ListAPIView, ListCreateAPIView, RetrieveUpdateDestroyAPIView from rest_framework.response import Response from arkindex.documents.models import ( @@ -38,7 +32,7 @@ from arkindex.documents.serializers.entities import ( TranscriptionEntitySerializer, ) from arkindex.process.models import WorkerVersion -from arkindex.project.mixins import ACLMixin, CorpusACLMixin, DeprecatedMixin +from arkindex.project.mixins import ACLMixin, CorpusACLMixin from arkindex.project.openapi import UUID_OR_FALSE from arkindex.project.permissions import IsVerified, IsVerifiedOrReadOnly from arkindex.users.models import Role @@ -323,27 +317,6 @@ class TranscriptionEntities(ListAPIView): ) -@extend_schema_view( - get=extend_schema( - operation_id='ListElementEntities', - tags=['entities'], - deprecated=True, - parameters=[ - OpenApiParameter( - 'worker_version', - type=UUID, - description='Only include entities created by a specific worker version', - required=False, - ) - ] - ) -) -class ElementEntities(DeprecatedMixin, RetrieveAPIView): - """ - List all entities linked to an element's transcriptions and metadata - """ - - @extend_schema_view( get=extend_schema( operation_id='ListCorpusEntities', diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py index 47969aa2791d9e26c2eb16b5857c135854657a92..fd05dc4e5bf0da81ae368aa4ad3edd9ba91522ce 100644 --- a/arkindex/documents/serializers/elements.py +++ b/arkindex/documents/serializers/elements.py @@ -2,30 +2,18 @@ import math import uuid from collections import defaultdict from textwrap import dedent -from uuid import UUID from django.conf import settings from django.contrib.gis.geos import LinearRing from django.core.exceptions import ValidationError as DjangoValidationError from django.core.validators import URLValidator from django.db import transaction -from django.utils.functional import cached_property from drf_spectacular.utils import extend_schema_field from rest_framework import serializers from rest_framework.exceptions import ValidationError -from arkindex.documents.models import ( - Corpus, - Element, - ElementPath, - ElementType, - Entity, - MetaData, - MetaType, - Transcription, - TranscriptionEntity, -) -from arkindex.documents.serializers.entities import BaseEntitySerializer, TranscriptionEntityDetailsSerializer +from arkindex.documents.models import Corpus, Element, ElementPath, ElementType, Entity, MetaData, MetaType +from arkindex.documents.serializers.entities import BaseEntitySerializer from arkindex.documents.serializers.light import ( CorpusLightSerializer, ElementLightSerializer, @@ -852,71 +840,6 @@ class ElementCreateSerializer(ElementLightSerializer): return ElementSerializer(instance, context=self.context).data -class ElementEntitiesSerializer(ElementLightSerializer): - """ - Serialize an element with its entities - Entities are split into two types, those extracted - from metadata and those extracted from element transcriptions - """ - metadata = MetaDataSerializer(many=True) - transcriptions = TranscriptionEntityDetailsSerializer(many=True) - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - if not self.context.get('request'): - # Keep original fields so OpenAPI can build its schemas - return - self.fields['transcriptions'] = serializers.SerializerMethodField() - self.fields['metadata'] = serializers.SerializerMethodField() - - @cached_property - def worker_version_id(self): - if 'worker_version' not in self.context['request'].query_params: - return - - try: - worker_version_id = UUID(self.context['request'].query_params['worker_version']) - except (TypeError, ValueError): - raise ValidationError({'worker_version': ['Invalid UUID']}) - - if not WorkerVersion.objects.filter(id=worker_version_id).exists(): - raise ValidationError({'worker_version': ['This worker version does not exist.']}) - - return worker_version_id - - def get_transcriptions(self, element): - filters = { - 'transcription__in': Transcription.objects.filter(element_id=element.id), - } - if self.worker_version_id: - filters['entity__worker_version_id'] = self.worker_version_id - - transcription_entities = TranscriptionEntity.objects \ - .filter(**filters) \ - .prefetch_related('entity') \ - .order_by('offset') - - return TranscriptionEntityDetailsSerializer(transcription_entities, many=True).data - - @extend_schema_field(MetaDataSerializer(many=True)) - def get_metadata(self, obj): - if self.worker_version_id: - # entity__isnull is not needed here as this will already do an INNER JOIN and exclude nulls - filters = {'entity__worker_version_id': self.worker_version_id} - else: - filters = {'entity__isnull': False} - - metadata = obj.metadatas \ - .filter(**filters) \ - .prefetch_related('entity') - - return MetaDataSerializer(metadata, many=True).data - - class Meta: - model = Element - fields = ('transcriptions', 'metadata') - - class ElementTypeSerializer(ElementTypeLightSerializer): """ Serialize an element type with its corpus diff --git a/arkindex/documents/tests/test_entities_api.py b/arkindex/documents/tests/test_entities_api.py index 5e6c74a1cace13b04773684f2cd5b36760a44f64..a3513bec62df12928564f1f74f7524535333a2db 100644 --- a/arkindex/documents/tests/test_entities_api.py +++ b/arkindex/documents/tests/test_entities_api.py @@ -1158,15 +1158,6 @@ class TestEntitiesAPI(FixtureAPITestCase): ] }) - def test_list_element_entities_deprecated(self): - """ - The ListElementEntities endpoint has been deprecated - """ - with self.assertNumQueries(0): - response = self.client.get(reverse('api:element-entities', kwargs={'pk': str(self.element.id)})) - self.assertEqual(response.status_code, status.HTTP_410_GONE) - self.assertDictEqual(response.json(), {'detail': 'This endpoint has been deprecated.'}) - def test_delete_entity(self): self.client.force_login(self.user) response = self.client.delete(reverse('api:entity-details', kwargs={'pk': str(self.entity.id)})) diff --git a/arkindex/project/api_v1.py b/arkindex/project/api_v1.py index a0e2ead42af3ff0da6bf15ec44ab00e3a920eac8..5d32d1ae397127c6cb17b0a52eea24d79cdd79b5 100644 --- a/arkindex/project/api_v1.py +++ b/arkindex/project/api_v1.py @@ -30,7 +30,6 @@ from arkindex.documents.api.elements import ( from arkindex.documents.api.entities import ( CorpusEntities, CorpusRoles, - ElementEntities, ElementLinks, EntityCreate, EntityDetails, @@ -137,7 +136,6 @@ api = [ path('element/<uuid:pk>/children/bulk/', ElementBulkCreate.as_view(), name='elements-bulk-create'), path('element/<uuid:pk>/metadata/', ElementMetadata.as_view(), name='element-metadata'), path('element/<uuid:pk>/metadata/bulk/', ElementMetadataBulk.as_view(), name='element-metadata-bulk'), - path('element/<uuid:pk>/entities/', ElementEntities.as_view(), name='element-entities'), path('element/<uuid:pk>/links/', ElementLinks.as_view(), name='element-links'), path('element/<uuid:pk>/transcription/', TranscriptionCreate.as_view(), name='transcription-create'), path('element/<uuid:pk>/transcriptions/', ElementTranscriptions.as_view(), name='element-transcriptions'),