From dc4774ce7e3005e40d7c870e99041e7579d738f5 Mon Sep 17 00:00:00 2001 From: Andrew Mleczko Date: Thu, 18 Aug 2011 09:35:37 +0200 Subject: [PATCH 1/3] modified: pyramid_formalchemy/__init__.py --- pyramid_formalchemy/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pyramid_formalchemy/__init__.py b/pyramid_formalchemy/__init__.py index d73af11..d795495 100644 --- a/pyramid_formalchemy/__init__.py +++ b/pyramid_formalchemy/__init__.py @@ -11,7 +11,8 @@ def includeme(config): config.add_directive('formalchemy_model_view', 'pyramid_formalchemy.formalchemy_model_view') config.registry.pyramid_formalchemy_views = {} - config.add_route('set_language', '/set_language', 'pyramid_formalchemy.views.set_language') + config.add_route('set_language', '/set_language') + config.add_view('pyramid_formalchemy.views.set_language', route_name='set_language') def formalchemy_model_view(config, route_name, model=None, @@ -95,7 +96,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) From 169f509f1903ad03621d4d953ee607dd0f32f9a3 Mon Sep 17 00:00:00 2001 From: Andrew Mleczko Date: Thu, 25 Aug 2011 11:31:53 +0200 Subject: [PATCH 2/3] Adding IBeforeListingRenderEvent --- CHANGES.txt | 4 +++- pyramid_formalchemy/events.py | 6 +++++- pyramid_formalchemy/views.py | 5 +++++ pyramidapp/pyramidapp/events.py | 5 +++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 8108f93..d483145 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,7 +1,9 @@ 0.4.2 (unreleased) ------------------ -- Nothing changed yet. +- Pyramid 1.1 compatibility (amleczko) + +- Adding IBeforeListingRenderEvent (amleczko) 0.4.1 (2011-07-01) 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/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) + From 608203d9991ea2124347c0afaf3193a97f34810d Mon Sep 17 00:00:00 2001 From: Andrew Mleczko Date: Thu, 25 Aug 2011 12:38:59 +0200 Subject: [PATCH 3/3] fix model view registration --- CHANGES.txt | 2 ++ pyramid_formalchemy/__init__.py | 4 ++-- pyramid_formalchemy/resources.py | 10 +++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index d483145..0b51c21 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,6 +5,8 @@ - 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 5ac86c2..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 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: