diff --git a/CHANGES.txt b/CHANGES.txt index 8108f93..0b51c21 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,11 @@ 0.4.2 (unreleased) ------------------ -- Nothing changed yet. +- Pyramid 1.1 compatibility (amleczko) + +- Adding IBeforeListingRenderEvent (amleczko) + +- Fix problem with formalchemy_model_view registration (amleczko) 0.4.1 (2011-07-01) diff --git a/pyramid_formalchemy/__init__.py b/pyramid_formalchemy/__init__.py index f21e08a..7234eb3 100644 --- a/pyramid_formalchemy/__init__.py +++ b/pyramid_formalchemy/__init__.py @@ -25,8 +25,8 @@ def formalchemy_model_view(config, route_name, model = config.maybe_dotted(model) context = config.maybe_dotted(context) - mixin_name = '%sCustom%s_%s_%s' % (model.__name__, context.__name__, - route_name, kwargs.get('request_method','GET')) + mixin_name = '%sCustom%s_%s_%s_%s' % (model.__name__, context.__name__, + route_name, name, kwargs.get('request_method','GET')) factory = type(mixin_name, (context,), {}) config.registry.pyramid_formalchemy_views[factory.__name__] = factory @@ -98,7 +98,8 @@ def formalchemy_admin(config, route_name, url = request.route_url(route_name, traverse=(), **matchdict) return HTTPFound(location=url) - config.add_route('%s_redirect' % route_name, route_name, redirect) + config.add_route('%s_redirect' % route_name, route_name) + config.add_view(redirect, route_name = '%s_redirect' % route_name) config.add_route(route_name, '%s/*traverse' % route_name, factory=factory) diff --git a/pyramid_formalchemy/events.py b/pyramid_formalchemy/events.py index e1cfeae..a8c92ec 100644 --- a/pyramid_formalchemy/events.py +++ b/pyramid_formalchemy/events.py @@ -30,12 +30,16 @@ class IBeforeRenderEvent(zope.component.interfaces.IObjectEvent): """A model will rendered""" +class IBeforeListingRenderEvent(IBeforeRenderEvent): + """Listing will be rendered""" + + class IBeforeShowRenderEvent(IBeforeRenderEvent): """Show will be rendered""" class IBeforeEditRenderEvent(IBeforeRenderEvent): - """Show will be rendered""" + """Edit will be rendered""" class BeforeValidateEvent(zope.component.interfaces.ObjectEvent): diff --git a/pyramid_formalchemy/resources.py b/pyramid_formalchemy/resources.py index 4aae723..c506da0 100644 --- a/pyramid_formalchemy/resources.py +++ b/pyramid_formalchemy/resources.py @@ -100,7 +100,7 @@ class Models(Base): self.request.model_name = item model_class = self.get_model() - mixin_name = '%sCustom%s_%s_%s' % (model_class.__name__, ModelListing.__name__, + mixin_name = '%sCustom%s_%s__%s' % (model_class.__name__, ModelListing.__name__, self.request.route_name, self.request.method) mixin = type(mixin_name, (ModelListing, ), {}) factory = self.request.registry.pyramid_formalchemy_views.get(mixin.__name__, mixin) @@ -134,8 +134,12 @@ class ModelListing(Base): self.request.format = item return self - mixin_name = '%sCustom%s_%s_%s' % (self.request.model_class.__name__, Model.__name__, - self.request.route_name, self.request.method) + name = self.request.path.split('/')[-1] #view name + if name == item: + name = '' + + mixin_name = '%sCustom%s_%s_%s_%s' % (self.request.model_class.__name__, Model.__name__, + self.request.route_name, name, self.request.method) mixin = type(str(mixin_name), (Model, ), {}) factory = self.request.registry.pyramid_formalchemy_views.get(mixin.__name__, mixin) try: diff --git a/pyramid_formalchemy/views.py b/pyramid_formalchemy/views.py index 14af415..bbbd877 100644 --- a/pyramid_formalchemy/views.py +++ b/pyramid_formalchemy/views.py @@ -306,6 +306,11 @@ class ModelView(object): fs = self.get_grid() fs = fs.bind(instances=page, request=self.request) fs.readonly = True + + event = events.BeforeRenderEvent(self.request.model_class(), self.request, fs=fs, page=page) + alsoProvides(event, events.IBeforeListingRenderEvent) + zope.component.event.objectEventNotify(event) + if self.request.format == 'json': values = [] request = self.request diff --git a/pyramidapp/pyramidapp/events.py b/pyramidapp/pyramidapp/events.py index 40851e5..ed50f80 100644 --- a/pyramidapp/pyramidapp/events.py +++ b/pyramidapp/pyramidapp/events.py @@ -27,3 +27,8 @@ def before_foo_show_render(context, event): @events.subscriber([Foo, events.IBeforeEditRenderEvent]) def before_foo_edit_render(context, event): log.info("%r foo edit will be rendered" % event.object) + +@events.subscriber([Foo, events.IBeforeListingRenderEvent]) +def before_foo_listing_render(context, event): + log.info("%r listing will be rendered" % context) +