summaryrefslogtreecommitdiff
path: root/repoze/bfg/router.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-11-19 10:44:55 +0000
committerChris McDonough <chrism@agendaless.com>2009-11-19 10:44:55 +0000
commiteac7c470021b647d63c2e2af8acd6cebd738f2a4 (patch)
tree6d04102c9442c0dd67a26d002ff89ae51b454993 /repoze/bfg/router.py
parent4dd55a50a7ed559748661f369313030773d13e75 (diff)
downloadpyramid-eac7c470021b647d63c2e2af8acd6cebd738f2a4.tar.gz
pyramid-eac7c470021b647d63c2e2af8acd6cebd738f2a4.tar.bz2
pyramid-eac7c470021b647d63c2e2af8acd6cebd738f2a4.zip
Rearrange things to try to avoid circular import deps.
Diffstat (limited to 'repoze/bfg/router.py')
-rw-r--r--repoze/bfg/router.py43
1 files changed, 11 insertions, 32 deletions
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py
index b317c9b35..7edf40620 100644
--- a/repoze/bfg/router.py
+++ b/repoze/bfg/router.py
@@ -1,11 +1,7 @@
-from zope.component.event import dispatch
-
from zope.interface import implements
from zope.interface import providedBy
from zope.interface import alsoProvides
-from zope.component import getSiteManager
-
from repoze.bfg.interfaces import IForbiddenView
from repoze.bfg.interfaces import ILogger
from repoze.bfg.interfaces import INotFoundView
@@ -17,24 +13,18 @@ from repoze.bfg.interfaces import ISettings
from repoze.bfg.interfaces import ITraverser
from repoze.bfg.interfaces import IView
-from repoze.bfg.configuration import DefaultRootFactory
-from repoze.bfg.configuration import Configurator
from repoze.bfg.events import AfterTraversal
from repoze.bfg.events import NewRequest
from repoze.bfg.events import NewResponse
-from repoze.bfg.events import WSGIApplicationCreatedEvent
from repoze.bfg.exceptions import Forbidden
from repoze.bfg.exceptions import NotFound
-from repoze.bfg.registry import Registry
from repoze.bfg.request import Request
from repoze.bfg.threadlocal import manager
-from repoze.bfg.threadlocal import get_current_registry
+from repoze.bfg.traversal import DefaultRootFactory
from repoze.bfg.traversal import ModelGraphTraverser
from repoze.bfg.view import default_forbidden_view
from repoze.bfg.view import default_notfound_view
-_marker = object()
-
class Router(object):
""" The main repoze.bfg WSGI application. """
implements(IRouter)
@@ -43,9 +33,6 @@ class Router(object):
threadlocal_manager = manager
def __init__(self, registry):
- # executing sethook means we're taking over getSiteManager for
- # the lifetime of this process
- getSiteManager.sethook(get_current_registry)
q = registry.queryUtility
self.logger = q(ILogger, 'repoze.bfg.debug')
self.notfound_view = q(INotFoundView, default=default_notfound_view)
@@ -162,10 +149,10 @@ class Router(object):
finally:
manager.pop()
-# note that ``options`` is a b/w compat alias for ``settings``
+# note that ``options`` is a b/w compat alias for ``settings`` and
+# ``Configurator`` is a testing dep inj
def make_app(root_factory, package=None, filename='configure.zcml',
- settings=None, options=None, Configurator=Configurator,
- Router=Router, Registry=Registry, manager=manager):
+ settings=None, options=None, Configurator=None):
""" Return a Router object, representing a fully configured
``repoze.bfg`` WSGI application.
@@ -202,20 +189,12 @@ def make_app(root_factory, package=None, filename='configure.zcml',
parameter ``options`` is a backwards compatibility alias for the
``settings`` keyword parameter.
"""
+ if Configurator is None:
+ from repoze.bfg.configuration import Configurator
settings = settings or options
- registry = Registry('make_app')
- config = Configurator(registry)
- config.default_configuration(root_factory, package=package,
- filename=filename, settings=settings)
- app = Router(registry)
- # We push the registry on to the stack here in case any ZCA API is
- # used in listeners subscribed to the WSGIApplicationCreatedEvent
- # we send.
- manager.push({'registry':registry, 'request':None})
- try:
- # use dispatch here instead of registry.notify to make unit
- # tests possible
- dispatch(WSGIApplicationCreatedEvent(app))
- finally:
- manager.pop()
+ config = Configurator()
+ config.declarative(root_factory, package=package,
+ filename=filename, settings=settings)
+ app = config.make_wsgi_app()
return app
+