From 358dc276d28fb395a9a742ff53dc66ee115c58ad Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sun, 11 Jan 2009 02:20:52 +0000 Subject: Merge router-simplify branch. Changelog below. Bug Fixes --------- - Fix a bug where the Paste configuration's ``unicode_path_segments`` (and os.environ's ``BFG_UNICODE_PATH_SEGMENTS``) may have been defaulting to false in some circumstances. It now always defaults to true, matching the documentation and intent. - The ``repoze.bfg.traversal.find_model`` API did not work properly when passed a ``path`` argument which was unicode and contained high-order bytes when the ``unicode_path_segments`` or ``BFG_UNICODE_PATH_SEGMENTS`` configuration variables were "true". - A new module was added: ``repoze.bfg.settings``. This contains deployment-settings-related code. Behavior Changes ---------------- - The ``make_app`` callable within ``repoze.bfg.router`` now registers the ``root_policy`` argument as a utility (unnamed, using the new ``repoze.bfg.interfaces.IRootFactory`` as a provides interface) rather than passing it as the first argument to the ``repoze.bfg.router.Router`` class. As a result the ``repoze.bfg.router.Router`` router class only accepts a single argument: ``registry``. The ``repoze.bfg.router.Router`` class retrieves the root policy via a utility lookup now. The ``repoze.bfg.router.make_app`` API also now performs some important application registrations that were previously handled inside ``repoze.bfg.registry.makeRegistry``. - The ``repoze.bfg.settings.Settings`` class (an instance of which is registered as a utility providing ``repoze.bfg.interfaces.ISettings`` when any application is started) now automatically calls ``repoze.bfg.settings.get_options`` on the options passed to its constructor. This means that usage of ``get_options`` within an application's ``make_app`` function is no longer required (the "raw" ``options`` dict or None may be passed). Deprecations ------------ - Moved the ``repoze.bfg.registry.Settings`` class. This has been moved to ``repoze.bfg.settings.Settings``. A deprecation warning is issued when it is imported from the older location. - Moved the ``repoze.bfg.registry.get_options`` function This has been moved to ``repoze.bfg.settings.get_options``. A deprecation warning is issued when it is imported from the older location. - The ``repoze.bfg.interfaces.IRootPolicy`` interface was renamed within the interfaces package. It has been renamed to ``IRootFactory``. A deprecation warning is issued when it is imported from the older location. --- repoze/bfg/tests/test_registry.py | 129 ------------------------------------- repoze/bfg/tests/test_router.py | 111 ++++++++++++++++++++----------- repoze/bfg/tests/test_settings.py | 121 ++++++++++++++++++++++++++++++++++ repoze/bfg/tests/test_template.py | 80 +++++++++-------------- repoze/bfg/tests/test_traversal.py | 20 ++++++ 5 files changed, 245 insertions(+), 216 deletions(-) create mode 100644 repoze/bfg/tests/test_settings.py (limited to 'repoze/bfg/tests') diff --git a/repoze/bfg/tests/test_registry.py b/repoze/bfg/tests/test_registry.py index 9bf09399f..0d051c131 100644 --- a/repoze/bfg/tests/test_registry.py +++ b/repoze/bfg/tests/test_registry.py @@ -23,144 +23,15 @@ class TestMakeRegistry(unittest.TestCase, PlacelessSetup): old = repoze.bfg.registry.setRegistryManager(dummyregmgr) registry = makeRegistry('configure.zcml', fixtureapp, - options={'reload_templates':True, - 'debug_authorization':True}, lock=dummylock) from zope.component.registry import Components self.failUnless(isinstance(registry, Components)) self.assertEqual(dummylock.acquired, True) self.assertEqual(dummylock.released, True) self.assertEqual(dummyregmgr.registry, registry) - from zope.component import getUtility - from repoze.bfg.interfaces import ISettings - from repoze.bfg.interfaces import ILogger - settings = getUtility(ISettings) - logger = getUtility(ILogger, name='repoze.bfg.debug') - self.assertEqual(logger.name, 'repoze.bfg.debug') - self.assertEqual(settings.reload_templates, True) - self.assertEqual(settings.debug_authorization, True) finally: repoze.bfg.registry.setRegistryManager(old) -class TestGetOptions(unittest.TestCase): - def _getFUT(self): - from repoze.bfg.registry import get_options - return get_options - - def test_reload_templates(self): - get_options = self._getFUT() - result = get_options({}) - self.assertEqual(result['reload_templates'], False) - result = get_options({'reload_templates':'false'}) - self.assertEqual(result['reload_templates'], False) - result = get_options({'reload_templates':'t'}) - self.assertEqual(result['reload_templates'], True) - result = get_options({'reload_templates':'1'}) - self.assertEqual(result['reload_templates'], True) - result = get_options({}, {'BFG_RELOAD_TEMPLATES':'1'}) - self.assertEqual(result['reload_templates'], True) - result = get_options({'reload_templates':'false'}, - {'BFG_RELOAD_TEMPLATES':'1'}) - self.assertEqual(result['reload_templates'], True) - - def test_debug_authorization(self): - get_options = self._getFUT() - result = get_options({}) - self.assertEqual(result['debug_authorization'], False) - result = get_options({'debug_authorization':'false'}) - self.assertEqual(result['debug_authorization'], False) - result = get_options({'debug_authorization':'t'}) - self.assertEqual(result['debug_authorization'], True) - result = get_options({'debug_authorization':'1'}) - self.assertEqual(result['debug_authorization'], True) - result = get_options({}, {'BFG_DEBUG_AUTHORIZATION':'1'}) - self.assertEqual(result['debug_authorization'], True) - result = get_options({'debug_authorization':'false'}, - {'BFG_DEBUG_AUTHORIZATION':'1'}) - self.assertEqual(result['debug_authorization'], True) - - def test_debug_notfound(self): - get_options = self._getFUT() - result = get_options({}) - self.assertEqual(result['debug_notfound'], False) - result = get_options({'debug_notfound':'false'}) - self.assertEqual(result['debug_notfound'], False) - result = get_options({'debug_notfound':'t'}) - self.assertEqual(result['debug_notfound'], True) - result = get_options({'debug_notfound':'1'}) - self.assertEqual(result['debug_notfound'], True) - result = get_options({}, {'BFG_DEBUG_NOTFOUND':'1'}) - self.assertEqual(result['debug_notfound'], True) - result = get_options({'debug_notfound':'false'}, - {'BFG_DEBUG_NOTFOUND':'1'}) - self.assertEqual(result['debug_notfound'], True) - - def test_debug_all(self): - get_options = self._getFUT() - result = get_options({}) - self.assertEqual(result['debug_notfound'], False) - self.assertEqual(result['debug_authorization'], False) - result = get_options({'debug_all':'false'}) - self.assertEqual(result['debug_notfound'], False) - self.assertEqual(result['debug_authorization'], False) - result = get_options({'debug_all':'t'}) - self.assertEqual(result['debug_notfound'], True) - self.assertEqual(result['debug_authorization'], True) - result = get_options({'debug_all':'1'}) - self.assertEqual(result['debug_notfound'], True) - self.assertEqual(result['debug_authorization'], True) - result = get_options({}, {'BFG_DEBUG_ALL':'1'}) - self.assertEqual(result['debug_notfound'], True) - self.assertEqual(result['debug_authorization'], True) - result = get_options({'debug_all':'false'}, - {'BFG_DEBUG_ALL':'1'}) - self.assertEqual(result['debug_notfound'], True) - self.assertEqual(result['debug_authorization'], True) - - def test_unicode_path_segments(self): - get_options = self._getFUT() - result = get_options({}) - self.assertEqual(result['unicode_path_segments'], False) - result = get_options({'unicode_path_segments':'false'}) - self.assertEqual(result['unicode_path_segments'], False) - result = get_options({'unicode_path_segments':'t'}) - self.assertEqual(result['unicode_path_segments'], True) - result = get_options({'unicode_path_segments':'1'}) - self.assertEqual(result['unicode_path_segments'], True) - result = get_options({}, {'BFG_UNICODE_PATH_SEGMENTS':'1'}) - self.assertEqual(result['unicode_path_segments'], True) - result = get_options({'unicode_path_segments':'false'}, - {'BFG_UNICODE_PATH_SEGMENTS':'1'}) - self.assertEqual(result['unicode_path_segments'], True) - - def test_originals_kept(self): - get_options = self._getFUT() - result = get_options({'a':'i am so a'}) - self.assertEqual(result['a'], 'i am so a') - -class TestSettings(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.registry import Settings - return Settings - - def _makeOne(self, **options): - klass = self._getTargetClass() - return klass(options) - - def test_no_options(self): - settings = self._makeOne() - self.assertEqual(settings.reload_templates, False) - self.assertEqual(settings.debug_notfound, False) - self.assertEqual(settings.debug_authorization, False) - self.assertEqual(settings.unicode_path_segments, True) - - def test_with_option(self): - settings = self._makeOne(reload_templates=True) - self.assertEqual(settings.reload_templates, True) - self.assertEqual(settings.debug_notfound, False) - self.assertEqual(settings.debug_authorization, False) - self.assertEqual(settings.unicode_path_segments, True) - class TestThreadLocalRegistryManager(unittest.TestCase, PlacelessSetup): def setUp(self): PlacelessSetup.setUp(self) diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index 43dc98176..3f52bd9cd 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -65,6 +65,12 @@ class RouterTests(unittest.TestCase, PlacelessSetup): gsm = zope.component.getGlobalSiteManager() gsm.registerHandler(listener, (iface,)) + def _registerRootFactory(self, root_factory): + import zope.component + gsm = zope.component.getGlobalSiteManager() + from repoze.bfg.interfaces import IRootFactory + gsm.registerUtility(root_factory, IRootFactory) + def _getTargetClass(self): from repoze.bfg.router import Router return Router @@ -84,13 +90,14 @@ class RouterTests(unittest.TestCase, PlacelessSetup): return environ def test_call_no_view_registered_no_isettings(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) environ = self._makeEnviron() context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) self._registerTraverserFactory(traversalfactory, '', None) logger = self._registerLogger() - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) headers = start_response.headers @@ -102,14 +109,15 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(len(logger.messages), 0) def test_call_no_view_registered_debug_notfound_false(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) environ = self._makeEnviron() context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) self._registerTraverserFactory(traversalfactory, '', None) logger = self._registerLogger() self._registerSettings(debug_notfound=False) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) headers = start_response.headers @@ -121,14 +129,15 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(len(logger.messages), 0) def test_call_no_view_registered_debug_notfound_true(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) environ = self._makeEnviron() context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) self._registerTraverserFactory(traversalfactory, '', None) self._registerSettings(debug_notfound=True) logger = self._registerLogger() - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) headers = start_response.headers @@ -150,7 +159,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.failUnless("subpath: []" in message) def test_call_view_registered_nonspecific_default_path(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) response = DummyResponse() @@ -159,7 +168,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): environ = self._makeEnviron() self._registerTraverserFactory(traversalfactory, '', None) self._registerView(view, '', None, None) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -171,7 +181,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(environ['webob.adhoc_attrs']['root'], None) def test_call_view_registered_nonspecific_nondefault_path_and_subpath(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) context = DummyContext() traversalfactory = make_traversal_factory(context, 'foo', ['bar']) response = DummyResponse() @@ -180,7 +190,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): environ = self._makeEnviron() self._registerTraverserFactory(traversalfactory, '', None) self._registerView(view, 'foo', None, None) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -192,7 +203,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(environ['webob.adhoc_attrs']['root'], None) def test_call_view_registered_specific_success(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -207,7 +218,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): environ = self._makeEnviron() self._registerTraverserFactory(traversalfactory, '', None) self._registerView(view, '', IContext, IRequest) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -219,7 +231,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(environ['webob.adhoc_attrs']['root'], None) def test_call_view_registered_specific_fail(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -235,14 +247,15 @@ class RouterTests(unittest.TestCase, PlacelessSetup): environ = self._makeEnviron() self._registerTraverserFactory(traversalfactory, '', None) self._registerView(view, '', IContext, IRequest) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '404 Not Found') self.failUnless('404' in result[0]) def test_call_view_registered_security_policy_permission_none(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -258,13 +271,14 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerView(view, '', IContext, IRequest) secpol = DummySecurityPolicy() self._registerSecurityPolicy(secpol) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '200 OK') def test_call_view_registered_security_policy_permission_succeeds(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -282,14 +296,15 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerView(view, '', IContext, IRequest) self._registerSecurityPolicy(secpol) self._registerPermission(permissionfactory, '', IContext, IRequest) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '200 OK') self.assertEqual(permissionfactory.checked_with, secpol) def test_call_view_permission_fails_nosettings(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -310,7 +325,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerView(view, '', IContext, IRequest) self._registerSecurityPolicy(secpol) self._registerPermission(permissionfactory, '', IContext, IRequest) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '401 Unauthorized') @@ -319,7 +335,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(permissionfactory.checked_with, secpol) def test_call_view_permission_fails_no_debug_auth(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -341,7 +357,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerSecurityPolicy(secpol) self._registerPermission(permissionfactory, '', IContext, IRequest) self._registerSettings(debug_authorization=False) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '401 Unauthorized') @@ -350,7 +367,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(permissionfactory.checked_with, secpol) def test_call_view_permission_fails_with_debug_auth(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -373,7 +390,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerPermission(permissionfactory, '', IContext, IRequest) self._registerSettings(debug_authorization=True) logger = self._registerLogger() - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '401 Unauthorized') @@ -395,7 +413,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): "for principals ['principals']" in logged) def test_call_eventsends(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) response = DummyResponse() @@ -414,7 +432,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): response_events.append(event) self._registerEventListener(handle_request, INewRequest) self._registerEventListener(handle_response, INewResponse) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(len(request_events), 1) @@ -429,17 +448,15 @@ class MakeAppTests(unittest.TestCase, PlacelessSetup): def tearDown(self): PlacelessSetup.tearDown(self) - def _getFUT(self): + def _callFUT(self, *arg, **kw): from repoze.bfg.router import make_app - return make_app + return make_app(*arg, **kw) def test_fixtureapp(self): from repoze.bfg.tests import fixtureapp - make_app = self._getFUT() - rootpolicy = make_rootpolicy(None) - app = make_app(rootpolicy, fixtureapp) + rootpolicy = make_rootfactory(None) + app = self._callFUT(rootpolicy, fixtureapp) self.assertEqual(app.registry.__name__, 'repoze.bfg.tests.fixtureapp') - self.assertEqual(app.root_policy, rootpolicy) def test_event(self): def subscriber(event): @@ -455,13 +472,35 @@ class MakeAppTests(unittest.TestCase, PlacelessSetup): ) try: from repoze.bfg.tests import fixtureapp - make_app = self._getFUT() - rootpolicy = make_rootpolicy(None) - app = make_app(rootpolicy, fixtureapp) + rootpolicy = make_rootfactory(None) + app = self._callFUT(rootpolicy, fixtureapp) assert app.created is True finally: repoze.bfg.router.registry_manager = old_registry_manager + def test_registrations(self): + options= {'reload_templates':True, + 'debug_authorization':True} + import repoze.bfg.router + old_registry_manager = repoze.bfg.router.registry_manager + repoze.bfg.router.registry_manager = DummyRegistryManager() + try: + from repoze.bfg.tests import fixtureapp + rootpolicy = make_rootfactory(None) + app = self._callFUT(rootpolicy, fixtureapp, options=options) + from repoze.bfg.interfaces import ISettings + from repoze.bfg.interfaces import ILogger + from repoze.bfg.interfaces import IRootFactory + settings = app.registry.getUtility(ISettings) + logger = app.registry.getUtility(ILogger, name='repoze.bfg.debug') + rootfactory = app.registry.getUtility(IRootFactory) + self.assertEqual(logger.name, 'repoze.bfg.debug') + self.assertEqual(settings.reload_templates, True) + self.assertEqual(settings.debug_authorization, True) + self.assertEqual(rootfactory, rootpolicy) + finally: + repoze.bfg.router.registry_manager = old_registry_manager + class DummyRegistryManager: def set(self, registry): pass @@ -516,7 +555,7 @@ def make_permission_factory(result): return 'permission' return DummyPermissionFactory -def make_rootpolicy(root): +def make_rootfactory(root): def rootpolicy(environ): return root return rootpolicy diff --git a/repoze/bfg/tests/test_settings.py b/repoze/bfg/tests/test_settings.py new file mode 100644 index 000000000..1d1eb08ea --- /dev/null +++ b/repoze/bfg/tests/test_settings.py @@ -0,0 +1,121 @@ +import unittest + +class TestSettings(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.settings import Settings + return Settings + + def _makeOne(self, **options): + klass = self._getTargetClass() + return klass(options) + + def test_no_options(self): + settings = self._makeOne() + self.assertEqual(settings.reload_templates, False) + self.assertEqual(settings.debug_notfound, False) + self.assertEqual(settings.debug_authorization, False) + self.assertEqual(settings.unicode_path_segments, True) + + def test_with_option(self): + settings = self._makeOne(reload_templates=True) + self.assertEqual(settings.reload_templates, True) + self.assertEqual(settings.debug_notfound, False) + self.assertEqual(settings.debug_authorization, False) + self.assertEqual(settings.unicode_path_segments, True) + +class TestGetOptions(unittest.TestCase): + def _getFUT(self): + from repoze.bfg.settings import get_options + return get_options + + def test_reload_templates(self): + get_options = self._getFUT() + result = get_options({}) + self.assertEqual(result['reload_templates'], False) + result = get_options({'reload_templates':'false'}) + self.assertEqual(result['reload_templates'], False) + result = get_options({'reload_templates':'t'}) + self.assertEqual(result['reload_templates'], True) + result = get_options({'reload_templates':'1'}) + self.assertEqual(result['reload_templates'], True) + result = get_options({}, {'BFG_RELOAD_TEMPLATES':'1'}) + self.assertEqual(result['reload_templates'], True) + result = get_options({'reload_templates':'false'}, + {'BFG_RELOAD_TEMPLATES':'1'}) + self.assertEqual(result['reload_templates'], True) + + def test_debug_authorization(self): + get_options = self._getFUT() + result = get_options({}) + self.assertEqual(result['debug_authorization'], False) + result = get_options({'debug_authorization':'false'}) + self.assertEqual(result['debug_authorization'], False) + result = get_options({'debug_authorization':'t'}) + self.assertEqual(result['debug_authorization'], True) + result = get_options({'debug_authorization':'1'}) + self.assertEqual(result['debug_authorization'], True) + result = get_options({}, {'BFG_DEBUG_AUTHORIZATION':'1'}) + self.assertEqual(result['debug_authorization'], True) + result = get_options({'debug_authorization':'false'}, + {'BFG_DEBUG_AUTHORIZATION':'1'}) + self.assertEqual(result['debug_authorization'], True) + + def test_debug_notfound(self): + get_options = self._getFUT() + result = get_options({}) + self.assertEqual(result['debug_notfound'], False) + result = get_options({'debug_notfound':'false'}) + self.assertEqual(result['debug_notfound'], False) + result = get_options({'debug_notfound':'t'}) + self.assertEqual(result['debug_notfound'], True) + result = get_options({'debug_notfound':'1'}) + self.assertEqual(result['debug_notfound'], True) + result = get_options({}, {'BFG_DEBUG_NOTFOUND':'1'}) + self.assertEqual(result['debug_notfound'], True) + result = get_options({'debug_notfound':'false'}, + {'BFG_DEBUG_NOTFOUND':'1'}) + self.assertEqual(result['debug_notfound'], True) + + def test_debug_all(self): + get_options = self._getFUT() + result = get_options({}) + self.assertEqual(result['debug_notfound'], False) + self.assertEqual(result['debug_authorization'], False) + result = get_options({'debug_all':'false'}) + self.assertEqual(result['debug_notfound'], False) + self.assertEqual(result['debug_authorization'], False) + result = get_options({'debug_all':'t'}) + self.assertEqual(result['debug_notfound'], True) + self.assertEqual(result['debug_authorization'], True) + result = get_options({'debug_all':'1'}) + self.assertEqual(result['debug_notfound'], True) + self.assertEqual(result['debug_authorization'], True) + result = get_options({}, {'BFG_DEBUG_ALL':'1'}) + self.assertEqual(result['debug_notfound'], True) + self.assertEqual(result['debug_authorization'], True) + result = get_options({'debug_all':'false'}, + {'BFG_DEBUG_ALL':'1'}) + self.assertEqual(result['debug_notfound'], True) + self.assertEqual(result['debug_authorization'], True) + + def test_unicode_path_segments(self): + get_options = self._getFUT() + result = get_options({}) + self.assertEqual(result['unicode_path_segments'], True) + result = get_options({'unicode_path_segments':'false'}) + self.assertEqual(result['unicode_path_segments'], False) + result = get_options({'unicode_path_segments':'t'}) + self.assertEqual(result['unicode_path_segments'], True) + result = get_options({'unicode_path_segments':'1'}) + self.assertEqual(result['unicode_path_segments'], True) + result = get_options({}, {'BFG_UNICODE_PATH_SEGMENTS':'1'}) + self.assertEqual(result['unicode_path_segments'], True) + result = get_options({'unicode_path_segments':'false'}, + {'BFG_UNICODE_PATH_SEGMENTS':'1'}) + self.assertEqual(result['unicode_path_segments'], True) + + def test_originals_kept(self): + get_options = self._getFUT() + result = get_options({'a':'i am so a'}) + self.assertEqual(result['a'], 'i am so a') + diff --git a/repoze/bfg/tests/test_template.py b/repoze/bfg/tests/test_template.py index 31aa074d8..8d16972b8 100644 --- a/repoze/bfg/tests/test_template.py +++ b/repoze/bfg/tests/test_template.py @@ -1,18 +1,18 @@ import unittest -from zope.component.testing import PlacelessSetup +from zope.testing.cleanup import cleanUp -class Base(PlacelessSetup): +class Base(object): def setUp(self): - from zope.deprecation import __show__ - __show__.off() - PlacelessSetup.setUp(self) + cleanUp() + import warnings + warnings.simplefilter('ignore') def tearDown(self): - from zope.deprecation import __show__ - __show__.on() - PlacelessSetup.tearDown(self) - + cleanUp() + import warnings + warnings.resetwarnings() + def _zcmlConfigure(self): import repoze.bfg.includes import zope.configuration.xmlconfig @@ -24,42 +24,28 @@ class Base(PlacelessSetup): here = os.path.abspath(os.path.dirname(__file__)) return os.path.join(here, 'fixtures', name) -class RenderTemplateTests(unittest.TestCase, Base): - def setUp(self): - Base.setUp(self) - - def tearDown(self): - Base.tearDown(self) - - def _getFUT(self): +class RenderTemplateTests(Base, unittest.TestCase): + def _callFUT(self, *arg, **kw): from repoze.bfg.template import render_template - return render_template + return render_template(*arg, **kw) def test_it(self): self._zcmlConfigure() minimal = self._getTemplatePath('minimal.pt') - render = self._getFUT() - result = render(minimal) + result = self._callFUT(minimal) self.failUnless(isinstance(result, str)) self.assertEqual(result, '
\n
') -class RenderTemplateToResponseTests(unittest.TestCase, Base): - def setUp(self): - Base.setUp(self) - - def tearDown(self): - Base.tearDown(self) - - def _getFUT(self): +class RenderTemplateToResponseTests(Base, unittest.TestCase): + def _callFUT(self, *arg, **kw): from repoze.bfg.template import render_template_to_response - return render_template_to_response + return render_template_to_response(*arg, **kw) def test_it(self): self._zcmlConfigure() minimal = self._getTemplatePath('minimal.pt') - render = self._getFUT() - result = render(minimal) + result = self._callFUT(minimal) from webob import Response self.failUnless(isinstance(result, Response)) self.assertEqual(result.app_iter, @@ -67,45 +53,37 @@ class RenderTemplateToResponseTests(unittest.TestCase, Base): self.assertEqual(result.status, '200 OK') self.assertEqual(len(result.headerlist), 2) -class GetTemplateTests(unittest.TestCase, Base): - def setUp(self): - Base.setUp(self) - - def tearDown(self): - Base.tearDown(self) - - def _getFUT(self): +class GetTemplateTests(Base, unittest.TestCase): + def _callFUT(self, *arg, **kw): from repoze.bfg.template import get_template - return get_template + return get_template(*arg, **kw) def test_nonabs_registered(self): self._zcmlConfigure() from zope.component import getGlobalSiteManager from zope.component import queryUtility from repoze.bfg.chameleon_zpt import ZPTTemplateFactory - from repoze.bfg.interfaces import ITemplate + from repoze.bfg.interfaces import ITemplateRenderer minimal = self._getTemplatePath('minimal.pt') utility = ZPTTemplateFactory(minimal) gsm = getGlobalSiteManager() - gsm.registerUtility(utility, ITemplate, name=minimal) - get = self._getFUT() - result = get(minimal) + gsm.registerUtility(utility, ITemplateRenderer, name=minimal) + result = self._callFUT(minimal) self.assertEqual(result.filename, minimal) - self.assertEqual(queryUtility(ITemplate, minimal), utility) + self.assertEqual(queryUtility(ITemplateRenderer, minimal), utility) def test_nonabs_unregistered(self): self._zcmlConfigure() from zope.component import getGlobalSiteManager from zope.component import queryUtility from repoze.bfg.chameleon_zpt import ZPTTemplateFactory - from repoze.bfg.interfaces import ITemplate + from repoze.bfg.interfaces import ITemplateRenderer minimal = self._getTemplatePath('minimal.pt') - self.assertEqual(queryUtility(ITemplate, minimal), None) + self.assertEqual(queryUtility(ITemplateRenderer, minimal), None) utility = ZPTTemplateFactory(minimal) gsm = getGlobalSiteManager() - gsm.registerUtility(utility, ITemplate, name=minimal) - get = self._getFUT() - result = get(minimal) + gsm.registerUtility(utility, ITemplateRenderer, name=minimal) + result = self._callFUT(minimal) self.assertEqual(result.filename, minimal) - self.assertEqual(queryUtility(ITemplate, minimal), utility) + self.assertEqual(queryUtility(ITemplateRenderer, minimal), utility) diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py index dcb47e6ed..12c7d3741 100644 --- a/repoze/bfg/tests/test_traversal.py +++ b/repoze/bfg/tests/test_traversal.py @@ -292,6 +292,24 @@ class FindModelTests(unittest.TestCase): self.assertRaises(KeyError, self._callFUT, baz, '/') self.assertEqual(dummy.wascontext, True) + def test_unicode_pathinfo_converted_to_utf8(self): + la = unicode('LaPe\xc3\xb1a', 'utf-8') + + dummy = DummyContext() + dummy.__parent__ = None + dummy.__name__ = None + baz = DummyContext() + baz.__parent__ = dummy + baz.__name__ = la + + traverser = make_traverser(baz, '', []) + self._registerTraverserFactory(traverser) + path = '/' + la + result = self._callFUT(baz, path) + self.assertEqual(result, baz) + self.assertEqual(dummy.wascontext, True) + self.assertEqual(dummy.environ['PATH_INFO'], path.encode('utf-8')) + class ModelPathTests(unittest.TestCase): def _callFUT(self, model, *elements): from repoze.bfg.traversal import model_path @@ -335,8 +353,10 @@ class ModelPathTests(unittest.TestCase): def make_traverser(*args): class DummyTraverser(object): def __init__(self, context): + self.context = context context.wascontext = True def __call__(self, environ): + self.context.environ = environ return args return DummyTraverser -- cgit v1.2.3