Added pillar.web.utils.last_page_index()

This returns the last page number (base-1) of a paged Eve result.
This commit is contained in:
Sybren A. Stüvel 2017-01-19 15:13:01 +01:00
parent 129ec94608
commit 604d6c1a07
2 changed files with 35 additions and 0 deletions

View File

@ -205,3 +205,24 @@ def is_valid_id(some_id):
return True return True
return False return False
def last_page_index(meta_info):
"""Eve pagination; returns the index of the last page.
:param meta_info: Eve's '_meta' response.
:returns: Eve page number (base-1) of the last page.
:rtype: int
"""
total = meta_info['total']
if total == 0:
return 1
per_page = meta_info['max_results']
pages = total // per_page
if total % per_page == 0:
return pages
return pages + 1

View File

@ -108,3 +108,17 @@ class PrettyDateTest(unittest.TestCase):
self.assertEqual('in 2 weeks at 11:46', pd(days=14)) self.assertEqual('in 2 weeks at 11:46', pd(days=14))
self.assertEqual('08 Dec at 11:46', pd(days=30)) self.assertEqual('08 Dec at 11:46', pd(days=30))
self.assertEqual('08 Dec 2017 at 11:46', pd(days=30 + 365)) self.assertEqual('08 Dec 2017 at 11:46', pd(days=30 + 365))
class EvePaginationTest(unittest.TestCase):
def test_last_page_index(self):
from pillar.web.utils import last_page_index as lpi
self.assertEqual(1, lpi({'total': 0, 'max_results': 313}))
self.assertEqual(1, lpi({'total': 5, 'max_results': 10}))
self.assertEqual(1, lpi({'total': 5, 'max_results': 5}))
self.assertEqual(2, lpi({'total': 6, 'max_results': 5}))
self.assertEqual(2, lpi({'total': 9, 'max_results': 5}))
self.assertEqual(2, lpi({'total': 10, 'max_results': 5}))
self.assertEqual(3, lpi({'total': 11, 'max_results': 5}))
self.assertEqual(404129352, lpi({'total': 2828905463, 'max_results': 7}))