Files
mayan-edms/mayan/apps/common/paginator.py
Roberto Rosario 125c133334 Audit common app
Add support to override settings of the FilteredSelectionForm
via subclass attributes. Add keyword arguments to calls.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2019-01-02 14:34:41 -04:00

69 lines
2.4 KiB
Python

from __future__ import absolute_import, unicode_literals
from pure_pagination import Paginator
from pure_pagination.paginator import Page, PageRepresentation
class PurePage(Page):
"""
Subclass of pure_pagination Page class to support configurable page
querystring keys
"""
def __init__(self, object_list, number, paginator, page_kwarg='page'):
self.object_list = object_list
self.page_kwarg = page_kwarg
self.paginator = paginator
if paginator.request:
# Reason: I just want to perform this operation once, and not once per page
self.base_queryset = self.paginator.request.GET.copy()
# self.base_queryset['page'] = 'page'
# self.base_queryset = self.base_queryset.urlencode().replace(
# '%', '%%').replace('page=page', 'page=%s')
self.number = PageRepresentation(number, self._other_page_querystring(number))
def _other_page_querystring(self, page_number):
"""
Returns a query string for the given page, preserving any
GET parameters present.
"""
if self.paginator.request:
self.base_queryset[self.page_kwarg] = page_number
return self.base_queryset.urlencode()
# raise Warning("You must supply Paginator() with the request object
# for a proper querystring.")
return '{}={}'.format(self.page_kwarg, page_number)
class PurePaginator(Paginator):
"""
Subclass of pure_pagination Paaginator class to support configurable page
querystring keys
"""
page_class = PurePage
def __init__(self, object_list, per_page, allow_empty_first_page=True, orphans=0, page_kwarg='page', request=None):
self._num_pages = self._count = None
self.allow_empty_first_page = allow_empty_first_page
self.object_list = object_list
self.orphans = orphans
self.page_kwarg = page_kwarg
self.per_page = per_page
self.request = request
def page(self, number):
"""
Returns a Page object for the given 1-based page number.
"""
number = self.validate_number(number)
bottom = (number - 1) * self.per_page
top = bottom + self.per_page
if top + self.orphans >= self.count:
top = self.count
return self.page_class(
object_list=self.object_list[bottom:top], number=number,
paginator=self, page_kwarg=self.page_kwarg
)