From 218cc1e322f086a82b765dba32e3c6e7b1c43528 Mon Sep 17 00:00:00 2001 From: vrigal <rigal@teklia.com> Date: Mon, 2 Dec 2019 10:57:23 +0100 Subject: [PATCH] Add structure metadata filter in filtered ListElement endpoints --- arkindex/documents/api/elements.py | 44 +++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py index 329e450aed..a875a0383e 100644 --- a/arkindex/documents/api/elements.py +++ b/arkindex/documents/api/elements.py @@ -7,7 +7,7 @@ from rest_framework.generics import ( ) from rest_framework import status, response from rest_framework.response import Response -from arkindex_common.enums import TranscriptionType +from arkindex_common.enums import TranscriptionType, MetaType from arkindex.documents.models import ( Corpus, Element, ElementPath, Right, MetaData, AllowedMetaData, Classification, ClassificationState, Transcription, Region @@ -113,6 +113,13 @@ class ElementsList(CorpusACLMixin, ListAPIView): 'schema': { 'type': 'boolean', } + }, + { + 'name': 'structure', + 'in': 'query', + 'description': 'Filter elements by a structural metadata.', + 'required': False, + 'schema': {'type': 'string'}, } ] } @@ -136,6 +143,13 @@ class ElementsList(CorpusACLMixin, ListAPIView): if only_folder is not None: filters['type__folder'] = only_folder.lower() not in ('false', '0') + structure_param = self.request.query_params.get('structure') + if structure_param is not None: + filters['metadatas__in'] = MetaData.objects.filter( + type=MetaType.Structure, + value__contains=structure_param + ) + if 'corpus' in self.request.query_params: try: corpus_id = UUID(self.request.query_params['corpus']) @@ -370,6 +384,13 @@ class ElementParents(ListAPIView): 'schema': { 'type': 'boolean', } + }, + { + 'name': 'structure', + 'in': 'query', + 'description': 'Filter elements by a structural metadata.', + 'required': False, + 'schema': {'type': 'string'}, } ] } @@ -394,6 +415,13 @@ class ElementParents(ListAPIView): if only_folder is not None: filters['type__folder'] = only_folder.lower() not in ('false', '0') + structure_param = self.request.query_params.get('structure') + if structure_param is not None: + filters['metadatas__in'] = MetaData.objects.filter( + type=MetaType.Structure, + value__contains=structure_param + ) + recursive_param = self.request.query_params.get('recursive') prefetch_related_lookups = ('zone__image__server', 'corpus', 'type') @@ -506,6 +534,13 @@ class ElementChildren(ListAPIView): 'schema': { 'type': 'boolean', } + }, + { + 'name': 'structure', + 'in': 'query', + 'description': 'Filter elements by a structural metadata.', + 'required': False, + 'schema': {'type': 'string'}, } ] } @@ -530,6 +565,13 @@ class ElementChildren(ListAPIView): if only_folder is not None: filters['type__folder'] = only_folder.lower() not in ('false', '0') + structure_param = self.request.query_params.get('structure') + if structure_param is not None: + filters['metadatas__in'] = MetaData.objects.filter( + type=MetaType.Structure, + value__contains=structure_param + ) + recursive_param = self.request.query_params.get('recursive') prefetch_related_lookups = ('zone__image__server', 'corpus', 'type') -- GitLab