From 733491203edc876731678119de41bd462a74cb26 Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Thu, 3 May 2018 12:55:43 +0200 Subject: [PATCH] Optimise get_ascendings usage --- src/documents/api.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/documents/api.py b/src/documents/api.py index 2d741a3e7c..5ac8846575 100644 --- a/src/documents/api.py +++ b/src/documents/api.py @@ -48,25 +48,24 @@ class DocumentPages(ListAPIView): return Page.objects.get_descending(self.kwargs['pk']) -class SearchResultSetPagination(PageNumberPagination): - page_size = 10 - page_size_query_param = 'page_size' - max_page_size = 20 - - class TranscriptionSearch(ListAPIView): """ Search and list transcriptions, using pagination """ serializer_class = SearchResultSerializer - pagination_class = SearchResultSetPagination - @lru_cache(maxsize=10) def get_queryset(self): query = self.request.query_params.get('q') - if query: - return search_transcriptions(query) - return None + if not query: + return + return search_transcriptions(query) + + def add_parents(self, results): + ids = [trans.id for trans in results] + all_parents = Document.objects.get_ascendings(*ids) + for trans in results: + trans.parent_docs = all_parents[trans.id] + return results def list(self, request): queryset = self.get_queryset() @@ -76,10 +75,10 @@ class TranscriptionSearch(ListAPIView): # Handle pagination, if activated page = self.paginate_queryset(queryset) if page is not None: - serializer = self.get_serializer(page, many=True) + serializer = self.get_serializer(self.add_parents(page), many=True) return self.get_paginated_response(serializer.data) - serializer = self.get_serializer(queryset, many=True) + serializer = self.get_serializer(self.add_parents(queryset), many=True) return Response(serializer.data) -- GitLab