Fetching contributors…
Cannot retrieve contributors at this time
116 lines (75 sloc) 2.97 KB


:mod:`repoze.retry` implements a WSGI middleware filter which intercepts "retryable" exceptions and retries the WSGI request a configurable number of times. Such exceptions are normally raised when a conflict is detected in an optimistic concurrency scheme [1] is configured for a database such Postgres [2] or ZODB [3] (in ZODB, optimistic concurrency is always enabled).

If the request cannot be satisfied via retries, the filter re-raises the exception.


If your WSGI pipeline includes the transaction filter provided by :mod:`` or :mod:`repoze.tm2`, the retry filter should come before it (to the "left"), so that retried requests are first aborted and then restarted in a new transaction


Install using setuptools, e.g. (within a virtualenv):

$ easy_install repoze.retry

Configuration via Python

Wire up the middleware in your application:

from repoze.retry import Retry
mw = Retry(app, tries=3, retryable=(ValueError, IndexError))

By default, the retryable exception is :class:`repoze.retry.ConflictError`.

tries is an integer count, defaulting to 3 times.

Configuration via Paste

To use the default configuration, you can just include the filter in your application's pipeline.

pipeline =

If you want to override the defaults, e.g. to change the number of retries, or the exceptions which will be retried, configure the filter in a separate section:

use = egg:repoze.retry
tries = 2
retryable = mypackage.exceptions:SomeRetryableException

and then use it in your pipeline:

pipeline =

Reporting Bugs / Development Versions

The repoze developers hang out in the repoze IRC channel.

Email discussion of the filter's development takes place on the repoze-dev mailing list.

Visit to report bugs.

Visit to check out development or tagged versions.