Refactor grids to use new 'paginate' library

instead of the older `webhelpers.paginate`
This commit is contained in:
Lance Edgar 2017-07-06 20:57:53 -05:00
parent 8014e60d14
commit 6302d5a351
3 changed files with 33 additions and 12 deletions

View file

@ -84,6 +84,8 @@ requires = [
'humanize', # 0.5.1 'humanize', # 0.5.1
'Mako', # 0.6.2 'Mako', # 0.6.2
'openpyxl', # 2.4.7 'openpyxl', # 2.4.7
'paginate', # 0.5.6
'paginate_sqlalchemy', # 0.2.0
'pyramid_beaker>=0.6', # 0.6.1 'pyramid_beaker>=0.6', # 0.6.1
'pyramid_debugtoolbar', # 1.0 'pyramid_debugtoolbar', # 1.0
'pyramid_exclog', # 0.6 'pyramid_exclog', # 0.6

View file

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8; -*-
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2016 Lance Edgar # Copyright © 2010-2017 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -26,6 +26,7 @@ FormAlchemy Grid Classes
from __future__ import unicode_literals, absolute_import from __future__ import unicode_literals, absolute_import
import urllib
import logging import logging
import sqlalchemy as sa import sqlalchemy as sa
@ -34,8 +35,9 @@ from sqlalchemy import orm
from rattail.db.types import GPCType from rattail.db.types import GPCType
from rattail.util import prettify from rattail.util import prettify
import formalchemy import formalchemy as fa
from webhelpers import paginate import paginate
from paginate_sqlalchemy import SqlalchemyOrmPage
from tailbone.db import Session from tailbone.db import Session
from tailbone.newgrids import Grid, GridColumn, filters from tailbone.newgrids import Grid, GridColumn, filters
@ -44,6 +46,23 @@ from tailbone.newgrids import Grid, GridColumn, filters
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class URLMaker(object):
"""
URL constructor for use with SQLAlchemy grid pagers. Logic for this was
basically copied from the old `webhelpers.paginate` module
"""
def __init__(self, request):
self.request = request
def __call__(self, page):
params = self.request.GET.copy()
params["page"] = page
params["partial"] = "1"
qs = urllib.urlencode(params, True)
return '{}?{}'.format(self.request.path, qs)
class AlchemyGrid(Grid): class AlchemyGrid(Grid):
""" """
Grid class for use with SQLAlchemy data models. Grid class for use with SQLAlchemy data models.
@ -64,7 +83,7 @@ class AlchemyGrid(Grid):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(AlchemyGrid, self).__init__(*args, **kwargs) super(AlchemyGrid, self).__init__(*args, **kwargs)
fa_grid = formalchemy.Grid(self.model_class, instances=self.data, fa_grid = fa.Grid(self.model_class, instances=self.data,
session=kwargs.get('session', Session()), session=kwargs.get('session', Session()),
request=self.request) request=self.request)
fa_grid.prettify = prettify fa_grid.prettify = prettify
@ -174,10 +193,10 @@ class AlchemyGrid(Grid):
Paginate the given data set according to current settings, and return Paginate the given data set according to current settings, and return
the result. the result.
""" """
return paginate.Page( return SqlalchemyOrmPage(query,
query, item_count=query.count(), items_per_page=self.pagesize,
items_per_page=self.pagesize, page=self.page, page=self.page,
url=paginate.PageURL_WebOb(self.request)) url_maker=URLMaker(self.request))
def iter_visible_columns(self): def iter_visible_columns(self):
""" """

View file

@ -43,7 +43,7 @@
<p class="page-links"> <p class="page-links">
${h.select('pagesize', grid.pager.items_per_page, grid.get_pagesize_options())} ${h.select('pagesize', grid.pager.items_per_page, grid.get_pagesize_options())}
per page&nbsp; per page&nbsp;
${grid.pager.pager('$link_first $link_previous ~1~ $link_next $link_last', symbol_next='next', symbol_previous='prev', partial=1)} ${grid.pager.pager('$link_first $link_previous ~1~ $link_next $link_last', symbol_next='next', symbol_previous='prev')|n}
</p> </p>
</div> </div>
% endif % endif