Source code for redirectory.libs_int.database.database_pagination
import math
[docs]class Page:
def __init__(self, items, page, page_size, total):
self.items = items
self.previous_page = None
self.next_page = None
self.has_previous = page > 1
if self.has_previous:
self.previous_page = page - 1
previous_items = (page - 1) * page_size
self.has_next = previous_items + len(items) < total
if self.has_next:
self.next_page = page + 1
self.total = total
self.pages = int(math.ceil(total / float(page_size)))
[docs]def paginate(query, page: int, page_size: int) -> Page:
"""
Creates a query with the help of limit() and offset() to represent a page.
Also counts the total number of items in the given database.
Args:
query: the query which specifies the model tha paginate
page (int): the page number
page_size (int): how many items per page
Returns:
a Page object with all the items inside
"""
assert isinstance(page, int) and page > 0
assert isinstance(page_size, int) and page_size > 0
items = query.limit(page_size).offset((page - 1) * page_size).all()
total = query.order_by(None).count()
return Page(items, page, page_size, total)