diff options
| author | Chris McDonough <chrism@plope.com> | 2011-09-05 17:58:34 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-09-05 17:58:34 -0400 |
| commit | b37b97bb67eedced5c6a2e0fec718594b5d41878 (patch) | |
| tree | 6f3b69b40d0e6547871e376f86a6115d58a1e75d /docs/narr/webob.rst | |
| parent | e77f6b09f8d91fd792851e3d384b86663bb6384a (diff) | |
| download | pyramid-b37b97bb67eedced5c6a2e0fec718594b5d41878.tar.gz pyramid-b37b97bb67eedced5c6a2e0fec718594b5d41878.tar.bz2 pyramid-b37b97bb67eedced5c6a2e0fec718594b5d41878.zip | |
move unrelated request cleanup to webob.rest; reorder urldispatch chapter from most-important-concept-to-least
Diffstat (limited to 'docs/narr/webob.rst')
| -rw-r--r-- | docs/narr/webob.rst | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/docs/narr/webob.rst b/docs/narr/webob.rst index 106024db3..21c368350 100644 --- a/docs/narr/webob.rst +++ b/docs/narr/webob.rst @@ -310,6 +310,53 @@ Python's ``urllib2`` instead of a Javascript AJAX request: req = urllib2.Request('http://localhost:6543/', json_payload, headers) resp = urllib2.urlopen(req) +.. index:: + single: cleaning up after request + +.. _cleaning_up_after_a_request: + +Cleaning Up After a Request ++++++++++++++++++++++++++++ + +Sometimes it's required that some cleanup be performed at the end of a +request when a database connection is involved. + +For example, let's say you have a ``mypackage`` :app:`Pyramid` application +package that uses SQLAlchemy, and you'd like the current SQLAlchemy database +session to be removed after each request. Put the following in the +``mypackage.__init__`` module: + +.. ignore-next-block +.. code-block:: python + :linenos: + + from mypackage.models import DBSession + + from pyramid.events import subscriber + from pyramid.events import NewRequest + + def cleanup_callback(request): + DBSession.remove() + + @subscriber(NewRequest) + def add_cleanup_callback(event): + event.request.add_finished_callback(cleanup_callback) + +Registering the ``cleanup_callback`` finished callback at the start of a +request (by causing the ``add_cleanup_callback`` to receive a +:class:`pyramid.events.NewRequest` event at the start of each request) will +cause the DBSession to be removed whenever request processing has ended. +Note that in the example above, for the :class:`pyramid.events.subscriber` +decorator to "work", the :meth:`pyramid.config.Configurator.scan` method must +be called against your ``mypackage`` package during application +initialization. + +.. note:: This is only an example. In particular, it is not necessary to + cause ``DBSession.remove`` to be called in an application generated from + any :app:`Pyramid` scaffold, because these all use the ``pyramid_tm`` + package. The cleanup done by ``DBSession.remove`` is unnecessary when + ``pyramid_tm`` middleware is configured into the application. + More Details ++++++++++++ |
