diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-11-02 12:23:26 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-11-02 12:23:26 +0000 |
| commit | 49304cecdf2c51888ee4ff42ec6496207186ad9b (patch) | |
| tree | 82172ae270dfd0d5d972f65d4669c93219c9f469 /repoze/bfg/router.py | |
| parent | 32d95886503540052d9b7075c9ce3326b042bb08 (diff) | |
| download | pyramid-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.py | 7 |
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 |
