summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-07-03 00:10:10 +0000
committerChris McDonough <chrism@agendaless.com>2009-07-03 00:10:10 +0000
commit3ae9bdc483e9f78587c6ab9afef5185e4e7d83bb (patch)
treeb1703690f97546a595cd5f5ee8b3577161a29a93
parent611d270f161c02b580605bcdd0b5141cea3e7109 (diff)
downloadpyramid-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.txt6
-rw-r--r--repoze/bfg/router.py11
-rw-r--r--repoze/bfg/tests/test_router.py65
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