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