summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt12
-rw-r--r--docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml14
-rw-r--r--docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml2
-rw-r--r--docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml2
-rw-r--r--docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml6
-rw-r--r--repoze/bfg/paster_templates/routesalchemy/+package+/configure.zcml2
-rw-r--r--repoze/bfg/tests/test_zcml.py311
-rw-r--r--repoze/bfg/zcml.py8
8 files changed, 342 insertions, 15 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 72f6c5d6b..5af979c28 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -9,6 +9,18 @@ Bug Fixes
of this bug: applications generated using the ``bfg_zodb`` paster
template in 1.1a9 did not work properly.
+- Reinstate ``renderer`` alias for ``view_renderer`` in the
+ ``<route>`` ZCML directive (in-the-wild 1.1a bw compat).
+
+- ``bfg_routesalchemy`` paster template: change ``<route>``
+ declarations: rename ``renderer`` attribute to ``view_renderer``.
+
+Documentation
+-------------
+
+- In ``<route>`` declarations in tutorial ZCML, rename ``renderer``
+ attribute to ``view_renderer`` (fwd compat).
+
Internal
--------
diff --git a/docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml b/docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml
index d9f6ffabd..12dbd7ae1 100644
--- a/docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml
+++ b/docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml
@@ -15,7 +15,7 @@
path="login"
name="login"
view=".login.login"
- renderer="templates/login.pt"
+ view_renderer="templates/login.pt"
/>
<route
@@ -34,28 +34,28 @@
path=":pagename"
name="view_page"
view=".views.view_page"
- renderer="templates/view.pt"
+ view_renderer="templates/view.pt"
/>
<route
path="add_page/:pagename"
name="add_page"
view=".views.add_page"
- renderer="templates/edit.pt"
- permission="edit"
+ view_renderer="templates/edit.pt"
+ view_permission="edit"
/>
<route
path=":pagename/edit_page"
name="edit_page"
view=".views.edit_page"
- renderer="templates/edit.pt"
- permission="edit"
+ view_renderer="templates/edit.pt"
+ view_permission="edit"
/>
<forbidden
view=".login.login"
- renderer="templates/login.pt"/>
+ view_renderer="templates/login.pt"/>
<authtktauthenticationpolicy
secret="sosecret"
diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml
index 75e12c9c8..f0e5ecc20 100644
--- a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml
+++ b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml
@@ -9,7 +9,7 @@
<route path=""
name="home"
view=".views.my_view"
- renderer="templates/mytemplate.pt"
+ view_renderer="templates/mytemplate.pt"
/>
<static
diff --git a/docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml b/docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml
index 75e12c9c8..f0e5ecc20 100644
--- a/docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml
+++ b/docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml
@@ -9,7 +9,7 @@
<route path=""
name="home"
view=".views.my_view"
- renderer="templates/mytemplate.pt"
+ view_renderer="templates/mytemplate.pt"
/>
<static
diff --git a/docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml b/docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml
index 7eafe7c3c..218172a1c 100644
--- a/docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml
+++ b/docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml
@@ -21,21 +21,21 @@
path=":pagename"
name="view_page"
view=".views.view_page"
- renderer="templates/view.pt"
+ view_renderer="templates/view.pt"
/>
<route
path="add_page/:pagename"
name="add_page"
view=".views.add_page"
- renderer="templates/edit.pt"
+ view_renderer="templates/edit.pt"
/>
<route
path=":pagename/edit_page"
name="edit_page"
view=".views.edit_page"
- renderer="templates/edit.pt"
+ view_renderer="templates/edit.pt"
/>
</configure>
diff --git a/repoze/bfg/paster_templates/routesalchemy/+package+/configure.zcml b/repoze/bfg/paster_templates/routesalchemy/+package+/configure.zcml
index f80f2ad75..954be6bf8 100644
--- a/repoze/bfg/paster_templates/routesalchemy/+package+/configure.zcml
+++ b/repoze/bfg/paster_templates/routesalchemy/+package+/configure.zcml
@@ -10,7 +10,7 @@
path=""
name="home"
view=".views.my_view"
- renderer="templates/mytemplate.pt"
+ view_renderer="templates/mytemplate.pt"
/>
<static
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py
index d534559f6..804fc7b6e 100644
--- a/repoze/bfg/tests/test_zcml.py
+++ b/repoze/bfg/tests/test_zcml.py
@@ -1669,6 +1669,43 @@ class TestRouteDirective(unittest.TestCase):
predicates = route_args[3]
self.assertEqual(len(predicates), 0)
+ def test_with_view_and_view_for_alias(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ context = DummyContext()
+ def view(context, request):
+ return '123'
+ self._callFUT(context, 'name', 'path', view=view, for_=IDummy)
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_type = sm.getUtility(IRouteRequest, 'name')
+ view_discriminator = view_action['discriminator']
+ discrim = ('view', IDummy, '', request_type, IView, None, None, None,
+ 'name', None, False, None, None, None)
+ self.assertEqual(view_discriminator, discrim)
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ request = DummyRequest()
+ self.assertEqual(wrapped(None, request), '123')
+
+ 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(route_discriminator,
+ ('route', 'name', False, None, None, None, None,None))
+ self.assertEqual(route_args[:3], ('path', 'name', None))
+ predicates = route_args[3]
+ self.assertEqual(len(predicates), 0)
+
def test_without_view(self):
from repoze.bfg.zcml import connect_route
context = DummyContext()
@@ -1722,6 +1759,43 @@ class TestRouteDirective(unittest.TestCase):
predicates = route_args[3]
self.assertEqual(len(predicates), 0)
+ def test_with_view_request_type_alias(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ request_type="GET")
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_type = sm.getUtility(IRouteRequest, 'name')
+ view_discriminator = view_action['discriminator']
+ discrim = ('view', None, '', request_type, IView, None, None, 'GET',
+ 'name', None, False, None, None, None)
+ self.assertEqual(view_discriminator, discrim)
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ 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(route_discriminator,
+ ('route', 'name', False, None, None, None, None,None))
+ self.assertEqual(route_args[:3], ('path', 'name', None))
+ predicates = route_args[3]
+ self.assertEqual(len(predicates), 0)
+
def test_with_view_request_method(self):
from zope.component import getSiteManager
from repoze.bfg.zcml import connect_route
@@ -1941,6 +2015,243 @@ class TestRouteDirective(unittest.TestCase):
predicates = route_args[3]
self.assertEqual(len(predicates), 0)
+ def test_with_view_renderer(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+ from repoze.bfg.interfaces import IRendererFactory
+
+ sm = getSiteManager()
+ def renderer(name):
+ return lambda *x: 'foo'
+ sm.registerUtility(renderer, IRendererFactory, name='dummy')
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ view_renderer="dummy")
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_type = sm.getUtility(IRouteRequest, 'name')
+ view_discriminator = view_action['discriminator']
+ discrim = ('view', None, '', request_type, IView, None, None, None,
+ 'name', None, False, None, None, None)
+ self.assertEqual(view_discriminator, discrim)
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ 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(route_discriminator,
+ ('route', 'name', False, None, None, None, None, None))
+ self.assertEqual(route_args[:3], ('path', 'name', None))
+ predicates = route_args[3]
+ self.assertEqual(len(predicates), 0)
+
+ def test_with_view_renderer_alias(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+ from repoze.bfg.interfaces import IRendererFactory
+
+ sm = getSiteManager()
+ def renderer(name):
+ return lambda *x: 'foo'
+ sm.registerUtility(renderer, IRendererFactory, name='dummy')
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ renderer="dummy")
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ request_type = sm.getUtility(IRouteRequest, 'name')
+ view_discriminator = view_action['discriminator']
+ discrim = ('view', None, '', request_type, IView, None, None, None,
+ 'name', None, False, None, None, None)
+ self.assertEqual(view_discriminator, discrim)
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ 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(route_discriminator,
+ ('route', 'name', False, None, None, None, None, None))
+ self.assertEqual(route_args[:3], ('path', 'name', None))
+ predicates = route_args[3]
+ self.assertEqual(len(predicates), 0)
+
+ def test_with_view_permission(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ sm = getSiteManager()
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ view_permission="edit")
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_type = sm.getUtility(IRouteRequest, 'name')
+ view_discriminator = view_action['discriminator']
+ discrim = ('view', None, '', request_type, IView, None, None, None,
+ 'name', None, False, None, None, None)
+ self.assertEqual(view_discriminator, discrim)
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ 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(route_discriminator,
+ ('route', 'name', False, None, None, None, None, None))
+ self.assertEqual(route_args[:3], ('path', 'name', None))
+ predicates = route_args[3]
+ self.assertEqual(len(predicates), 0)
+
+ def test_with_view_permission_alias(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ sm = getSiteManager()
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ permission="edit")
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ request_type = sm.getUtility(IRouteRequest, 'name')
+ view_discriminator = view_action['discriminator']
+ discrim = ('view', None, '', request_type, IView, None, None, None,
+ 'name', None, False, None, None, None)
+ self.assertEqual(view_discriminator, discrim)
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ 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(route_discriminator,
+ ('route', 'name', False, None, None, None, None, None))
+ self.assertEqual(route_args[:3], ('path', 'name', None))
+ predicates = route_args[3]
+ self.assertEqual(len(predicates), 0)
+
+ def test_with_view_for(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ sm = getSiteManager()
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ view_for=IDummy)
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_type = sm.getUtility(IRouteRequest, 'name')
+ view_discriminator = view_action['discriminator']
+ discrim = ('view', IDummy, '', request_type, IView, None, None, None,
+ 'name', None, False, None, None, None)
+ self.assertEqual(view_discriminator, discrim)
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ 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(route_discriminator,
+ ('route', 'name', False, None, None, None, None, None))
+ self.assertEqual(route_args[:3], ('path', 'name', None))
+ predicates = route_args[3]
+ self.assertEqual(len(predicates), 0)
+
+ def test_with_view_for_alias(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ sm = getSiteManager()
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ for_=IDummy)
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ request_type = sm.getUtility(IRouteRequest, 'name')
+ view_discriminator = view_action['discriminator']
+ discrim = ('view', IDummy, '', request_type, IView, None, None, None,
+ 'name', None, False, None, None, None)
+ self.assertEqual(view_discriminator, discrim)
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ 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(route_discriminator,
+ ('route', 'name', False, None, None, None, None, None))
+ self.assertEqual(route_args[:3], ('path', 'name', None))
+ predicates = route_args[3]
+ self.assertEqual(len(predicates), 0)
+
def test_with_request_type_GET(self):
from zope.component import getSiteManager
from repoze.bfg.zcml import connect_route
diff --git a/repoze/bfg/zcml.py b/repoze/bfg/zcml.py
index 3d8826eab..2bec8b77a 100644
--- a/repoze/bfg/zcml.py
+++ b/repoze/bfg/zcml.py
@@ -566,12 +566,15 @@ class IRouteDirective(Interface):
# alias for view_request_type
request_type = TextLine(title=u'request_type', required=False)
+ view_renderer = TextLine(title=u'view_renderer', required=False)
+ # alias for view_renderer
+ renderer = TextLine(title=u'renderer', required=False)
+
view_request_method = TextLine(title=u'view_request_method', required=False)
view_containment = GlobalObject(
title = u'Dotted name of a containment class or interface',
required=False)
view_attr = TextLine(title=u'view_attr', required=False)
- view_renderer = TextLine(title=u'view_renderer', required=False)
view_header = TextLine(title=u'view_header', required=False)
view_accept = TextLine(title=u'view_accept', required=False)
view_xhr = Bool(title=u'view_xhr', required=False)
@@ -597,7 +600,7 @@ def route(_context, name, path, view=None, view_for=None,
view_permission=None, view_request_type=None,
view_request_method=None, view_request_param=None,
view_containment=None, view_attr=None,
- view_renderer=None, view_header=None,
+ renderer=None, view_renderer=None, view_header=None,
view_accept=None, view_xhr=False,
view_path_info=None):
""" Handle ``route`` ZCML directives
@@ -629,6 +632,7 @@ def route(_context, name, path, view=None, view_for=None,
view_for = view_for or for_
view_request_type = view_request_type or request_type
view_permission = view_permission or permission
+ view_renderer = view_renderer or renderer
_view(
_context,
permission=view_permission,