summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-06-01 07:20:48 +0000
committerChris McDonough <chrism@agendaless.com>2009-06-01 07:20:48 +0000
commita7f13ff10e0eae01b958738e41d9d172af2916dd (patch)
tree4ecb45f92d4cbca39ca8ed70b6e7d7a657efcb33
parentc1278c88b6cd19ad81c96f8b8a66a01df23a6200 (diff)
downloadpyramid-a7f13ff10e0eae01b958738e41d9d172af2916dd.tar.gz
pyramid-a7f13ff10e0eae01b958738e41d9d172af2916dd.tar.bz2
pyramid-a7f13ff10e0eae01b958738e41d9d172af2916dd.zip
- It was not possible to register a custom ``IRoutesContextFactory``
for use as a default context factory as documented in the "Hooks" chapter.
-rw-r--r--CHANGES.txt7
-rw-r--r--repoze/bfg/router.py15
-rw-r--r--repoze/bfg/tests/test_router.py32
-rw-r--r--repoze/bfg/tests/test_urldispatch.py20
-rw-r--r--repoze/bfg/urldispatch.py6
5 files changed, 56 insertions, 24 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 03dd1afc4..905f88304 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,13 @@
Next Release
============
+Bug Fixes
+---------
+
+- It was not possible to register a custom ``IRoutesContextFactory``
+ for use as a default context factory as documented in the "Hooks"
+ chapter.
+
Features
--------
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py
index b243ec5b0..51094229a 100644
--- a/repoze/bfg/router.py
+++ b/repoze/bfg/router.py
@@ -30,6 +30,8 @@ from repoze.bfg.interfaces import IView
from repoze.bfg.interfaces import IViewPermission
from repoze.bfg.interfaces import IAuthorizationPolicy
from repoze.bfg.interfaces import IAuthenticationPolicy
+from repoze.bfg.interfaces import IRoutesContext
+from repoze.bfg.interfaces import IRoutesContextFactory
from repoze.bfg.log import make_stream_logger
@@ -350,8 +352,6 @@ def make_app(root_factory, package=None, filename='configure.zcml',
registry.registerUtility(debug_logger, ILogger, 'repoze.bfg.debug')
settings = Settings(options)
registry.registerUtility(settings, ISettings)
- mapper = RoutesRootFactory(root_factory)
- registry.registerUtility(mapper, IRoutesMapper)
if authentication_policy:
registry.registerUtility(authentication_policy, IAuthenticationPolicy)
@@ -359,8 +359,19 @@ def make_app(root_factory, package=None, filename='configure.zcml',
authorization_policy = ACLAuthorizationPolicy()
registry.registerUtility(authorization_policy, IAuthorizationPolicy)
+ mapper = RoutesRootFactory(root_factory)
+ registry.registerUtility(mapper, IRoutesMapper)
+
populateRegistry(registry, filename, package)
+ context_factory = registry.queryUtility(
+ IRoutesContextFactory,
+ default=mapper.default_context_factory)
+
+ if IRoutesContext.implementedBy(context_factory):
+ mapper.decorate_context = False
+ mapper.default_context_factory = context_factory
+
if not authentication_policy:
# deal with bw compat of <= 0.8 security policies (deprecated)
secpol = registry.queryUtility(ISecurityPolicy)
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index 09c3f7c1f..d07efcc69 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -911,6 +911,38 @@ class MakeAppTests(unittest.TestCase):
self.assertEqual(len(logger.messages), 1)
self.failUnless('ISecurityPolicy' in logger.messages[0])
+ def test_custom_default_context_factory_nodecorate(self):
+ from repoze.bfg.tests import routesapp
+ from zope.component import getGlobalSiteManager
+ from repoze.bfg.interfaces import IRoutesContextFactory
+ from repoze.bfg.interfaces import IRoutesMapper
+ class Dummy(object):
+ pass
+ gsm = getGlobalSiteManager()
+ gsm.registerUtility(Dummy, IRoutesContextFactory)
+ app = self._callFUT(None, routesapp, registry=gsm)
+ mapper = gsm.getUtility(IRoutesMapper)
+ self.assertEqual(mapper.default_context_factory,
+ Dummy)
+ self.assertEqual(mapper.decorate_context, True)
+
+ def test_custom_default_context_factory_decorate(self):
+ from repoze.bfg.tests import routesapp
+ from zope.component import getGlobalSiteManager
+ from repoze.bfg.interfaces import IRoutesContextFactory
+ from repoze.bfg.interfaces import IRoutesMapper
+ from repoze.bfg.interfaces import IRoutesContext
+ from zope.interface import implements
+ class Dummy(object):
+ implements(IRoutesContext)
+ gsm = getGlobalSiteManager()
+ gsm.registerUtility(Dummy, IRoutesContextFactory)
+ app = self._callFUT(None, routesapp, registry=gsm)
+ mapper = gsm.getUtility(IRoutesMapper)
+ self.assertEqual(mapper.default_context_factory,
+ Dummy)
+ self.assertEqual(mapper.decorate_context, False)
+
class TestDefaultForbiddenView(unittest.TestCase):
def _callFUT(self, context, request):
from repoze.bfg.router import default_forbidden_view
diff --git a/repoze/bfg/tests/test_urldispatch.py b/repoze/bfg/tests/test_urldispatch.py
index 92564146e..2b4578f94 100644
--- a/repoze/bfg/tests/test_urldispatch.py
+++ b/repoze/bfg/tests/test_urldispatch.py
@@ -22,32 +22,18 @@ class RoutesRootFactoryTests(unittest.TestCase):
klass = self._getTargetClass()
return klass(get_root)
- def test_init_custom_default_context_factory_dont_decorate(self):
+ def test_init_default_context_factory(self):
from zope.component import getGlobalSiteManager
from repoze.bfg.interfaces import IRoutesContextFactory
+ from repoze.bfg.urldispatch import DefaultRoutesContext
class Dummy(object):
pass
gsm = getGlobalSiteManager()
gsm.registerUtility(Dummy, IRoutesContextFactory)
mapper = self._makeOne(None)
- self.assertEqual(mapper.default_context_factory,
- Dummy)
+ self.assertEqual(mapper.default_context_factory, DefaultRoutesContext)
self.assertEqual(mapper.decorate_context, True)
- def test_init_custom_default_context_factory_decorate(self):
- from zope.component import getGlobalSiteManager
- from repoze.bfg.interfaces import IRoutesContextFactory
- from repoze.bfg.interfaces import IRoutesContext
- from zope.interface import implements
- class Dummy(object):
- implements(IRoutesContext)
- gsm = getGlobalSiteManager()
- gsm.registerUtility(Dummy, IRoutesContextFactory)
- mapper = self._makeOne(None)
- self.assertEqual(mapper.default_context_factory,
- Dummy)
- self.assertEqual(mapper.decorate_context, False)
-
def test_no_route_matches(self):
marker = ()
get_root = make_get_root(marker)
diff --git a/repoze/bfg/urldispatch.py b/repoze/bfg/urldispatch.py
index 7f1431819..612843cfa 100644
--- a/repoze/bfg/urldispatch.py
+++ b/repoze/bfg/urldispatch.py
@@ -55,11 +55,7 @@ class RoutesRootFactory(Mapper):
kw['explicit'] = True
Mapper.__init__(self, **kw)
self._regs_created = False
- context_factory = queryUtility(IRoutesContextFactory,
- default=DefaultRoutesContext)
- if IRoutesContext.implementedBy(context_factory):
- self.decorate_context = False
- self.default_context_factory = context_factory
+ self.default_context_factory = DefaultRoutesContext
def has_routes(self):
return bool(self.matchlist)