From cca0d8edb5216ee1c3e4d3a96df9c153292a94aa Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Mon, 22 Jun 2009 08:56:22 +0000 Subject: - Add a ``view_for`` attribute to the ``route`` ZCML directive. This attribute should refer to an interface or a class (ala the ``for`` attribute of the ``view`` ZCML directive). --- repoze/bfg/tests/test_zcml.py | 46 +++++++++++++++++++++++++++++++++++++++++++ repoze/bfg/zcml.py | 4 +++- 2 files changed, 49 insertions(+), 1 deletion(-) (limited to 'repoze') diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index 30938d101..9302486b6 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -923,6 +923,52 @@ class TestRouteDirective(unittest.TestCase): self.assertEqual(route_discriminator[6], None) self.assertEqual(route_args, (route,)) + def test_after_with_view_and_view_for(self): + from repoze.bfg.zcml import handler + from repoze.bfg.zcml import connect_route + from repoze.bfg.interfaces import IView + + context = DummyContext() + view = Dummy() + route = self._makeOne(context, 'path', 'name', view=view, + view_for=IDummy) + route.after() + actions = context.actions + self.assertEqual(len(actions), 2) + + factories = context.request_factories + request_iface = factories['name'][None]['interface'] + + view_action = actions[0] + view_callable = view_action['callable'] + view_discriminator = view_action['discriminator'] + view_args = view_action['args'] + self.assertEqual(view_callable, handler) + self.assertEqual(len(view_discriminator), 5) + self.assertEqual(view_discriminator[0], 'view') + self.assertEqual(view_discriminator[1], IDummy) + self.assertEqual(view_discriminator[2],'') + self.assertEqual(view_discriminator[3], request_iface) + self.assertEqual(view_discriminator[4], IView) + self.assertEqual(view_args, ('registerAdapter', view, + (IDummy, request_iface), IView, + '', None)) + + route_action = actions[1] + route_callable = route_action['callable'] + route_discriminator = route_action['discriminator'] + route_args = route_action['args'] + self.assertEqual(route_callable, connect_route) + self.assertEqual(len(route_discriminator), 7) + self.assertEqual(route_discriminator[0], 'route') + self.assertEqual(route_discriminator[1], 'name') + self.assertEqual(route_discriminator[2],'{}') + self.assertEqual(route_discriminator[3], None) + self.assertEqual(route_discriminator[4], None) + self.assertEqual(route_discriminator[5], None) + self.assertEqual(route_discriminator[6], None) + self.assertEqual(route_args, (route,)) + def test_after_without_view(self): from repoze.bfg.zcml import connect_route diff --git a/repoze/bfg/zcml.py b/repoze/bfg/zcml.py index 8020cdd9f..57e38386f 100644 --- a/repoze/bfg/zcml.py +++ b/repoze/bfg/zcml.py @@ -161,6 +161,7 @@ class IRouteDirective(Interface): name = TextLine(title=u'name', required=True) path = TextLine(title=u'path', required=True) view = GlobalObject(title=u'view', required=False) + view_for = GlobalObject(title=u'view_for', required=False) permission = TextLine(title=u'permission', required=False) factory = GlobalObject(title=u'context factory', required=False) minimize = Bool(title=u'minimize', required=False) @@ -186,6 +187,7 @@ class Route(zope.configuration.config.GroupingContextDecorator): """ Handle ``route`` ZCML directives """ view = None + view_for = None permission = None factory = None minimize = True @@ -232,7 +234,7 @@ class Route(zope.configuration.config.GroupingContextDecorator): context.request_factories[name] = named_request_factories(name) if self.view: - view(context, self.permission, None, self.view, '', + view(context, self.permission, self.view_for, self.view, '', self.request_type, name) method = self.condition_method or self.request_type -- cgit v1.2.3