瀏覽代碼

[doc2] Refactor documents and get_documents API pagination

Jenny Kim 9 年之前
父節點
當前提交
da564e6
共有 3 個文件被更改,包括 29 次插入23 次删除
  1. 8 1
      desktop/core/src/desktop/api2.py
  2. 3 11
      desktop/core/src/desktop/models.py
  3. 18 11
      desktop/core/src/desktop/tests_doc2.py

+ 8 - 1
desktop/core/src/desktop/api2.py

@@ -95,7 +95,14 @@ def get_documents(request):
   sort = request.GET.get('sort', '-last_modified')
   search_text = request.GET.get('text', None)
 
-  documents, count = directory.documents(types=type_filters, search_text=search_text, page=page, limit=limit, order_by=sort)
+  documents = directory.documents(types=type_filters, search_text=search_text, order_by=sort)
+  count = documents.count()
+
+  # Paginate
+  if limit > 0:
+    offset = (page - 1) * limit
+    last = offset + limit
+    documents = documents.all()[offset:last]
 
   return JsonResponse({
       'path': path,

+ 3 - 11
desktop/core/src/desktop/models.py

@@ -967,27 +967,19 @@ class Directory(Document2):
     return Document2.objects.get(type='directory', dependencies=[self.pk]) # or name__startswith=self.name
 
 
-  def documents(self, types=None, search_text=None, page=1, limit=0, order_by=None):
+  def documents(self, types=None, search_text=None, order_by=None):
     documents = self.dependencies.all()  # TODO: perms
 
     if types and isinstance(types, list):
       documents = documents.filter(type__in=types)
 
     if search_text:
-      documents = documents.filter(Q(name__icontains=search_text) |
-                                   Q(description__icontains=search_text))
+      documents = documents.filter(Q(name__icontains=search_text) | Q(description__icontains=search_text))
 
     if order_by:  # TODO: Validate that order_by is a valid sort parameter
       documents = documents.order_by(order_by)
 
-    count = documents.count()
-
-    if limit > 0:
-      offset = (page - 1) * limit
-      last = offset + limit
-      documents = documents.all()[offset:last]
-
-    return documents, count
+    return documents
 
 
 class Document2Permission(models.Model):

+ 18 - 11
desktop/core/src/desktop/tests_doc2.py

@@ -118,20 +118,27 @@ class TestDocument2(object):
     home_dir.dependencies.add(*children)
 
     # Test that all children directories and documents are returned
-    documents, count = home_dir.documents()
-    assert_equal(4, count, documents)
+    response = self.client.get('/desktop/api2/docs', {'path': '/'})
+    data = json.loads(response.content)
+    assert_true('documents' in data)
+    assert_equal(4, data['count'])
 
     # Test filter type
-    documents, count = home_dir.documents(types=['directory'])
-    assert_equal(2, count, documents)
-    assert_true(all(doc.type == 'directory' for doc in documents))
+    response = self.client.get('/desktop/api2/docs', {'path': '/', 'type': ['directory']})
+    data = json.loads(response.content)
+    assert_equal(['directory'], data['types'])
+    assert_equal(2, data['count'])
+    assert_true(all(doc['type'] == 'directory' for doc in data['documents']))
 
     # Test search text
-    documents, count = home_dir.documents(search_text='query')
-    assert_equal(2, count, documents)
-    assert_true(all(doc.name.startswith('query') for doc in documents))
+    response = self.client.get('/desktop/api2/docs', {'path': '/', 'text': 'query'})
+    data = json.loads(response.content)
+    assert_equal('query', data['text'])
+    assert_equal(2, data['count'])
+    assert_true(all(doc['name'].startswith('query') for doc in data['documents']))
 
     # Test pagination with limit
-    documents, count = home_dir.documents(page=2, limit=2)
-    assert_equal(4, count, documents)
-    assert_equal(2, len(documents))
+    response = self.client.get('/desktop/api2/docs', {'path': '/', 'page': 2, 'limit': 2})
+    data = json.loads(response.content)
+    assert_equal(4, data['count'])
+    assert_equal(2, len(data['documents']))