diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-07-03 00:10:10 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-07-03 00:10:10 +0000 |
| commit | 3ae9bdc483e9f78587c6ab9afef5185e4e7d83bb (patch) | |
| tree | b1703690f97546a595cd5f5ee8b3577161a29a93 | |
| parent | 611d270f161c02b580605bcdd0b5141cea3e7109 (diff) | |
| download | pyramid-3ae9bdc483e9f78587c6ab9afef5185e4e7d83bb.tar.gz pyramid-3ae9bdc483e9f78587c6ab9afef5185e4e7d83bb.tar.bz2 pyramid-3ae9bdc483e9f78587c6ab9afef5185e4e7d83bb.zip | |
- Fix ``configure_zcml`` filespec check on Windows. Previously if an
absolute filesystem path including a drive letter was passed as
``filename`` (or as ``configure_zcml`` in the options dict) to
``repoze.bfg.router.make_app``, it would be treated as a
package:resource_name specification.
| -rw-r--r-- | CHANGES.txt | 6 | ||||
| -rw-r--r-- | repoze/bfg/router.py | 11 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_router.py | 65 |
3 files changed, 54 insertions, 28 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 07633e58d..bba2a307f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,12 @@ Next release ============ +- Fix ``configure_zcml`` filespec check on Windows. Previously if an + absolute filesystem path including a drive letter was passed as + ``filename`` (or as ``configure_zcml`` in the options dict) to + ``repoze.bfg.router.make_app``, it would be treated as a + package:resource_name specification. + - Fix inaccuracies and import errors in bfgwiki (traversal+ZODB) and bfgwiki2 (urldispatch+SA) tutorials. diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index 5addef933..ac8a1faaa 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -1,4 +1,5 @@ -from cgi import escape +import cgi +import os import sys from webob import Response @@ -183,7 +184,7 @@ class Router(object): def default_view(context, request, status): try: - msg = escape(request.environ['repoze.bfg.message']) + msg = cgi.escape(request.environ['repoze.bfg.message']) except KeyError: msg = '' html = """ @@ -211,8 +212,8 @@ def default_notfound_view(context, request): def make_app(root_factory, package=None, filename='configure.zcml', authentication_policy=None, authorization_policy=None, options=None, registry=None, debug_logger=None, - manager=manager): - # registry, debug_logger and manager *only* for unittests + manager=manager, os=os): + # registry, debug_logger, manager and os *only* for unittests """ Return a Router object, representing a fully configured ``repoze.bfg`` WSGI application. @@ -281,7 +282,7 @@ def make_app(root_factory, package=None, filename='configure.zcml', settings = Settings(get_options(options)) filename = settings['configure_zcml'] - if ':' in filename: + if (':' in filename) and (not os.path.isabs(filename)): package, filename = filename.split(':', 1) __import__(package) package = sys.modules[package] diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index e3b200c57..8c3e23c91 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -674,8 +674,8 @@ class MakeAppTests(unittest.TestCase): def test_fixtureapp_default_filename_withpackage(self): manager = DummyRegistryManager() from repoze.bfg.tests import fixtureapp - rootpolicy = DummyRootFactory(None) - app = self._callFUT(rootpolicy, fixtureapp, manager=manager) + rootfactory = DummyRootFactory(None) + app = self._callFUT(rootfactory, fixtureapp, manager=manager) self.assertEqual(app.registry.__name__, 'repoze.bfg.tests.fixtureapp') from repoze.bfg.tests.fixtureapp.models import IFixture self.failUnless(app.registry.queryUtility(IFixture)) # only in c.zcml @@ -683,8 +683,8 @@ class MakeAppTests(unittest.TestCase): def test_fixtureapp_explicit_filename(self): manager = DummyRegistryManager() from repoze.bfg.tests import fixtureapp - rootpolicy = DummyRootFactory(None) - app = self._callFUT(rootpolicy, fixtureapp, filename='another.zcml', + rootfactory = DummyRootFactory(None) + app = self._callFUT(rootfactory, fixtureapp, filename='another.zcml', manager=manager) self.assertEqual(app.registry.__name__, 'repoze.bfg.tests.fixtureapp') from repoze.bfg.tests.fixtureapp.models import IFixture @@ -693,11 +693,11 @@ class MakeAppTests(unittest.TestCase): def test_fixtureapp_explicit_filename_in_options(self): import os manager = DummyRegistryManager() - rootpolicy = DummyRootFactory(None) + rootfactory = DummyRootFactory(None) from repoze.bfg.tests import fixtureapp zcmlfile = os.path.join(os.path.dirname(fixtureapp.__file__), 'another.zcml') - app = self._callFUT(rootpolicy, fixtureapp, filename='configure.zcml', + app = self._callFUT(rootfactory, fixtureapp, filename='configure.zcml', options={'configure_zcml':zcmlfile}, manager=manager) self.assertEqual(app.registry.__name__, 'repoze.bfg.tests.fixtureapp') @@ -706,16 +706,34 @@ class MakeAppTests(unittest.TestCase): def test_fixtureapp_explicit_specification_in_options(self): manager = DummyRegistryManager() - rootpolicy = DummyRootFactory(None) + rootfactory = DummyRootFactory(None) from repoze.bfg.tests import fixtureapp zcmlfile = 'repoze.bfg.tests.fixtureapp.subpackage:yetanother.zcml' - app = self._callFUT(rootpolicy, fixtureapp, filename='configure.zcml', + app = self._callFUT(rootfactory, fixtureapp, filename='configure.zcml', options={'configure_zcml':zcmlfile}, manager=manager) self.assertEqual(app.registry.__name__, 'repoze.bfg.tests.fixtureapp.subpackage') from repoze.bfg.tests.fixtureapp.models import IFixture self.failIf(app.registry.queryUtility(IFixture)) # only in c.zcml + + def test_fixtureapp_filename_hascolon_isabs(self): + manager = DummyRegistryManager() + rootfactory = DummyRootFactory(None) + from repoze.bfg.tests import fixtureapp + zcmlfile = 'repoze.bfg.tests.fixtureapp.subpackage:yetanother.zcml' + class Dummy: + def isabs(self, name): + return True + os = Dummy() + os.path = Dummy() + self.assertRaises(IOError, self._callFUT, + rootfactory, + fixtureapp, + filename='configure.zcml', + options={'configure_zcml':zcmlfile}, + manager=manager, + os=os) def test_event(self): manager = DummyRegistryManager() @@ -728,16 +746,16 @@ class MakeAppTests(unittest.TestCase): (IWSGIApplicationCreatedEvent,) ) from repoze.bfg.tests import fixtureapp - rootpolicy = DummyRootFactory(None) - app = self._callFUT(rootpolicy, fixtureapp, manager=manager) + rootfactory = DummyRootFactory(None) + app = self._callFUT(rootfactory, fixtureapp, manager=manager) assert app.created is True def test_custom_settings(self): manager = DummyRegistryManager() options= {'mysetting':True} from repoze.bfg.tests import fixtureapp - rootpolicy = DummyRootFactory(None) - app = self._callFUT(rootpolicy, fixtureapp, options=options, + rootfactory = DummyRootFactory(None) + app = self._callFUT(rootfactory, fixtureapp, options=options, manager=manager) from repoze.bfg.interfaces import ISettings settings = app.registry.getUtility(ISettings) @@ -750,8 +768,8 @@ class MakeAppTests(unittest.TestCase): options= {'reload_templates':True, 'debug_authorization':True} from repoze.bfg.tests import fixtureapp - rootpolicy = DummyRootFactory(None) - app = self._callFUT(rootpolicy, fixtureapp, options=options, + rootfactory = DummyRootFactory(None) + app = self._callFUT(rootfactory, fixtureapp, options=options, manager=manager) from repoze.bfg.interfaces import ISettings from repoze.bfg.interfaces import ILogger @@ -762,32 +780,33 @@ class MakeAppTests(unittest.TestCase): self.assertEqual(logger.name, 'repoze.bfg.debug') self.assertEqual(settings.reload_templates, True) self.assertEqual(settings.debug_authorization, True) - self.assertEqual(rootfactory, rootpolicy) + self.assertEqual(rootfactory, rootfactory) self.failUnless(manager.pushed and manager.popped) - def test_routes_in_config_with_rootpolicy(self): + def test_routes_in_config_with_rootfactory(self): manager = DummyRegistryManager() options= {'reload_templates':True, 'debug_authorization':True} from repoze.bfg.urldispatch import RoutesRootFactory from repoze.bfg.tests import routesapp - rootpolicy = DummyRootFactory(None) - app = self._callFUT(rootpolicy, routesapp, options=options, + rootfactory = DummyRootFactory(None) + app = self._callFUT(rootfactory, routesapp, options=options, manager=manager) 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) + effective_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.failUnless(isinstance(rootfactory, RoutesRootFactory)) - self.assertEqual(rootfactory.default_root_factory, rootpolicy) + self.failUnless(isinstance(effective_rootfactory, RoutesRootFactory)) + self.assertEqual(effective_rootfactory.default_root_factory, + rootfactory) self.failUnless(manager.pushed and manager.popped) - def test_routes_in_config_no_rootpolicy(self): + def test_routes_in_config_no_rootfactory(self): manager = DummyRegistryManager() options= {'reload_templates':True, 'debug_authorization':True} @@ -809,7 +828,7 @@ class MakeAppTests(unittest.TestCase): self.assertEqual(rootfactory.default_root_factory, DefaultRootFactory) self.failUnless(manager.pushed and manager.popped) - def test_no_routes_in_config_no_rootpolicy(self): + def test_no_routes_in_config_no_rootfactory(self): manager = DummyRegistryManager() from repoze.bfg.router import DefaultRootFactory from repoze.bfg.interfaces import IRootFactory |
