Files
i2p.www/i2p2www/helpers.py
str4d 785f627d7a Reorganized site and blog views and helpers to use LazyView
This increases the speed of the site by not requiring the site and blog code to
be imported on every request - just those that are relevant. It also splits the
code into modules which are easier to work with.
2012-12-19 06:53:59 +00:00

58 lines
1.5 KiB
Python

from math import ceil
from werkzeug import import_string, cached_property
########################
# General helper methods
def get_for_page(items, page, per_page):
from_item = (page-1)*per_page
to_item = page*per_page
return items[from_item:to_item]
########################
# General helper classes
class LazyView(object):
def __init__(self, import_name):
self.__module__, self.__name__ = import_name.rsplit('.', 1)
self.import_name = import_name
@cached_property
def view(self):
return import_string(self.import_name)
def __call__(self, *args, **kwargs):
return self.view(*args, **kwargs)
class Pagination(object):
def __init__(self, page, per_page, total_count):
self.page = page
self.per_page = per_page
self.total_count = total_count
@property
def pages(self):
return int(ceil(self.total_count / float(self.per_page)))
@property
def has_prev(self):
return self.page > 1
@property
def has_next(self):
return self.page < self.pages
def iter_pages(self, left_edge=2, left_current=2,
right_current=5, right_edge=2):
last = 0
for num in xrange(1, self.pages + 1):
if num <= left_edge or \
(num > self.page - left_current - 1 and \
num < self.page + right_current) or \
num > self.pages - right_edge:
if last + 1 != num:
yield None
yield num
last = num