Skip to content
Snippets Groups Projects
Commit c3250bec authored by Bastien Abadie's avatar Bastien Abadie
Browse files

Merge branch 'list-corpus-entities' into 'master'

Create ListCorpusEntities endpoint

See merge request !1358
parents 35faeff7 e2e1a526
No related branches found
No related tags found
1 merge request!1358Create ListCorpusEntities endpoint
......@@ -29,6 +29,7 @@ from arkindex.documents.models import (
)
from arkindex.documents.serializers.elements import ElementEntitiesSerializer, ElementSlimSerializer
from arkindex.documents.serializers.entities import (
BaseEntitySerializer,
CreateEntityRoleErrorResponseSerializer,
EntityCreateSerializer,
EntityLinkCreateSerializer,
......@@ -331,6 +332,22 @@ class ElementEntities(RetrieveAPIView):
return Element.objects.filter(corpus__in=corpora).select_related('type').only('id', 'type__slug', 'name')
@extend_schema_view(
get=extend_schema(
operation_id='ListCorpusEntities',
tags=['entities'],
)
)
class CorpusEntities(CorpusACLMixin, ListAPIView):
"""
List all entities in a corpus.
"""
serializer_class = BaseEntitySerializer
def get_queryset(self):
return self.get_corpus(self.kwargs['pk']).entities.order_by('name', 'id')
@extend_schema_view(get=extend_schema(operation_id='ListElementLinks', tags=['entities']))
class ElementLinks(CorpusACLMixin, ListAPIView):
"""
......
......@@ -685,6 +685,43 @@ class TestEntitiesAPI(FixtureAPITestCase):
}]
)
def test_list_corpus_entities(self):
with self.assertNumQueries(3):
response = self.client.get(reverse('api:corpus-entities', kwargs={'pk': str(self.corpus.id)}))
self.assertEqual(response.status_code, status.HTTP_200_OK)
data = response.json()
self.assertDictEqual(data, {
'count': 2,
'previous': None,
'next': None,
'number': 1,
'results': [
{
'id': str(self.entity.id),
'name': 'entity 1',
'type': 'person',
'validated': False,
'dates': [],
'metas': None,
'worker_version_id': str(self.worker_version_1.id),
},
{
'id': str(self.entity_bis.id),
'name': 'entity 2',
'type': 'location',
'validated': False,
'dates': [],
'metas': None,
'worker_version_id': str(self.worker_version_2.id),
}
]
})
def test_list_corpus_entities_acl(self):
with self.assertNumQueries(1):
response = self.client.get(reverse('api:corpus-entities', kwargs={'pk': str(self.private_corpus.id)}))
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_list_element_entities(self):
"""
List an element's entities sorted depending on their origin (metadata or transcriptions)
......
......@@ -54,6 +54,7 @@ from arkindex.documents.api.elements import (
WorkerResultsDestroy,
)
from arkindex.documents.api.entities import (
CorpusEntities,
CorpusRoles,
ElementEntities,
ElementLinks,
......@@ -135,6 +136,7 @@ api = [
# `corpus` and not `pk` so that OpenAPI uses a `corpus` parameter
path('corpus/<uuid:corpus>/elements/', CorpusElements.as_view(), name='corpus-elements'),
path('corpus/<uuid:pk>/classes/', CorpusMLClassList.as_view(), name='corpus-classes'),
path('corpus/<uuid:pk>/entities/', CorpusEntities.as_view(), name='corpus-entities'),
path('corpus/<uuid:pk>/roles/', CorpusRoles.as_view(), name='corpus-roles'),
path('corpus/<uuid:pk>/allowed-metadata/', CorpusAllowedMetaData.as_view(), name='corpus-allowed-metadata'),
path('corpus/<uuid:pk>/versions/', CorpusWorkerVersionList.as_view(), name='corpus-versions'),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment