Final grid refactor; we now have just 'grids' :)
this also removes some old UI stuff for the first attempt at continuum versioning..among other cruft
This commit is contained in:
parent
52c7f485ab
commit
c57e2e17cc
61 changed files with 179 additions and 1590 deletions
|
@ -22,9 +22,6 @@
|
|||
################################################################################
|
||||
"""
|
||||
Base views for maintaining "new-style" batches.
|
||||
|
||||
.. note::
|
||||
This is all still somewhat experimental.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
@ -50,7 +47,7 @@ from pyramid.response import FileResponse
|
|||
from pyramid_simpleform import Form
|
||||
from webhelpers2.html import HTML, tags
|
||||
|
||||
from tailbone import forms, newgrids as grids
|
||||
from tailbone import forms, grids
|
||||
from tailbone.db import Session
|
||||
from tailbone.views import MasterView
|
||||
from tailbone.forms.renderers.batch import FileFieldRenderer
|
||||
|
|
|
@ -30,7 +30,7 @@ import six
|
|||
|
||||
from rattail.db import model
|
||||
|
||||
from tailbone import grids3 as grids
|
||||
from tailbone import grids
|
||||
from tailbone.views import MasterView2
|
||||
from tailbone.views.batch import BatchMasterView, FileBatchMasterView
|
||||
from tailbone.views.batch.core import MobileBatchStatusFilter
|
||||
|
|
|
@ -37,7 +37,7 @@ import formalchemy
|
|||
from pyramid.response import FileResponse
|
||||
from webhelpers2.html import literal
|
||||
|
||||
from tailbone import grids3 as grids
|
||||
from tailbone import grids
|
||||
from tailbone.db import Session
|
||||
from tailbone.views import MasterView2 as MasterView
|
||||
from tailbone.forms.renderers.bouncer import BounceMessageFieldRenderer
|
||||
|
|
|
@ -30,7 +30,7 @@ import six
|
|||
|
||||
from rattail.db import model
|
||||
|
||||
from tailbone import grids3 as grids
|
||||
from tailbone import grids
|
||||
from tailbone.views import MasterView2 as MasterView, AutocompleteView
|
||||
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ from rattail.db import model
|
|||
|
||||
import formalchemy as fa
|
||||
|
||||
from tailbone import forms, grids3 as grids
|
||||
from tailbone import forms, grids
|
||||
from tailbone.db import Session
|
||||
from tailbone.views import MasterView2 as MasterView, AutocompleteView
|
||||
|
||||
|
|
|
@ -41,9 +41,8 @@ from pyramid import httpexceptions
|
|||
from pyramid.renderers import get_renderer, render_to_response, render
|
||||
from webhelpers2.html import HTML, tags
|
||||
|
||||
from tailbone import forms, newgrids as grids
|
||||
from tailbone import forms, grids
|
||||
from tailbone.views import View
|
||||
from tailbone.newgrids import filters, AlchemyGrid, GridAction, MobileGrid
|
||||
|
||||
|
||||
class MasterView(View):
|
||||
|
@ -161,24 +160,6 @@ class MasterView(View):
|
|||
grid.load_settings()
|
||||
return grid
|
||||
|
||||
@classmethod
|
||||
def get_mobile_grid_factory(cls):
|
||||
"""
|
||||
Must return a callable to be used when creating new mobile grid
|
||||
instances. Instead of overriding this, you can set
|
||||
:attr:`mobile_grid_factory`. Default factory is :class:`MobileGrid`.
|
||||
"""
|
||||
return getattr(cls, 'mobile_grid_factory', MobileGrid)
|
||||
|
||||
@classmethod
|
||||
def get_mobile_row_grid_factory(cls):
|
||||
"""
|
||||
Must return a callable to be used when creating new mobile grid
|
||||
instances. Instead of overriding this, you can set
|
||||
:attr:`mobile_grid_factory`. Default factory is :class:`MobileGrid`.
|
||||
"""
|
||||
return getattr(cls, 'mobile_row_grid_factory', MobileGrid)
|
||||
|
||||
@classmethod
|
||||
def get_mobile_grid_key(cls):
|
||||
"""
|
||||
|
@ -422,14 +403,6 @@ class MasterView(View):
|
|||
grid.load_settings()
|
||||
return grid
|
||||
|
||||
@classmethod
|
||||
def get_version_grid_factory(cls):
|
||||
"""
|
||||
Returns the grid factory or class which is to be used when creating new
|
||||
version grid instances.
|
||||
"""
|
||||
return getattr(cls, 'version_grid_factory', AlchemyGrid)
|
||||
|
||||
@classmethod
|
||||
def get_version_grid_key(cls):
|
||||
"""
|
||||
|
@ -1254,23 +1227,6 @@ class MasterView(View):
|
|||
# Grid Stuff
|
||||
##############################
|
||||
|
||||
@classmethod
|
||||
def get_grid_factory(cls):
|
||||
"""
|
||||
Returns the grid factory or class which is to be used when creating new
|
||||
grid instances.
|
||||
"""
|
||||
return getattr(cls, 'grid_factory', AlchemyGrid)
|
||||
|
||||
@classmethod
|
||||
def get_row_grid_factory(cls):
|
||||
"""
|
||||
Must return a callable to be used when creating new row grid instances.
|
||||
Instead of overriding this, you can set :attr:`row_grid_factory`.
|
||||
Default factory is :class:`AlchemyGrid`.
|
||||
"""
|
||||
return getattr(cls, 'row_grid_factory', AlchemyGrid)
|
||||
|
||||
@classmethod
|
||||
def get_grid_key(cls):
|
||||
"""
|
||||
|
@ -1385,7 +1341,7 @@ class MasterView(View):
|
|||
if url is None:
|
||||
route = '{}.{}'.format(self.get_route_prefix(), key)
|
||||
url = lambda r, i: self.request.route_url(route, **self.get_action_route_kwargs(r))
|
||||
return GridAction(key, url=url, **kwargs)
|
||||
return grids.GridAction(key, url=url, **kwargs)
|
||||
|
||||
def get_action_route_kwargs(self, row):
|
||||
"""
|
||||
|
@ -1424,20 +1380,6 @@ class MasterView(View):
|
|||
def _preconfigure_grid(self, grid):
|
||||
pass
|
||||
|
||||
def configure_grid(self, grid):
|
||||
"""
|
||||
Configure the grid, customizing as necessary. Subclasses are
|
||||
encouraged to override this method.
|
||||
|
||||
As a bare minimum, the logic for this method must at some point invoke
|
||||
the ``configure()`` method on the grid instance. The default
|
||||
implementation does exactly (and only) this, passing no arguments.
|
||||
This requirement is a result of using FormAlchemy under the hood, and
|
||||
it is in fact a call to :meth:`formalchemy:formalchemy.tables.Grid.configure()`.
|
||||
"""
|
||||
if hasattr(grid, 'configure'):
|
||||
grid.configure()
|
||||
|
||||
def get_data(self, session=None):
|
||||
"""
|
||||
Generate the base data set for the grid. This typically will be a
|
||||
|
|
|
@ -26,7 +26,9 @@ Master View
|
|||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
from tailbone import grids3 as grids
|
||||
import sqlalchemy_continuum as continuum
|
||||
|
||||
from tailbone import grids
|
||||
from tailbone.views import MasterView
|
||||
|
||||
|
||||
|
@ -64,6 +66,14 @@ class MasterView2(MasterView):
|
|||
"""
|
||||
return getattr(cls, 'row_grid_factory', grids.Grid)
|
||||
|
||||
@classmethod
|
||||
def get_version_grid_factory(cls):
|
||||
"""
|
||||
Returns the grid factory or class which is to be used when creating new
|
||||
version grid instances.
|
||||
"""
|
||||
return getattr(cls, 'version_grid_factory', grids.Grid)
|
||||
|
||||
@classmethod
|
||||
def get_mobile_grid_factory(cls):
|
||||
"""
|
||||
|
@ -82,6 +92,18 @@ class MasterView2(MasterView):
|
|||
"""
|
||||
return getattr(cls, 'mobile_row_grid_factory', grids.MobileGrid)
|
||||
|
||||
def get_effective_data(self, session=None, **kwargs):
|
||||
"""
|
||||
Convenience method which returns the "effective" data for the master
|
||||
grid, filtered and sorted to match what would show on the UI, but not
|
||||
paged etc.
|
||||
"""
|
||||
if session is None:
|
||||
session = self.Session()
|
||||
kwargs.setdefault('pageable', False)
|
||||
grid = self.make_grid(session=session, **kwargs)
|
||||
return grid.make_visible_data()
|
||||
|
||||
def make_grid(self, factory=None, key=None, data=None, columns=None, **kwargs):
|
||||
"""
|
||||
Creates a new grid instance
|
||||
|
@ -102,18 +124,6 @@ class MasterView2(MasterView):
|
|||
grid.load_settings()
|
||||
return grid
|
||||
|
||||
def get_effective_data(self, session=None, **kwargs):
|
||||
"""
|
||||
Convenience method which returns the "effective" data for the master
|
||||
grid, filtered and sorted to match what would show on the UI, but not
|
||||
paged etc.
|
||||
"""
|
||||
if session is None:
|
||||
session = self.Session()
|
||||
kwargs.setdefault('pageable', False)
|
||||
grid = self.make_grid(session=session, **kwargs)
|
||||
return grid.make_visible_data()
|
||||
|
||||
def make_row_grid(self, factory=None, key=None, data=None, columns=None, **kwargs):
|
||||
"""
|
||||
Make and return a new (configured) rows grid instance.
|
||||
|
@ -139,6 +149,30 @@ class MasterView2(MasterView):
|
|||
grid.load_settings()
|
||||
return grid
|
||||
|
||||
def make_version_grid(self, factory=None, key=None, data=None, columns=None, **kwargs):
|
||||
"""
|
||||
Creates a new version grid instance
|
||||
"""
|
||||
instance = kwargs.pop('instance', None)
|
||||
if not instance:
|
||||
instance = self.get_instance()
|
||||
|
||||
if factory is None:
|
||||
factory = self.get_version_grid_factory()
|
||||
if key is None:
|
||||
key = self.get_version_grid_key()
|
||||
if data is None:
|
||||
data = self.get_version_data(instance)
|
||||
if columns is None:
|
||||
columns = self.get_version_grid_columns()
|
||||
|
||||
kwargs.setdefault('request', self.request)
|
||||
kwargs = self.make_version_grid_kwargs(**kwargs)
|
||||
grid = factory(key, data, columns, **kwargs)
|
||||
self.configure_version_grid(grid)
|
||||
grid.load_settings()
|
||||
return grid
|
||||
|
||||
def make_mobile_grid(self, factory=None, key=None, data=None, columns=None, **kwargs):
|
||||
"""
|
||||
Creates a new mobile grid instance
|
||||
|
@ -195,6 +229,17 @@ class MasterView2(MasterView):
|
|||
# TODO
|
||||
raise NotImplementedError
|
||||
|
||||
def get_version_grid_columns(self):
|
||||
if hasattr(self, 'version_grid_columns'):
|
||||
return self.version_grid_columns
|
||||
# TODO
|
||||
return [
|
||||
'issued_at',
|
||||
'user',
|
||||
'remote_addr',
|
||||
'comment',
|
||||
]
|
||||
|
||||
def get_mobile_grid_columns(self):
|
||||
if hasattr(self, 'mobile_grid_columns'):
|
||||
return self.mobile_grid_columns
|
||||
|
@ -269,6 +314,26 @@ class MasterView2(MasterView):
|
|||
defaults.update(kwargs)
|
||||
return defaults
|
||||
|
||||
def make_version_grid_kwargs(self, **kwargs):
|
||||
"""
|
||||
Return a dictionary of kwargs to be passed to the factory when
|
||||
constructing a new version grid.
|
||||
"""
|
||||
defaults = {
|
||||
'model_class': continuum.transaction_class(self.get_model_class()),
|
||||
'width': 'full',
|
||||
'pageable': True,
|
||||
}
|
||||
if 'main_actions' not in kwargs:
|
||||
route = '{}.version'.format(self.get_route_prefix())
|
||||
instance = kwargs.get('instance') or self.get_instance()
|
||||
url = lambda txn, i: self.request.route_url(route, uuid=instance.uuid, txnid=txn.id)
|
||||
defaults['main_actions'] = [
|
||||
self.make_action('view', icon='zoomin', url=url),
|
||||
]
|
||||
defaults.update(kwargs)
|
||||
return defaults
|
||||
|
||||
def make_mobile_grid_kwargs(self, **kwargs):
|
||||
"""
|
||||
Must return a dictionary of kwargs to be passed to the factory when
|
||||
|
@ -342,6 +407,9 @@ class MasterView2(MasterView):
|
|||
def configure_row_grid(self, grid):
|
||||
pass
|
||||
|
||||
def configure_version_grid(self, grid):
|
||||
pass
|
||||
|
||||
def configure_mobile_grid(self, grid):
|
||||
pass
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ from pyramid import httpexceptions
|
|||
from pyramid.renderers import render_to_response
|
||||
from webhelpers2.html import tags, HTML
|
||||
|
||||
from tailbone import forms, grids3 as grids
|
||||
from tailbone import forms, grids
|
||||
from tailbone.db import Session
|
||||
from tailbone.views import MasterView2 as MasterView, AutocompleteView
|
||||
from tailbone.progress import SessionProgress
|
||||
|
|
|
@ -39,7 +39,7 @@ import formalchemy as fa
|
|||
import formencode as fe
|
||||
from webhelpers2.html import tags
|
||||
|
||||
from tailbone import forms, grids3 as grids
|
||||
from tailbone import forms, grids
|
||||
from tailbone.views.purchasing import PurchasingBatchView
|
||||
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ from rattail.db.auth import has_permission, administrator_role, guest_role, auth
|
|||
import formalchemy as fa
|
||||
from formalchemy.fields import IntegerFieldRenderer
|
||||
|
||||
from tailbone import forms, grids3 as grids
|
||||
from tailbone import forms, grids
|
||||
from tailbone.db import Session
|
||||
from tailbone.views.principal import PrincipalMasterView
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue