Source code for indieweb_utils.pagination.paginator

from typing import Any, Dict, List


[docs]class Paginator: def __init__(self, series: list, per_page: int): self.series = series self.per_page = per_page self.pages = self.paginate_list(series, per_page) self.total_pages = len(self.pages) self.total_objects = len(series) self.current_page = 0
[docs] def paginate_list(self, series: list, per_page: int) -> Dict[str, List[Dict[str, Any]]]: """ Create a paginator for a series of objects. :param series: A list of objects to paginate. :return: A dictionary containing the paginated objects. """ pages = [series[i : i + per_page] for i in range(0, len(series), per_page)] return pages
[docs] def next_page(self) -> List[Dict[str, Any]]: """ Get the next page of objects. :param current_page: The current page. :return: A list of objects. """ all_pages = self.total_pages for p in self.pages: if self.current_page == all_pages: raise StopIteration self.current_page += 1 yield p
[docs] def previous_page(self) -> List[Dict[str, Any]]: """ Get the previous page of objects. :param current_page: The current page. :return: A list of objects. """ for p in self.pages: if self.current_page == 0: raise StopIteration self.current_page -= 1 yield p
[docs] def get_page(self, page: int) -> List[Dict[str, Any]]: """ Get a specific page of objects. :param page: The page to get. :return: A list of objects. """ return self.pages[page]