save point

This commit is contained in:
Lance Edgar 2012-04-10 22:24:30 -05:00
parent 17f2dfe1d1
commit ce08699104
5 changed files with 47 additions and 30 deletions

View file

@ -44,9 +44,9 @@ from edbob.util import prettify
from edbob.pyramid import Session
__all__ = ['AlchemyGrid', 'ChildGridField', 'EnumFieldRenderer',
'PrettyDateTimeFieldRenderer', 'make_fieldset', 'required',
'pretty_datetime']
__all__ = ['AlchemyGrid', 'ChildGridField', 'PropertyField',
'EnumFieldRenderer', 'PrettyDateTimeFieldRenderer',
'make_fieldset', 'required', 'pretty_datetime']
class TemplateEngine(formalchemy.templates.TemplateEngine):
@ -110,8 +110,8 @@ class AlchemyGrid(formalchemy.Grid):
# self.url_kwargs = url_kwargs
# self.sortable = config.get('sortable', False)
def __init__(self, cls, instances, config, url_grid, url_object=None,
url_delete=None, **kwargs):
def __init__(self, cls, instances, config, gridurl=None, objurl=None,
delurl=None, **kwargs):
"""
Grid constructor.
@ -123,9 +123,10 @@ class AlchemyGrid(formalchemy.Grid):
formalchemy.Grid.__init__(self, cls, instances, **kwargs)
self.config = config
self.url_grid = url_grid
self.url_object = url_object
self.url_delete = url_delete
self.request = config['request']
self.gridurl = gridurl
self.objurl = objurl
self.delurl = delurl
self.sortable = config.get('sortable', False)
self.deletable = config.get('deletable', False)
self.pager = instances if isinstance(instances, paginate.Page) else None
@ -149,9 +150,15 @@ class AlchemyGrid(formalchemy.Grid):
return format_attrs(**attrs)
def url_attrs(self):
return format_attrs(url=self.url_grid,
objurl=self.url_object,
delurl=self.url_delete)
attrs = {}
url = self.request.route_url
if self.gridurl:
attrs['url'] = self.gridurl
if self.objurl:
attrs['objurl'] = url(self.objurl, uuid='{uuid}')
if self.delurl:
attrs['delurl'] = url(self.delurl, uuid='{uuid}')
return format_attrs(**attrs)
# def render(self, class_=None, **kwargs):
# """
@ -278,6 +285,20 @@ class ChildGridField(formalchemy.Field):
self.set(readonly=True)
class PropertyField(formalchemy.Field):
"""
Convenience class for fields which simply involve a read-only property
value.
"""
def __init__(self, name, attr=None, *args, **kwargs):
super(PropertyField, self).__init__(name, *args, **kwargs)
if not attr:
attr = name
self.set(value=lambda x: getattr(x, attr))
self.set(readonly=True)
def make_fieldset(model, **kwargs):
kwargs.setdefault('session', Session())
return FieldSet(model, **kwargs)

View file

@ -137,6 +137,7 @@ def get_grid_config(name, request, search=None, url=None, **kwargs):
elif request.session.get(full_key):
value = request.session[full_key]
config[key] = value
config['request'] = request
config['search'] = search
config['url'] = url
return config

View file

@ -149,7 +149,7 @@ $(function() {
});
$('#add-filter').live('change', function() {
var div = $(this).parents('div.filters:first');
var div = $(this).parents('div.filterset:first');
var filter = div.find('#filter-'+$(this).val());
filter.find(':first-child').attr('checked', true);
filter.show();
@ -238,7 +238,7 @@ $(function() {
});
});
} else {
location.href = div.attr('objurl') + '?uuid=' + get_uuid(this);
location.href = div.attr('objurl').replace(/%7Buuid%7D/, get_uuid(this));
}
});
@ -273,8 +273,7 @@ $(function() {
if (confirm("Do you really wish to delete this object?")) {
var grid = $(this).parents('div.grid:first');
var url = grid.attr('delurl');
// alert(url + '?uuid=' + get_uuid(this) + '&delete=true');
location.href = url + '?uuid=' + get_uuid(this) + '&delete=true';
location.href = url.replace(/%7Buuid%7D/, get_uuid(this));
}
return false;
});

View file

@ -4,7 +4,7 @@
<% visible = [] %>
% for f in search.sorted_filters():
<% f = search.filters[f] %>
<div class="filter" id="filter-${f.name}"${' style="display: none;"' if not search.config.get('include_filter_'+f.name) else ''}>
<div class="filter" id="filter-${f.name}"${' style="display: none;"' if not search.config.get('include_filter_'+f.name) else ''|n}>
${search.checkbox('include_filter_'+f.name)}
<label for="${f.name}">${f.label}</label>
${f.types_select()}

View file

@ -114,21 +114,17 @@ def crud(request, cls, fieldset_factory, home=None, delete=None, post_sync=None,
if res:
return res
if request.params.get('partial'):
# Session.flush()
# return self.json_success(uuid=fs.model.uuid)
assert False, "need to fix this"
if request.params.get('partial'):
# Session.flush()
# return self.json_success(uuid=fs.model.uuid)
assert False, "need to fix this"
# Session.commit()
if not home:
# FIXME
# home = request.route_url.current() + '?uuid=' + fs.model.uuid
# home = request.route_url('home')
fs.model = Session.merge(fs.model)
home = request.current_route_url() + '?uuid=' + fs.model.uuid
request.session.flash("%s \"%s\" has been %s." % (
fs.crud_title, fs.get_display_text(),
'updated' if fs.edit else 'created'))
if not home:
fs.model = Session.merge(fs.model)
home = request.current_route_url(uuid=fs.model.uuid)
request.session.flash("%s \"%s\" has been %s." % (
fs.crud_title, fs.get_display_text(),
'updated' if fs.edit else 'created'))
return HTTPFound(location=home)
data = {'fieldset': fs, 'crud': True}