Add readonly support for email profile settings.
More to come... Also this required some form tweaking/overhaul(s).
This commit is contained in:
parent
ba6bf87ded
commit
ef40af814a
13 changed files with 453 additions and 48 deletions
|
@ -34,6 +34,8 @@ from sqlalchemy import orm
|
|||
import formalchemy
|
||||
from webhelpers import paginate
|
||||
|
||||
from edbob.util import prettify
|
||||
|
||||
from tailbone.db import Session
|
||||
from tailbone.newgrids import Grid, GridColumn, filters
|
||||
|
||||
|
@ -61,8 +63,10 @@ class AlchemyGrid(Grid):
|
|||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AlchemyGrid, self).__init__(*args, **kwargs)
|
||||
self._fa_grid = formalchemy.Grid(self.model_class, instances=self.data,
|
||||
session=Session(), request=self.request)
|
||||
fa_grid = formalchemy.Grid(self.model_class, instances=self.data,
|
||||
session=Session(), request=self.request)
|
||||
fa_grid.prettify = prettify
|
||||
self._fa_grid = fa_grid
|
||||
|
||||
def __delattr__(self, attr):
|
||||
delattr(self._fa_grid, attr)
|
||||
|
@ -150,10 +154,8 @@ class AlchemyGrid(Grid):
|
|||
Returns an iterator for all currently-visible columns.
|
||||
"""
|
||||
for field in self._fa_grid.render_fields.itervalues():
|
||||
column = GridColumn()
|
||||
column = GridColumn(field.key, field.label())
|
||||
column.field = field
|
||||
column.key = field.key
|
||||
column.label = field.label()
|
||||
yield column
|
||||
|
||||
def iter_rows(self):
|
||||
|
|
|
@ -26,6 +26,8 @@ Core Grid Classes
|
|||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from edbob.util import prettify
|
||||
|
||||
from rattail.db.api import get_setting, save_setting
|
||||
|
||||
from pyramid.renderers import render
|
||||
|
@ -136,6 +138,17 @@ class Grid(object):
|
|||
sorters.update(updates)
|
||||
return sorters
|
||||
|
||||
def make_sorter(self, key, foldcase=False):
|
||||
"""
|
||||
Returns a function suitable for a sort map callable, with typical logic
|
||||
built in for sorting a data set comprised of dicts, on the given key.
|
||||
"""
|
||||
if foldcase:
|
||||
keyfunc = lambda v: v[key].lower()
|
||||
else:
|
||||
keyfunc = lambda v: v[key]
|
||||
return lambda q, d: sorted(q, key=keyfunc, reverse=d == 'desc')
|
||||
|
||||
def load_settings(self, store=True):
|
||||
"""
|
||||
Load current/effective settings for the grid, from the request query
|
||||
|
@ -150,13 +163,15 @@ class Grid(object):
|
|||
settings = {
|
||||
'sortkey': self.default_sortkey,
|
||||
'sortdir': self.default_sortdir,
|
||||
'pagesize': self.default_pagesize,
|
||||
'page': self.default_page,
|
||||
}
|
||||
for filtr in self.iter_filters():
|
||||
settings['filter.{0}.active'.format(filtr.key)] = filtr.default_active
|
||||
settings['filter.{0}.verb'.format(filtr.key)] = filtr.default_verb
|
||||
settings['filter.{0}.value'.format(filtr.key)] = filtr.default_value
|
||||
if self.pageable:
|
||||
settings['pagesize'] = self.default_pagesize
|
||||
settings['page'] = self.default_page
|
||||
if self.filterable:
|
||||
for filtr in self.iter_filters():
|
||||
settings['filter.{0}.active'.format(filtr.key)] = filtr.default_active
|
||||
settings['filter.{0}.verb'.format(filtr.key)] = filtr.default_verb
|
||||
settings['filter.{0}.value'.format(filtr.key)] = filtr.default_value
|
||||
|
||||
# If user has default settings on file, apply those first.
|
||||
if self.user_has_defaults():
|
||||
|
@ -169,7 +184,7 @@ class Grid(object):
|
|||
|
||||
# If request has filter settings, grab those, then grab sort/pager
|
||||
# settings from request or session.
|
||||
elif self.request_has_settings('filter'):
|
||||
elif self.filterable and self.request_has_settings('filter'):
|
||||
self.update_filter_settings(settings, 'request')
|
||||
if self.request_has_settings('sort'):
|
||||
self.update_sort_settings(settings, 'request')
|
||||
|
@ -591,7 +606,7 @@ class Grid(object):
|
|||
return tags.link_to(action.label, url)
|
||||
|
||||
def iter_rows(self):
|
||||
return []
|
||||
return self.make_visible_data()
|
||||
|
||||
def get_row_attrs(self, row, i):
|
||||
"""
|
||||
|
@ -642,7 +657,7 @@ class Grid(object):
|
|||
return self.cell_attrs
|
||||
|
||||
def render_cell(self, row, column):
|
||||
return ''
|
||||
return unicode(row[column.key])
|
||||
|
||||
def get_pagesize_options(self):
|
||||
# TODO: Make configurable or something...
|
||||
|
@ -661,8 +676,10 @@ class GridColumn(object):
|
|||
|
||||
Human-facing label for the column, i.e. displayed in the header.
|
||||
"""
|
||||
key = None
|
||||
label = None
|
||||
|
||||
def __init__(self, key, label=None):
|
||||
self.key = key
|
||||
self.label = label or prettify(key)
|
||||
|
||||
|
||||
class GridAction(object):
|
||||
|
@ -673,7 +690,7 @@ class GridAction(object):
|
|||
|
||||
def __init__(self, key, label=None, url='#', icon=None):
|
||||
self.key = key
|
||||
self.label = label or key.capitalize()
|
||||
self.label = label or prettify(key)
|
||||
self.icon = icon
|
||||
self.url = url
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue