def test_empty_list(): """Test whether an empty list is handled correctly.""" items = [] page = Page(items, page=0) assert page.page == 0 assert page.first_item is None assert page.last_item is None assert page.first_page is None assert page.last_page is None assert page.previous_page is None assert page.next_page is None assert page.items_per_page == 20 assert page.item_count == 0 assert page.page_count == 0 assert page.pager() == '' assert page.pager(show_if_single_page=True) == ''
def test_one_page(): """Test that we fit 10 items on a single 10-item page.""" items = range(10) page = Page(items, page=0, items_per_page=10) assert page.page == 1 assert page.first_item == 1 assert page.last_item == 10 assert page.first_page == 1 assert page.last_page == 1 assert page.previous_page is None assert page.next_page is None assert page.items_per_page == 10 assert page.item_count == 10 assert page.page_count == 1 assert page.pager() == '' assert page.pager(show_if_single_page=True) == '<span class="pager_curpage">1</span>'
def get_pagination(self, count_query, query, page, page_size=options.page_size, *args): try: try: page = int(page) page_size = int(page_size) except ValueError: page = 1 page_size = 20 if page < 1: page = 1 start = (page - 1) * page_size if getattr(self, "db", None) is None: # UI Module self.db = self.handler.db # should add a c(count) alias in the count query count = self.db.get(count_query) count = int(count.c) if count else 0 if start > count: page = (count % page_size) start = (page - 1) * page_size start = max(0, start) pagination = Page(None, page=page, items_per_page=page_size, item_count=count, url=self.get_page_url) pages = pagination.pager('$link_previous ~3~ $link_next (Page $page of $page_count)') rows = self.db.query(query + str(" limit %s, %s" % (start, page_size)), *args) return {"pages":pages, "rows":rows} except TypeError: raise HTTPError(404)
def _list(self): items = DBSession.query(self.dbObj).filter(self.dbObj.active == 0).all() try: page = int(self.get_argument("page", 1)) except: page = 1 my_page = Page(items, page = page, items_per_page = self.items_per_page, url = lambda page:"%s?action=list&page=%d" % (self.request.path, page)) pager = my_page.pager(symbol_first = "<<", show_if_single_page = True) self.render(self.template_prefix + "_list.html", my_page = my_page, pager = pager)
def _f(): output = fun() if not isinstance(output, dict) or not self.name in output: pass collection = output[self.name] request = fun.im_self.request page = Page(collection, request.paginate_page, request.paginate_items_per_page, controller = '/') page.kwargs = request.paginate_params if self.page_param != 'name': page.pager = partial(page.pager, page_param = self.page_param) if not getattr(request, 'paginators', None): request.paginators = Bunch() request.paginators[self.name] = output[self.name] = page
def _w(*args, **kwargs): page = int(kwargs.pop(own_parameters["page"], 1)) real_items_per_page = int( kwargs.pop(own_parameters['items_per_page'], items_per_page)) argvars = inspect.getargspec(f)[0][1:] if argvars: args = list(args) for i, var in enumerate(args): if i >= len(argvars): break var = argvars[i] if var in kwargs: args[i] = kwargs[var] del kwargs[var] res = f(*args, **kwargs) if isinstance(res, dict) and name in res: additional_parameters = MultiDict() for key, value in request.str_params.iteritems(): if key not in own_parameters: additional_parameters.add(key, value) collection = res[name] page = Page(collection, page, items_per_page=real_items_per_page, **additional_parameters.dict_of_lists()) # wrap the pager so that it will render # the proper page-parameter page.pager = partial(page.pager, page_param=own_parameters["page"]) res[name] = page # this is a bit strange - it appears # as if c returns an empty # string for everything it dosen't know. # I didn't find that documented, so I # just put this in here and hope it works. if not hasattr(c, 'paginators') or type(c.paginators) == str: c.paginators = Bunch() c.paginators[name] = page return res
def test_many_pages(): """Test that 100 items fit on seven 15-item pages.""" # Create routes mapper so that webhelper can create URLs # using webhelpers.url_for() mapper = Mapper() mapper.connect(':controller') items = range(100) page = Page(items, page=0, items_per_page=15) assert page.page == 1 assert page.first_item == 1 assert page.last_item == 15 assert page.first_page == 1 assert page.last_page == 7 assert page.previous_page is None assert page.next_page == 2 assert page.items_per_page == 15 assert page.item_count == 100 assert page.page_count == 7 print page.pager() assert page.pager() == '<span class="pager_curpage">1</span> <a class="pager_link" href="/content?page=2">2</a> <a class="pager_link" href="/content?page=3">3</a> <span class="pager_dotdot">..</span> <a class="pager_link" href="/content?page=7">7</a>' assert page.pager(separator='_') == '<span class="pager_curpage">1</span>_<a class="pager_link" href="/content?page=2">2</a>_<a class="pager_link" href="/content?page=3">3</a>_<span class="pager_dotdot">..</span>_<a class="pager_link" href="/content?page=7">7</a>' assert page.pager(page_param='xy') == '<span class="pager_curpage">1</span> <a class="pager_link" href="/content?xy=2">2</a> <a class="pager_link" href="/content?xy=3">3</a> <span class="pager_dotdot">..</span> <a class="pager_link" href="/content?xy=7">7</a>' assert page.pager(link_attr={'style':'s1'}, curpage_attr={'style':'s2'}, dotdot_attr={'style':'s3'}) == '<span style="s2">1</span> <a href="/content?page=2" style="s1">2</a> <a href="/content?page=3" style="s1">3</a> <span style="s3">..</span> <a href="/content?page=7" style="s1">7</a>'