summaryrefslogtreecommitdiff
path: root/repoze/bfg/router.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-11-02 12:23:26 +0000
committerChris McDonough <chrism@agendaless.com>2009-11-02 12:23:26 +0000
commit49304cecdf2c51888ee4ff42ec6496207186ad9b (patch)
tree82172ae270dfd0d5d972f65d4669c93219c9f469 /repoze/bfg/router.py
parent32d95886503540052d9b7075c9ce3326b042bb08 (diff)
downloadpyramid-49304cecdf2c51888ee4ff42ec6496207186ad9b.tar.gz
pyramid-49304cecdf2c51888ee4ff42ec6496207186ad9b.tar.bz2
pyramid-49304cecdf2c51888ee4ff42ec6496207186ad9b.zip
- Add a new event type: ``repoze.bfg.events.AfterTraversal``. Events
of this type will be sent after traversal is completed, but before any view code is invoked. Like ``repoze.bfg.events.NewRequest``, This event will have a single attribute: ``request`` representing the current request. Unlike the request attribute of ``repoze.bfg.events.NewRequest`` however, during an AfterTraversal event, the request object will possess attributes set by the traverser, most notably ``context``, which will be the context used when a view is found and invoked. The interface ``repoze.bfg.events.IAfterTraversal`` can be used to subscribe to the event. For example:: <subscriber for="repoze.bfg.interfaces.IAfterTraversal" handler="my.app.handle_after_traverse"/> Like any framework event, a subscriber function should expect one parameter: ``event``.
Diffstat (limited to 'repoze/bfg/router.py')
-rw-r--r--repoze/bfg/router.py7
1 files changed, 5 insertions, 2 deletions
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py
index c3580a8da..ca0f8e449 100644
--- a/repoze/bfg/router.py
+++ b/repoze/bfg/router.py
@@ -14,6 +14,7 @@ from repoze.bfg.interfaces import IView
from repoze.bfg.configuration import make_registry
from repoze.bfg.configuration import DefaultRootFactory
+from repoze.bfg.events import AfterTraversal
from repoze.bfg.events import NewRequest
from repoze.bfg.events import NewResponse
from repoze.bfg.events import WSGIApplicationCreatedEvent
@@ -54,6 +55,7 @@ class Router(object):
iterable.
"""
registry = self.registry
+ has_listeners = registry.has_listeners
logger = self.logger
manager = self.threadlocal_manager
threadlocals = {'registry':registry, 'request':None}
@@ -65,7 +67,7 @@ class Router(object):
threadlocals['request'] = request
attrs = request.__dict__
attrs['registry'] = registry
- registry.has_listeners and registry.notify(NewRequest(request))
+ has_listeners and registry.notify(NewRequest(request))
# view lookup
root = self.root_factory(request)
@@ -79,6 +81,7 @@ class Router(object):
tdict['traversed'], tdict['virtual_root'],
tdict['virtual_root_path'])
attrs.update(tdict)
+ has_listeners and registry.notify(AfterTraversal(request))
provides = map(providedBy, (context, request))
view_callable = registry.adapters.lookup(
provides, IView, name=view_name, default=None)
@@ -111,7 +114,7 @@ class Router(object):
response = self.notfound_view(context, request)
# response handling
- registry.has_listeners and registry.notify(NewResponse(response))
+ has_listeners and registry.notify(NewResponse(response))
try:
headers = response.headerlist