From c2dee891fb210936461cf266bf128003bbfc45a0 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sat, 14 Jul 2012 10:42:01 -0500 Subject: [PATCH] refactor categories views etc. --- .../categories/{category.mako => crud.mako} | 4 +- .../pyramid/templates/categories/edit.mako | 2 + .../pyramid/templates/categories/index.mako | 4 +- rattail/pyramid/templates/categories/new.mako | 2 + rattail/pyramid/views/categories.py | 182 +++++------------- 5 files changed, 52 insertions(+), 142 deletions(-) rename rattail/pyramid/templates/categories/{category.mako => crud.mako} (57%) create mode 100644 rattail/pyramid/templates/categories/edit.mako create mode 100644 rattail/pyramid/templates/categories/new.mako diff --git a/rattail/pyramid/templates/categories/category.mako b/rattail/pyramid/templates/categories/crud.mako similarity index 57% rename from rattail/pyramid/templates/categories/category.mako rename to rattail/pyramid/templates/categories/crud.mako index 2fd4d52d..1e373321 100644 --- a/rattail/pyramid/templates/categories/category.mako +++ b/rattail/pyramid/templates/categories/crud.mako @@ -3,8 +3,8 @@ <%def name="crud_name()">Category -<%def name="menu()"> -

${h.link_to("Back to Categories", url('categories.list'))}

+<%def name="context_menu_items()"> +
  • ${h.link_to("Back to Categories", url('categories.list'))}
  • ${parent.body()} diff --git a/rattail/pyramid/templates/categories/edit.mako b/rattail/pyramid/templates/categories/edit.mako new file mode 100644 index 00000000..590cf3bb --- /dev/null +++ b/rattail/pyramid/templates/categories/edit.mako @@ -0,0 +1,2 @@ +<%inherit file="/categories/crud.mako" /> +${parent.body()} diff --git a/rattail/pyramid/templates/categories/index.mako b/rattail/pyramid/templates/categories/index.mako index 051f2853..3389f3b7 100644 --- a/rattail/pyramid/templates/categories/index.mako +++ b/rattail/pyramid/templates/categories/index.mako @@ -3,9 +3,9 @@ <%def name="title()">Categories -<%def name="menu()"> +<%def name="context_menu_items()"> % if request.has_perm('categories.create'): -

    ${h.link_to("Create a new Category", url('category.new'))}

    +
  • ${h.link_to("Create a new Category", url('category.new'))}
  • % endif diff --git a/rattail/pyramid/templates/categories/new.mako b/rattail/pyramid/templates/categories/new.mako new file mode 100644 index 00000000..590cf3bb --- /dev/null +++ b/rattail/pyramid/templates/categories/new.mako @@ -0,0 +1,2 @@ +<%inherit file="/categories/crud.mako" /> +${parent.body()} diff --git a/rattail/pyramid/views/categories.py b/rattail/pyramid/views/categories.py index 94380fbd..51c6b6ec 100644 --- a/rattail/pyramid/views/categories.py +++ b/rattail/pyramid/views/categories.py @@ -26,157 +26,63 @@ ``rattail.pyramid.views.categories`` -- Category Views """ -import transaction -from pyramid.httpexceptions import HTTPFound - -from edbob.pyramid import filters -from edbob.pyramid import forms -from edbob.pyramid import grids -from edbob.pyramid import Session +from edbob.pyramid.views import GridView +from edbob.pyramid.views.crud import Crud import rattail -def filter_map(): - return filters.get_filter_map( - rattail.Category, - exact=['number'], - ilike=['name']) +class CategoryGrid(GridView): -def search_config(request, fmap): - return filters.get_search_config( - 'categories.list', request, fmap, - include_filter_name=True, - filter_type_name='lk') + mapped_class = rattail.Category + route_name = 'categories.list' + route_prefix = 'category' -def search_form(config): - return filters.get_search_form(config) + def filter_map(self): + return self.make_filter_map( + exact=['number'], + ilike=['name']) -def grid_config(request, search, fmap): - return grids.get_grid_config( - 'categories.list', request, search, - filter_map=fmap, sort='name', - deletable=True) + def search_config(self, fmap): + return self.make_search_config( + fmap, + include_filter_name=True, + filter_type_name='lk') -def sort_map(): - return grids.get_sort_map( - rattail.Category, - ['number', 'name']) + def grid_config(self, search, fmap): + return self.make_grid_config(search, fmap, + sort='number') -def query(config): - smap = sort_map() - q = Session.query(rattail.Category) - q = filters.filter_query(q, config) - q = grids.sort_query(q, config, smap) - return q + def sort_map(self): + return self.make_sort_map('number', 'name') + + def grid(self, data, config): + g = self.make_grid(data, config) + g.configure( + include=[ + g.number, + g.name, + ], + readonly=True) + return g -def categories(request): +class CategoryCrud(Crud): - fmap = filter_map() - config = search_config(request, fmap) - search = search_form(config) - config = grid_config(request, search, fmap) - categories = grids.get_pager(query, config) + mapped_class = rattail.Category + home_route = 'categories.list' + url_prefix = '/categories' - g = forms.AlchemyGrid( - rattail.Category, categories, config, - gridurl=request.route_url('categories.list'), - objurl='category.edit', delurl='category.delete') - - g.configure( - include=[ - g.number, - g.name, - ], - readonly=True) - - grid = g.render(class_='clickable categories') - return grids.render_grid(request, grid, search) - - -def category_fieldset(category, request): - fs = forms.make_fieldset(category, url=request.route_url, - url_action=request.current_route_url(), - route_name='categories.list') - fs.configure( - include=[ - fs.number, - fs.name, - ]) - return fs - - -def new_category(request): - - fs = category_fieldset(rattail.Category, request) - if not fs.readonly and request.POST: - fs.rebind(data=request.params) - if fs.validate(): - - with transaction.manager: - fs.sync() - Session.add(fs.model) - Session.flush() - request.session.flash("%s \"%s\" has been %s." % ( - fs.crud_title, fs.get_display_text(), - 'updated' if fs.edit else 'created')) - - return HTTPFound(location=request.route_url('categories.list')) - - return {'fieldset': fs, 'crud': True} - - -def edit_category(request): - """ - View for editing a :class:`rattail.Category` instance. - """ - - uuid = request.matchdict['uuid'] - category = Session.query(rattail.Category).get(uuid) if uuid else None - assert category - - fs = category_fieldset(category, request) - if request.POST: - fs.rebind(data=request.params) - if fs.validate(): - - with transaction.manager: - fs.sync() - fs.model = Session.merge(fs.model) - request.session.flash("%s \"%s\" has been %s." % ( - fs.crud_title, fs.get_display_text(), - 'updated' if fs.edit else 'created')) - home = request.route_url('categories.list') - - return HTTPFound(location=home) - - return {'fieldset': fs, 'crud': True} - - -def delete_category(request): - uuid = request.matchdict['uuid'] - category = Session.query(rattail.Category).get(uuid) if uuid else None - assert category - with transaction.manager: - Session.delete(category) - return HTTPFound(location=request.route_url('categories.list')) + def fieldset(self, obj): + fs = self.make_fieldset(obj) + fs.configure( + include=[ + fs.number, + fs.name, + ]) + return fs def includeme(config): - - config.add_route('categories.list', '/categories') - config.add_view(categories, route_name='categories.list', renderer='/categories/index.mako', - permission='categories.list', http_cache=0) - - config.add_route('category.new', '/categories/new') - config.add_view(new_category, route_name='category.new', renderer='/categories/category.mako', - permission='categories.create', http_cache=0) - - config.add_route('category.edit', '/categories/{uuid}/edit') - config.add_view(edit_category, route_name='category.edit', renderer='/categories/category.mako', - permission='category.edit', http_cache=0) - - config.add_route('category.delete', '/categories/{uuid}/delete') - config.add_view(delete_category, route_name='category.delete', - permission='category.delete', http_cache=0) + CategoryGrid.add_route(config, 'categories.list', '/categories') + CategoryCrud.add_routes(config)