From 79c11cc905bcc5eae4f1b6e63aa187551966be34 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sun, 12 Sep 2010 21:51:55 +0000 Subject: remove FinishedEvent (bad idea) --- CHANGES.txt | 7 ------- docs/api/events.rst | 2 -- repoze/bfg/events.py | 46 ----------------------------------------- repoze/bfg/interfaces.py | 11 ---------- repoze/bfg/router.py | 6 +----- repoze/bfg/tests/test_router.py | 19 ----------------- 6 files changed, 1 insertion(+), 90 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 581ead5eb..8cef54986 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -24,13 +24,6 @@ Features - A new ZCML directive was added: ``default_permission``. -- The BFG router now emits an additional event unconditionally at the - end of request processing: - ``repoze.bfg.interfaces.IFinishedRequest``. This event is meant to - be used when it is necessary to perform unconditional cleanup after - request processing. See the ``repoze.bfg.events.FinishedRequest`` - class documentation for more information. - Deprecations ------------ diff --git a/docs/api/events.rst b/docs/api/events.rst index 53fdeda86..940c23aa1 100644 --- a/docs/api/events.rst +++ b/docs/api/events.rst @@ -23,8 +23,6 @@ Event Types .. autoclass:: NewResponse -.. autoclass:: FinishedRequest - See :ref:`events_chapter` for more information about how to register code which subscribes to these events. diff --git a/repoze/bfg/events.py b/repoze/bfg/events.py index 301c28953..7dc8fc6e0 100644 --- a/repoze/bfg/events.py +++ b/repoze/bfg/events.py @@ -6,7 +6,6 @@ from repoze.bfg.interfaces import IContextFound from repoze.bfg.interfaces import INewRequest from repoze.bfg.interfaces import INewResponse from repoze.bfg.interfaces import IApplicationCreated -from repoze.bfg.interfaces import IFinishedRequest class subscriber(object): """ Decorator activated via a :term:`scan` which treats the @@ -162,48 +161,3 @@ class ApplicationCreated(object): WSGIApplicationCreatedEvent = ApplicationCreated # b/c (as of 1.3) -class FinishedRequest(object): - """ - This :term:`event` is sent after all request processing is - finished. - - An event of this type is emitted unconditionally at the end of - request processing, even when an unhandled exception occurs. This - is in contrast to the :class:`repoze.bfg.interfaces.INewResponse` - event, which cannot be emitted when, due to an unhandled - exception, a response object cannot not be created . The - :class:`repoze.bfg.events.FinishedRequest` event will even be sent - when a request cannot not be created due to an error in request - factory code: in such a case, the ``request`` attribute of the - event will be ``None``. - - Mutating the attached ``request`` object in a subscriber to this - event will have no effect, because, when this event is emitted, - there is no further request or response processing to be done. It - is purely an informational event, which can be hooked to do - 'finally:'-style tear-down at the end of each request. - - Instances of this event have an attribute, ``request``, which is - the :term:`request` object (or, in extremely rare cases might be - ``None``, when a request object cannot be created due to a bug in - a request factory) . - - Because this event happens unconditionally, the set of attributes - possessed by an attached ``request`` object are indeterminate. At - very least, if the request is not ``None``, it will have a - ``registry`` attribute. However, if an exception was thrown - before this event is broadcast, it may not have other - :mod:`repoze.bfg` -specific attributes such as ``subpath``, - ``root`, ``traversed``, etc. - - Exceptions raised by subscribers of this event are unhandled. - - This class implements the - :class:`repoze.bfg.interfaces.IFinishedRequest` interface. - - .. note:: This event type is new as of :mod:`repoze.bfg` 1.3. - """ - implements(IFinishedRequest) - def __init__(self, request): - self.request = request - diff --git a/repoze/bfg/interfaces.py b/repoze/bfg/interfaces.py index 3f3794a53..136680202 100644 --- a/repoze/bfg/interfaces.py +++ b/repoze/bfg/interfaces.py @@ -46,17 +46,6 @@ class IApplicationCreated(Interface): IWSGIApplicationCreatedEvent = IApplicationCreated # b /c -class IFinishedRequest(Interface): - """ - This :term:`event` is sent after all request processing is - finished. See the - documentation attached to :class:`repoze.bfg.events.FinishedRequest` - for more information. - - .. note:: This event type is new as of :mod:`repoze.bfg` 1.3. - """ - request = Attribute('The request object') - class IResponse(Interface): # not an API status = Attribute('WSGI status code of response') headerlist = Attribute('List of response headers') diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index fb5120d2b..4a818d097 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -18,7 +18,6 @@ from repoze.bfg.configuration import make_app # b/c import from repoze.bfg.events import ContextFound from repoze.bfg.events import NewRequest from repoze.bfg.events import NewResponse -from repoze.bfg.events import FinishedRequest from repoze.bfg.exceptions import NotFound from repoze.bfg.request import Request from repoze.bfg.threadlocal import manager @@ -165,8 +164,5 @@ class Router(object): return app_iter finally: - try: - has_listeners and registry.notify(FinishedRequest(request)) - finally: - manager.pop() + manager.pop() diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index fafe88d4a..fbe11968a 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -126,21 +126,6 @@ class TestRouter(unittest.TestCase): router = self._makeOne() self.assertEqual(router.request_factory, DummyRequestFactory) - def test_call_request_factory_raises_finished_request_catches(self): - from repoze.bfg.interfaces import IFinishedRequest - finished_events = self._registerEventListener(IFinishedRequest) - environ = self._makeEnviron() - logger = self._registerLogger() - router = self._makeOne() - def dummy_request_factory(environ): - raise NotImplementedError - router.request_factory = dummy_request_factory - start_response = DummyStartResponse() - exc_raised(NotImplementedError, router, environ, start_response) - self.assertEqual(len(logger.messages), 0) - self.assertEqual(len(finished_events), 1) - self.assertEqual(finished_events[0].request, None) - def test_call_traverser_default(self): from repoze.bfg.exceptions import NotFound environ = self._makeEnviron() @@ -415,7 +400,6 @@ class TestRouter(unittest.TestCase): from repoze.bfg.interfaces import INewRequest from repoze.bfg.interfaces import INewResponse from repoze.bfg.interfaces import IContextFound - from repoze.bfg.interfaces import IFinishedRequest from repoze.bfg.interfaces import IViewClassifier context = DummyContext() self._registerTraverserFactory(context) @@ -427,7 +411,6 @@ class TestRouter(unittest.TestCase): request_events = self._registerEventListener(INewRequest) aftertraversal_events = self._registerEventListener(IContextFound) response_events = self._registerEventListener(INewResponse) - finished_events = self._registerEventListener(IFinishedRequest) router = self._makeOne() start_response = DummyStartResponse() result = router(environ, start_response) @@ -437,8 +420,6 @@ class TestRouter(unittest.TestCase): self.assertEqual(aftertraversal_events[0].request.environ, environ) self.assertEqual(len(response_events), 1) self.assertEqual(response_events[0].response, response) - self.assertEqual(len(finished_events), 1) - self.assertEqual(finished_events[0].request.environ, environ) self.assertEqual(result, response.app_iter) def test_call_pushes_and_pops_threadlocal_manager(self): -- cgit v1.2.3