summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repoze/bfg/configure.zcml8
-rw-r--r--repoze/bfg/router.py16
-rw-r--r--repoze/bfg/tests/fixtureapp/__init__.py1
-rw-r--r--repoze/bfg/tests/fixtureapp/configure.zcml14
-rw-r--r--repoze/bfg/tests/fixtureapp/models.py5
-rw-r--r--repoze/bfg/tests/fixtureapp/templates/fixture.pt6
-rw-r--r--repoze/bfg/tests/fixtureapp/views.py8
-rw-r--r--repoze/bfg/tests/test_router.py35
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 = ()