mirror of https://github.com/sgoudham/Enso-Bot.git
Installing Paginator
parent
1c97d2127c
commit
6428fd2342
@ -0,0 +1 @@
|
||||
pip
|
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Mardix
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -0,0 +1,30 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: Paginator
|
||||
Version: 0.5.1
|
||||
Summary: Paginator for SQLAlchemy query object, list or iterable
|
||||
Home-page: http://github.com/mardix/paginator.py/
|
||||
Author: Mardix
|
||||
Author-email: mardix@pylot.io
|
||||
License: https://github.com/mardix/Paginator.py
|
||||
Download-URL: http://github.com/mardix/paginator.py/tarball/master
|
||||
Keywords: pagination,paginate,page,flask,jinja2,sqlalchemy
|
||||
Platform: any
|
||||
Classifier: Environment :: Web Environment
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: BSD License
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Programming Language :: Python
|
||||
Classifier: Programming Language :: Python :: 2
|
||||
Classifier: Programming Language :: Python :: 2.6
|
||||
Classifier: Programming Language :: Python :: 2.7
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.3
|
||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
||||
Requires-Dist: six
|
||||
|
||||
|
||||
Paginator
|
||||
|
||||
|
||||
|
@ -0,0 +1,9 @@
|
||||
Paginator-0.5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
Paginator-0.5.1.dist-info/LICENSE,sha256=gixJ1Ff-iopvZvS-xVWcBS3IkY5ZrJyZPF4GFjjwOa4,1073
|
||||
Paginator-0.5.1.dist-info/METADATA,sha256=PvMQPPRf-8oICfceDrRMk_RsXBuafIy9YKCyEVOs0X0,1043
|
||||
Paginator-0.5.1.dist-info/RECORD,,
|
||||
Paginator-0.5.1.dist-info/WHEEL,sha256=YUYzQ6UQdoqxXjimOitTqynltBCkwY6qlTfTh2IzqQU,97
|
||||
Paginator-0.5.1.dist-info/pbr.json,sha256=nU8cflzVDe5ph0EUPAUDzZBEYkkla7lhch203VDvI38,47
|
||||
Paginator-0.5.1.dist-info/top_level.txt,sha256=-wb-dnz7oj9cLsgNjw96SAhnKb4ca0-mEbfxcVjzVDI,10
|
||||
__pycache__/paginator.cpython-36.pyc,,
|
||||
paginator.py,sha256=uZsffhq_EU45b3fdYDYV2rltkGonpG5RBDmHLkTQ10o,4801
|
@ -0,0 +1,5 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: bdist_wheel (0.34.2)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
|
@ -0,0 +1 @@
|
||||
{"is_release": false, "git_version": "44d9119"}
|
@ -0,0 +1 @@
|
||||
paginator
|
@ -0,0 +1,152 @@
|
||||
"""
|
||||
Paginator
|
||||
"""
|
||||
|
||||
from math import ceil
|
||||
from six import string_types
|
||||
from six.moves import range
|
||||
|
||||
class Paginator(object):
|
||||
PER_PAGE = 10
|
||||
total_pages = 0
|
||||
total_items = 0
|
||||
callback = None
|
||||
|
||||
def __init__(self, query, page=1, per_page=PER_PAGE, total=None,
|
||||
padding=0, callback=None, static_query=False,
|
||||
left_edge=2, left_current=3, right_current=4, right_edge=2):
|
||||
"""
|
||||
:param query: Iterable to paginate. Can be a query object, list or any iterables
|
||||
:param page: current page
|
||||
:param per_page: max number of items per page
|
||||
:param total: Max number of items. If not provided, it will use the query to count
|
||||
:param padding: Number of elements of the next page to show
|
||||
:param callback: a function to callback on each item being iterated.
|
||||
:param static_query: bool - When True it will return the query as is, without slicing/limit. Usally when using the paginator to just create the pagination.
|
||||
# To customize the pagination
|
||||
:param left_edge:
|
||||
:param left_current:
|
||||
:param right_current:
|
||||
:param right_edge:
|
||||
"""
|
||||
|
||||
self.query = query
|
||||
self.callback = callback
|
||||
self.static_query = static_query
|
||||
self.left_edge = left_edge
|
||||
self.left_current = left_current
|
||||
self.right_edge = right_edge
|
||||
self.right_current = right_current
|
||||
|
||||
if not isinstance(per_page, int) or per_page < 1:
|
||||
raise TypeError('`per_page` must be a positive integer')
|
||||
self.per_page = per_page
|
||||
|
||||
if not total:
|
||||
try:
|
||||
total = query.count()
|
||||
except (TypeError, AttributeError):
|
||||
total = len(query)
|
||||
self.total_items = total
|
||||
|
||||
if page == "last":
|
||||
page == self.total_pages
|
||||
elif page == "first":
|
||||
page = 1
|
||||
self.page = self._sanitize_page_number(page)
|
||||
|
||||
self.padding = padding
|
||||
|
||||
def _sanitize_page_number(self, page):
|
||||
if page == 'last':
|
||||
return page
|
||||
if isinstance(page, string_types) and page.isdigit():
|
||||
page = int(page)
|
||||
if isinstance(page, int) and (page > 0):
|
||||
return page
|
||||
return 1
|
||||
|
||||
@property
|
||||
def total_pages(self):
|
||||
"""The total number of pages."""
|
||||
return int(ceil(self.total_items / float(self.per_page)))
|
||||
|
||||
@property
|
||||
def has_prev(self):
|
||||
"""True if a previous page exists."""
|
||||
return self.page > 1
|
||||
|
||||
@property
|
||||
def has_next(self):
|
||||
"""True if a next page exists."""
|
||||
return self.page < self.total_pages
|
||||
|
||||
@property
|
||||
def next_page_number(self):
|
||||
"""Number of the next page."""
|
||||
return self.page + 1
|
||||
|
||||
@property
|
||||
def prev_page_number(self):
|
||||
"""Number of the previous page."""
|
||||
return self.page - 1
|
||||
|
||||
@property
|
||||
def pages_range(self):
|
||||
start = (self.page - 1) * self.per_page
|
||||
end = start + self.per_page - 1
|
||||
return start, min(end, self.total_items - 1)
|
||||
|
||||
@property
|
||||
def items(self):
|
||||
if self.static_query:
|
||||
return self.query
|
||||
|
||||
offset = (self.page - 1) * self.per_page
|
||||
offset = max(offset - self.padding, 0)
|
||||
limit = self.per_page + self.padding
|
||||
if self.page > 1:
|
||||
limit = limit + self.padding
|
||||
|
||||
if hasattr(self.query, 'limit') and hasattr(self.query, 'offset'):
|
||||
return self.query.limit(limit).offset(offset)
|
||||
elif isinstance(self.query, list):
|
||||
return self.query[offset:offset + limit]
|
||||
else:
|
||||
return self.query
|
||||
|
||||
def __iter__(self):
|
||||
for i in self.items:
|
||||
yield self.callback(i) if self.callback else i
|
||||
|
||||
def __len__(self):
|
||||
return self.total_pages
|
||||
|
||||
@property
|
||||
def pages(self):
|
||||
"""Iterates over the page numbers in the pagination."""
|
||||
return self.iter_pages()
|
||||
|
||||
def iter_pages(self, left_edge=None, left_current=None, right_current=None, right_edge=None):
|
||||
left_edge = left_edge or self.left_edge
|
||||
left_current = left_current or self.left_current
|
||||
right_edge = right_edge or self.right_edge
|
||||
right_current = right_current or self.right_current
|
||||
|
||||
last = 0
|
||||
for num in range(1, self.total_pages + 1):
|
||||
is_active_page = (
|
||||
num <= left_edge
|
||||
or (
|
||||
(num >= self.page - left_current) and
|
||||
(num < self.page + right_current)
|
||||
)
|
||||
or (
|
||||
(num > self.total_pages - right_edge)
|
||||
)
|
||||
)
|
||||
if is_active_page:
|
||||
if last + 1 != num:
|
||||
yield None
|
||||
yield num
|
||||
last = num
|
Loading…
Reference in New Issue