From ede71db11af9dd2680fbce9d84ab670c869bde8a Mon Sep 17 00:00:00 2001 From: Juan Cruz-Benito Date: Fri, 28 Feb 2020 12:04:53 +0100 Subject: [PATCH] Moving Pagination class to its own file --- jupyterhub/handlers/pages.py | 65 +----------------------------------- jupyterhub/pagination.py | 65 ++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 64 deletions(-) create mode 100644 jupyterhub/pagination.py diff --git a/jupyterhub/handlers/pages.py b/jupyterhub/handlers/pages.py index 8a7e2033..60b6ae50 100644 --- a/jupyterhub/handlers/pages.py +++ b/jupyterhub/handlers/pages.py @@ -23,6 +23,7 @@ from ..utils import admin_only from ..utils import maybe_future from ..utils import url_path_join from .base import BaseHandler +from ..pagination import Pagination class RootHandler(BaseHandler): @@ -605,70 +606,6 @@ class HealthCheckHandler(BaseHandler): def get(self, *args): self.finish() - -class Pagination(): - - _page_name = 'page' - _per_page_name = 'per_page' - _default_page = 1 - _default_per_page = 100 - _max_per_page = 250 - _record_name = 'users' - _display_msg = ( - 'Displaying {record_name} {start} - {end}. Total {record_name}: {total}' - ) - - def __init__(self, *args, **kwargs): - """Potential parameters. - **url**: URL in request - **page**: current page in use - **per_page**: number of records to display in the page. By default 100 - **total**: total records considered while paginating - **display_msg**: informative text for pagination - **record_name**: name of the record, showed in pagination info - """ - self.page = kwargs.get(self._page_name, 1) - - if self.per_page > self._max_per_page: - self.per_page = self._max_per_page - - self.total = int(kwargs.get('total', 0)) - self.display_msg = kwargs.get('display_msg', self._display_msg) - - self.record_name = kwargs.get('record_name', self._record_name) - self.url = kwargs.get('url') or self.get_url() - self.init_values() - - def init_values(self): - self._cached = {} - self.skip = (self.page - 1) * self.per_page - pages = divmod(self.total, self.per_page) - self.total_pages = pages[0] + 1 if pages[1] else pages[0] - - self.has_prev = self.page > 1 - self.has_next = self.page < self.total_pages - - @classmethod - def get_page_args(self, handler): - self.page = handler.get_argument(self._page_name, self._default_page) - self.per_page = handler.get_argument( - self._per_page_name, self._default_per_page - ) - try: - self.per_page = int(self.per_page) - if self.per_page > self._max_per_page: - self.per_page = self._max_per_page - except: - self.per_page = self._default_per_page - - try: - self.page = int(self.page) - except: - self.page = self._default_page - - return self.page, self.per_page, self.per_page * (self.page - 1) - - default_handlers = [ (r'/', RootHandler), (r'/home', HomeHandler), diff --git a/jupyterhub/pagination.py b/jupyterhub/pagination.py new file mode 100644 index 00000000..b1396cd8 --- /dev/null +++ b/jupyterhub/pagination.py @@ -0,0 +1,65 @@ +"""Basic class to manage pagination utils.""" +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +class Pagination(): + + _page_name = 'page' + _per_page_name = 'per_page' + _default_page = 1 + _default_per_page = 100 + _max_per_page = 250 + _record_name = 'users' + _display_msg = ( + 'Displaying {record_name} {start} - {end}. Total {record_name}: {total}' + ) + + def __init__(self, *args, **kwargs): + """Potential parameters. + **url**: URL in request + **page**: current page in use + **per_page**: number of records to display in the page. By default 100 + **total**: total records considered while paginating + **display_msg**: informative text for pagination + **record_name**: name of the record, showed in pagination info + """ + self.page = kwargs.get(self._page_name, 1) + + if self.per_page > self._max_per_page: + self.per_page = self._max_per_page + + self.total = int(kwargs.get('total', 0)) + self.display_msg = kwargs.get('display_msg', self._display_msg) + + self.record_name = kwargs.get('record_name', self._record_name) + self.url = kwargs.get('url') or self.get_url() + self.init_values() + + def init_values(self): + self._cached = {} + self.skip = (self.page - 1) * self.per_page + pages = divmod(self.total, self.per_page) + self.total_pages = pages[0] + 1 if pages[1] else pages[0] + + self.has_prev = self.page > 1 + self.has_next = self.page < self.total_pages + + @classmethod + def get_page_args(self, handler): + self.page = handler.get_argument(self._page_name, self._default_page) + self.per_page = handler.get_argument( + self._per_page_name, self._default_per_page + ) + try: + self.per_page = int(self.per_page) + if self.per_page > self._max_per_page: + self.per_page = self._max_per_page + except: + self.per_page = self._default_per_page + + try: + self.page = int(self.page) + except: + self.page = self._default_page + + return self.page, self.per_page, self.per_page * (self.page - 1)