Browse Source

additional data in api paginator and tests update

Rafał Pitoń 10 years ago
parent
commit
2712209028
2 changed files with 18 additions and 2 deletions
  1. 9 1
      misago/core/apipaginator.py
  2. 9 1
      misago/core/tests/test_apipaginator.py

+ 9 - 1
misago/core/apipaginator.py

@@ -37,6 +37,8 @@ class BaseApiPaginator(PageNumberPagination):
             'previous': None,
             'previous': None,
             'next': None,
             'next': None,
             'last': None,
             'last': None,
+            'before': 0,
+            'more': 0,
         }
         }
 
 
         if self.page.has_previous():
         if self.page.has_previous():
@@ -49,13 +51,19 @@ class BaseApiPaginator(PageNumberPagination):
             if self.page.next_page_number() < self.page.paginator.num_pages:
             if self.page.next_page_number() < self.page.paginator.num_pages:
                 pagination['next'] = self.page.next_page_number()
                 pagination['next'] = self.page.next_page_number()
 
 
+        if self.page.start_index():
+            pagination['before'] = self.page.start_index() - 1
+        pagination['more'] = self.page.paginator.count - self.page.end_index()
+
         return OrderedDict([
         return OrderedDict([
             ('count', self.page.paginator.count),
             ('count', self.page.paginator.count),
             ('pages', pagination['pages']),
             ('pages', pagination['pages']),
             ('first', pagination['first']),
             ('first', pagination['first']),
             ('previous', pagination['previous']),
             ('previous', pagination['previous']),
             ('next', pagination['next']),
             ('next', pagination['next']),
-            ('last', pagination['last'])
+            ('last', pagination['last']),
+            ('before', pagination['before']),
+            ('more', pagination['more'])
         ])
         ])
 
 
     def get_paginated_response(self, data):
     def get_paginated_response(self, data):

+ 9 - 1
misago/core/tests/test_apipaginator.py

@@ -29,6 +29,8 @@ class PaginatorTests(TestCase):
         self.assertEqual(meta['previous'], None)
         self.assertEqual(meta['previous'], None)
         self.assertEqual(meta['next'], None)
         self.assertEqual(meta['next'], None)
         self.assertEqual(meta['last'], None)
         self.assertEqual(meta['last'], None)
+        self.assertEqual(meta['before'], 0)
+        self.assertEqual(meta['more'], 0)
 
 
     def test_first_page(self):
     def test_first_page(self):
         """pagination works for first page of queryset"""
         """pagination works for first page of queryset"""
@@ -45,6 +47,8 @@ class PaginatorTests(TestCase):
         self.assertEqual(meta['previous'], None)
         self.assertEqual(meta['previous'], None)
         self.assertEqual(meta['next'], 2)
         self.assertEqual(meta['next'], 2)
         self.assertEqual(meta['last'], 3)
         self.assertEqual(meta['last'], 3)
+        self.assertEqual(meta['before'], 0)
+        self.assertEqual(meta['more'], 14)
 
 
         response = paginator.get_paginated_response(results)
         response = paginator.get_paginated_response(results)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
@@ -64,12 +68,14 @@ class PaginatorTests(TestCase):
         self.assertEqual(meta['previous'], None)
         self.assertEqual(meta['previous'], None)
         self.assertEqual(meta['next'], None)
         self.assertEqual(meta['next'], None)
         self.assertEqual(meta['last'], 3)
         self.assertEqual(meta['last'], 3)
+        self.assertEqual(meta['before'], 6)
+        self.assertEqual(meta['more'], 8)
 
 
         response = paginator.get_paginated_response(results)
         response = paginator.get_paginated_response(results)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
 
 
     def test_last_page(self):
     def test_last_page(self):
-        """pagination works for next page of queryset"""
+        """pagination works for last page of queryset"""
         paginator = ApiPaginator(6, 2)()
         paginator = ApiPaginator(6, 2)()
         querset = [i for i in xrange(20)]
         querset = [i for i in xrange(20)]
 
 
@@ -83,6 +89,8 @@ class PaginatorTests(TestCase):
         self.assertEqual(meta['previous'], 2)
         self.assertEqual(meta['previous'], 2)
         self.assertEqual(meta['next'], None)
         self.assertEqual(meta['next'], None)
         self.assertEqual(meta['last'], None)
         self.assertEqual(meta['last'], None)
+        self.assertEqual(meta['before'], 12)
+        self.assertEqual(meta['more'], 0)
 
 
         response = paginator.get_paginated_response(results)
         response = paginator.get_paginated_response(results)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)