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/tests | |
| 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/tests')
| -rw-r--r-- | repoze/bfg/tests/test_events.py | 25 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_router.py | 8 |
2 files changed, 31 insertions, 2 deletions
diff --git a/repoze/bfg/tests/test_events.py b/repoze/bfg/tests/test_events.py index d7ab772f5..f1cbfff5b 100644 --- a/repoze/bfg/tests/test_events.py +++ b/repoze/bfg/tests/test_events.py @@ -66,6 +66,31 @@ class WSGIAppEventTests(unittest.TestCase): from zope.interface.verify import verifyClass verifyClass(IWSGIApplicationCreatedEvent, WSGIApplicationCreatedEvent) +class AfterTraversalEventTests(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.events import AfterTraversal + return AfterTraversal + + def _makeOne(self, request): + return self._getTargetClass()(request) + + def test_class_implements(self): + from repoze.bfg.interfaces import IAfterTraversal + from zope.interface.verify import verifyClass + klass = self._getTargetClass() + verifyClass(IAfterTraversal, klass) + + def test_instance_implements(self): + from repoze.bfg.interfaces import IAfterTraversal + from zope.interface.verify import verifyObject + request = DummyRequest() + inst = self._makeOne(request) + verifyObject(IAfterTraversal, inst) + + def test_ctor(self): + request = DummyRequest() + inst = self._makeOne(request) + self.assertEqual(inst.request, request) class DummyRequest: pass diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index 1e5382dde..d5bc8cd66 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -382,6 +382,9 @@ class TestRouter(unittest.TestCase): self.assertEqual(start_response.headers, [('a', 1), ('b', 2)]) def test_call_eventsends(self): + from repoze.bfg.interfaces import INewRequest + from repoze.bfg.interfaces import INewResponse + from repoze.bfg.interfaces import IAfterTraversal context = DummyContext() self._registerTraverserFactory(context) response = DummyResponse() @@ -389,15 +392,16 @@ class TestRouter(unittest.TestCase): view = DummyView(response) environ = self._makeEnviron() self._registerView(view, '', None, None) - from repoze.bfg.interfaces import INewRequest - from repoze.bfg.interfaces import INewResponse request_events = self._registerEventListener(INewRequest) + aftertraversal_events = self._registerEventListener(IAfterTraversal) response_events = self._registerEventListener(INewResponse) router = self._makeOne() start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(len(request_events), 1) self.assertEqual(request_events[0].request.environ, environ) + self.assertEqual(len(aftertraversal_events), 1) + self.assertEqual(aftertraversal_events[0].request.environ, environ) self.assertEqual(len(response_events), 1) self.assertEqual(response_events[0].response, response) |
