diff options
| author | Chris McDonough <chrism@agendaless.com> | 2008-07-12 22:39:52 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2008-07-12 22:39:52 +0000 |
| commit | 1115939b6d4e0367386e20100a53c97c811577ad (patch) | |
| tree | 5c18b671abdafc60261d8c000bf3578daf3bb43d | |
| parent | 09415724ee0078416199f0045920f83ab798004d (diff) | |
| download | pyramid-1115939b6d4e0367386e20100a53c97c811577ad.tar.gz pyramid-1115939b6d4e0367386e20100a53c97c811577ad.tar.bz2 pyramid-1115939b6d4e0367386e20100a53c97c811577ad.zip | |
Speculative: cause routers to accept an app_context (the zcml configuration context), so we can later enable an app-local component registry.
| -rw-r--r-- | repoze/bfg/configure.zcml | 8 | ||||
| -rw-r--r-- | repoze/bfg/router.py | 16 | ||||
| -rw-r--r-- | repoze/bfg/tests/fixtureapp/__init__.py | 1 | ||||
| -rw-r--r-- | repoze/bfg/tests/fixtureapp/configure.zcml | 14 | ||||
| -rw-r--r-- | repoze/bfg/tests/fixtureapp/models.py | 5 | ||||
| -rw-r--r-- | repoze/bfg/tests/fixtureapp/templates/fixture.pt | 6 | ||||
| -rw-r--r-- | repoze/bfg/tests/fixtureapp/views.py | 8 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_router.py | 35 |
8 files changed, 85 insertions, 8 deletions
diff --git a/repoze/bfg/configure.zcml b/repoze/bfg/configure.zcml index 0223e25ba..2a9eea9dc 100644 --- a/repoze/bfg/configure.zcml +++ b/repoze/bfg/configure.zcml @@ -4,6 +4,14 @@ <include package="z3c.pt" /> <include package="zope.security" file="meta.zcml"/> + <!-- enable when we figure out app-local registries + <adapter + factory=".router.app_component_registry" + provides="zope.component.interfaces.IComponentLookup" + for="zope.configuration.interfaces.IConfigurationContext" + /> + --> + <permission id="repoze.view" title="View" diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index c617efebf..599007833 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -13,8 +13,9 @@ from repoze.bfg.interfaces import IRequest _marker = () class Router: - def __init__(self, root_policy): + def __init__(self, root_policy, app_context): self.root_policy = root_policy + self.app_context = app_context def __call__(self, environ, start_response): request = Request(environ) @@ -34,9 +35,18 @@ class Router: IWSGIApplicationFactory) return app(environ, start_response) +# enable the below when we figure out app-local registries + +## def app_component_registry(app_context): +## registry = getattr(app_context, 'registry', None) +## if registry is None: +## from zope.component.registry import Components +## app_context.registry = Components() +## return app_context.registry + def make_app(root_policy, package=None, filename='configure.zcml'): import zope.configuration.xmlconfig - zope.configuration.xmlconfig.file(filename, package=package) - return Router(root_policy) + context = zope.configuration.xmlconfig.file(filename, package=package) + return Router(root_policy, context) diff --git a/repoze/bfg/tests/fixtureapp/__init__.py b/repoze/bfg/tests/fixtureapp/__init__.py new file mode 100644 index 000000000..546616b2c --- /dev/null +++ b/repoze/bfg/tests/fixtureapp/__init__.py @@ -0,0 +1 @@ +# fixture application diff --git a/repoze/bfg/tests/fixtureapp/configure.zcml b/repoze/bfg/tests/fixtureapp/configure.zcml new file mode 100644 index 000000000..0e91afbc0 --- /dev/null +++ b/repoze/bfg/tests/fixtureapp/configure.zcml @@ -0,0 +1,14 @@ +<configure xmlns="http://namespaces.zope.org/zope" + xmlns:browser="http://namespaces.repoze.org/browser" + i18n_domain="repoze.bfg"> + + <include package="repoze.bfg" /> + + <browser:page + for=".models.IFixture" + class=".views.FixtureView" + template="templates/fixture.pt" + permission="repoze.view" + /> + +</configure> diff --git a/repoze/bfg/tests/fixtureapp/models.py b/repoze/bfg/tests/fixtureapp/models.py new file mode 100644 index 000000000..a57b06308 --- /dev/null +++ b/repoze/bfg/tests/fixtureapp/models.py @@ -0,0 +1,5 @@ +from zope.interface import Interface + +class IFixture(Interface): + pass + diff --git a/repoze/bfg/tests/fixtureapp/templates/fixture.pt b/repoze/bfg/tests/fixtureapp/templates/fixture.pt new file mode 100644 index 000000000..06dd4e2b1 --- /dev/null +++ b/repoze/bfg/tests/fixtureapp/templates/fixture.pt @@ -0,0 +1,6 @@ +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:tal="http://xml.zope.org/namespaces/tal"> +<head></head> +<body> +</body> +</html> diff --git a/repoze/bfg/tests/fixtureapp/views.py b/repoze/bfg/tests/fixtureapp/views.py new file mode 100644 index 000000000..b9b9fc7d9 --- /dev/null +++ b/repoze/bfg/tests/fixtureapp/views.py @@ -0,0 +1,8 @@ +class FixtureView(object): + def __init__(self, context, request): + self.context = context + self.request = request + + def __call__(self): + pass + diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index ae0d1f5bf..d4fd159da 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -51,7 +51,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) self._registerTraverserFactory(traversalfactory, '', None, None) - router = self._makeOne(rootpolicy) + app_context = make_appcontext() + router = self._makeOne(rootpolicy, app_context) start_response = DummyStartResponse() result = router(environ, start_response) headers = start_response.headers @@ -71,7 +72,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerTraverserFactory(traversalfactory, '', None, None) self._registerViewFactory(viewfactory, '', None, None) self._registerWSGIFactory(wsgifactory, '', None, None, None) - router = self._makeOne(rootpolicy) + app_context = make_appcontext() + router = self._makeOne(rootpolicy, app_context) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -92,7 +94,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerTraverserFactory(traversalfactory, '', None, None) self._registerViewFactory(viewfactory, 'foo', None, None) self._registerWSGIFactory(wsgifactory, '', None, None, None) - router = self._makeOne(rootpolicy) + app_context = make_appcontext() + router = self._makeOne(rootpolicy, app_context) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -119,7 +122,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerTraverserFactory(traversalfactory, '', None, None) self._registerViewFactory(viewfactory, '', IContext, IRequest) self._registerWSGIFactory(wsgifactory, '', None, None, None) - router = self._makeOne(rootpolicy) + app_context = make_appcontext() + router = self._makeOne(rootpolicy, app_context) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -148,12 +152,26 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerTraverserFactory(traversalfactory, '', None, None) self._registerViewFactory(viewfactory, '', IContext, IRequest) self._registerWSGIFactory(wsgifactory, '', None, None, None) - router = self._makeOne(rootpolicy) + app_context = make_appcontext() + router = self._makeOne(rootpolicy, app_context) start_response = DummyStartResponse() result = router(environ, start_response) self.failUnless('404' in result[0]) self.assertEqual(start_response.status, '404 Not Found') +class MakeAppTests(unittest.TestCase, PlacelessSetup): + def _getFUT(self): + from repoze.bfg.router import make_app + return make_app + + def test_sampleapp(self): + from repoze.bfg.tests import fixtureapp + make_app = self._getFUT() + rootpolicy = make_rootpolicy(None) + app = make_app(rootpolicy, fixtureapp) + self.assertEqual(app.app_context.package, fixtureapp) + self.assertEqual(app.root_policy, rootpolicy) + class DummyContext: pass @@ -198,6 +216,13 @@ def make_rootpolicy(root): return root return rootpolicy +def make_appcontext(): + from zope.configuration.interfaces import IConfigurationContext + from zope.interface import directlyProvides + app_context = DummyContext() + directlyProvides(app_context, IConfigurationContext) + return app_context + class DummyStartResponse: status = () headers = () |
