summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2010-09-12 21:51:55 +0000
committerChris McDonough <chrism@agendaless.com>2010-09-12 21:51:55 +0000
commit79c11cc905bcc5eae4f1b6e63aa187551966be34 (patch)
tree80f1453383207a55e1dc85cff2a7be042ac1c58c
parentfe27378ab08461d99d295097e957b0bfa30d7c18 (diff)
downloadpyramid-79c11cc905bcc5eae4f1b6e63aa187551966be34.tar.gz
pyramid-79c11cc905bcc5eae4f1b6e63aa187551966be34.tar.bz2
pyramid-79c11cc905bcc5eae4f1b6e63aa187551966be34.zip
remove FinishedEvent (bad idea)
-rw-r--r--CHANGES.txt7
-rw-r--r--docs/api/events.rst2
-rw-r--r--repoze/bfg/events.py46
-rw-r--r--repoze/bfg/interfaces.py11
-rw-r--r--repoze/bfg/router.py6
-rw-r--r--repoze/bfg/tests/test_router.py19
6 files changed, 1 insertions, 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):