From 81a833da2adff04d11b9228406bbc1528be65c64 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sat, 24 Jul 2010 07:04:49 +0000 Subject: - A new method of the ``Configurator`` exists: ``set_request_factory``. If used, this method will set the factory used by the :mod:`repoze.bfg` router to create all request objects. - The ``Configurator`` constructor takes an additional argument: ``request_factory``. If used, this argument will set the factory used by the :mod:`repoze.bfg` router to create all request objects. - The ``Hooks`` narrative chapter now contains a section about changing the request factory. --- repoze/bfg/tests/test_configuration.py | 15 +++++++++++++++ repoze/bfg/tests/test_paster.py | 6 +++++- repoze/bfg/tests/test_router.py | 8 ++++++++ repoze/bfg/tests/test_scripting.py | 23 ++++++++++++++++++++++- repoze/bfg/tests/test_traversal.py | 14 ++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) (limited to 'repoze/bfg/tests') diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py index d5b212303..02fbc7a06 100644 --- a/repoze/bfg/tests/test_configuration.py +++ b/repoze/bfg/tests/test_configuration.py @@ -281,6 +281,15 @@ class ConfiguratorTests(unittest.TestCase): utility = reg.getUtility(ILocaleNegotiator) self.assertEqual(utility, 'abc') + def test_setup_registry_request_factory(self): + from repoze.bfg.registry import Registry + from repoze.bfg.interfaces import IRequestFactory + reg = Registry() + config = self._makeOne(reg) + config.setup_registry(request_factory='abc') + utility = reg.getUtility(IRequestFactory) + self.assertEqual(utility, 'abc') + def test_setup_registry_alternate_renderers(self): from repoze.bfg.registry import Registry from repoze.bfg.interfaces import IRendererFactory @@ -1896,6 +1905,12 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(config.registry.getUtility(ILocaleNegotiator), negotiator) + def test_set_request_factory(self): + from repoze.bfg.interfaces import IRequestFactory + config = self._makeOne() + config.set_request_factory('abc') + self.assertEqual(config.registry.getUtility(IRequestFactory), 'abc') + def test_add_translation_dirs_missing_dir(self): from repoze.bfg.exceptions import ConfigurationError config = self._makeOne() diff --git a/repoze/bfg/tests/test_paster.py b/repoze/bfg/tests/test_paster.py index 147e9854d..43837b5f0 100644 --- a/repoze/bfg/tests/test_paster.py +++ b/repoze/bfg/tests/test_paster.py @@ -144,7 +144,11 @@ class DummyIPShell(object): dummy_root = Dummy() -dummy_registry = Dummy() +class DummyRegistry(object): + def queryUtility(self, iface, default=None): + return default + +dummy_registry = DummyRegistry() class DummyInteractor: def __call__(self, banner, local): diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index 8702b9317..6e25b0584 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -118,6 +118,14 @@ class TestRouter(unittest.TestCase): router = self._makeOne() self.assertEqual(router.root_policy, rootfactory) + def test_request_factory(self): + from repoze.bfg.interfaces import IRequestFactory + class DummyRequestFactory(object): + pass + self.registry.registerUtility(DummyRequestFactory, IRequestFactory) + router = self._makeOne() + self.assertEqual(router.request_factory, DummyRequestFactory) + def test_call_traverser_default(self): from repoze.bfg.exceptions import NotFound environ = self._makeEnviron() diff --git a/repoze/bfg/tests/test_scripting.py b/repoze/bfg/tests/test_scripting.py index 4d45a6456..2663c4a0f 100644 --- a/repoze/bfg/tests/test_scripting.py +++ b/repoze/bfg/tests/test_scripting.py @@ -28,12 +28,33 @@ class TestGetRoot(unittest.TestCase): closer() self.assertEqual(len(app.threadlocal_manager.popped), 1) + def test_it_requestfactory_overridden(self): + app = DummyApp() + request = Dummy() + class DummyFactory(object): + @classmethod + def blank(cls, path): + return request + registry = DummyRegistry(DummyFactory) + app.registry = registry + root, closer = self._callFUT(app) + self.assertEqual(len(app.threadlocal_manager.pushed), 1) + pushed = app.threadlocal_manager.pushed[0] + self.assertEqual(pushed['request'], request) class Dummy: pass dummy_root = Dummy() -dummy_registry = Dummy() + +class DummyRegistry(object): + def __init__(self, result=None): + self.result = result + + def queryUtility(self, iface, default=None): + return self.result or default + +dummy_registry = DummyRegistry() class DummyApp: def __init__(self): diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py index 29f11dd40..a9727902e 100644 --- a/repoze/bfg/tests/test_traversal.py +++ b/repoze/bfg/tests/test_traversal.py @@ -938,6 +938,20 @@ class TraverseTests(unittest.TestCase): self.assertEqual(result['view_name'], '') self.assertEqual(result['context'], model) + def test_requestfactory_overridden(self): + from repoze.bfg.interfaces import IRequestFactory + from repoze.bfg.request import Request + from repoze.bfg.threadlocal import get_current_registry + reg = get_current_registry() + class MyRequest(Request): + pass + reg.registerUtility(MyRequest, IRequestFactory) + model = DummyContext() + traverser = make_traverser({'context':model, 'view_name':''}) + self._registerTraverser(traverser) + self._callFUT(model, ['']) + self.assertEqual(model.request.__class__, MyRequest) + class TestDefaultRootFactory(unittest.TestCase): def _getTargetClass(self): from repoze.bfg.traversal import DefaultRootFactory -- cgit v1.2.3