Ejemplo n.º 1
0
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) == ''
Ejemplo n.º 2
0
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>'
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
        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
Ejemplo n.º 6
0
        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
Ejemplo n.º 7
0
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>'