pyramid_tm is a package which allows Pyramid requests to join
the active transaction as provided by the transaction package.
or docs/index.rst in this distribution for detailed
- The tm.attempts setting has been removed and retry support has been moved
into a new package named pyramid_retry. If you want retry support then
please look at that library for more information about installing and
enabling it. See https://github.com/Pylons/pyramid_tm/pull/55
- The pyramid_tm tween has been moved over the EXCVIEW tween.
If you have any hacks in your application that are opening a new transaction
inside your exception views then it’s likely you will want to remove them
or re-evaluate when upgrading.
- Drop support for Pyramid < 1.5.
- Support transaction 2.x.
- The transaction’s request path and userid are now coerced to unicode by
first decoding as utf-8 and falling back to latin-1. If the userid
does not conform to these restrictions then set tm.annotate_user = no
in your settings. See https://github.com/Pylons/pyramid_tm/pull/50
- Removes the AttributeError when request.tm is accessed outside the
tween. It turns out this broke subrequests as well as pshell and
pyramid.paster.bootstrapp CLI scripts, especially when using the
global transaction manager which can be tracked outside of the tween.
- Drop Python 2.6, 3.2 and 3.3 support.
- Add Python 3.5 support.
- Subtle bugs can occur if you use the transaction manager during a request
in which pyramid_tm is disabled via an activate_hook. To combat these
types of errors, attempting to access request.tm will now raise an
AttributeError when pyramid_tm is inactive.
- Fix compatibility with 1.2 and 1.3 again. This wasn’t fully fixed in the
0.12 release as the tween was relying on request properties working (which
they do not inside tweens in older versions).
- Write unauthenticated userid and request.path_info as transaction
metadata via t.setUser and t.note respectively during a commit.
- Disuse the confusing and bug-ridden generator-plus-context-manager “attempts”
mechanism from the transaction package for retrying retryable exceptions
(e.g. ZODB ConflictError). Use a simple while loop plus a counter and
imperative logic instead.
- When a non-retryable exception was raised as the result of a call to
transaction.manager.commit, the exception was not reraised properly.
Symptom: an unrecoverable exception such as Unsupported: Storing blobs in
<somestorage> is not supported. would be swallowed inappropriately.
- No longer tested under Python 2.5 by tox.ini (and therefore no longer
tested under 2.5 by the Pylons Jenkins server). The package may still work
under 2.5, but automated tests will no longer show breakage when it changes
in ways that break 2.5 support.
- Squash test deprecation warnings under Python 3.2.
- The transaction manager has been converted to a Pyramid 1.2 “tween”
(instead of an event subscriber). It will be slotted directly “below” the
exception view handler, meaning it will have a chance to handle exceptions
before they are turned into responses. This means it’s best to “raise
HTTPFound(…)” instead of “return HTTPFound(…)” if you want an HTTP
exception to abort the transaction.
- The transaction manager will now retry retryable exceptions (such as a ZODB
conflict error) if tm.attempts is configured to be more than the
default of 1. See the Retrying section of the documentation.
- Python 3.2 compatibility (requires Pyramid 1.3dev+).
Incompatible with Pyramid < 1.2a1. Use pyramid_tm version 0.2 if you
need compatibility with an older Pyramid installation.
The default_commit_veto commit veto callback is no longer configured
into the system by default. Use tm.commit_veto =
pyramid_tm.default_commit_veto in the deployment settings to add it.
This is for parity with repoze.tm2, which doesn’t configure in a commit
veto by default either.
The default_commit_veto no longer checks for the presence of the
X-Tm-Abort header when attempting to figure out whether the transaction
should be aborted (although it still checks for the X-Tm header). Use
version 0.2 or a custom commit veto function if your application depends on
the X-Tm-Abort header.
A commit veto is now called with two arguments: request and
response. The request is the webob request that caused the
transaction manager to become active. The response is the response
returned by the Pyramid application. This call signature is incompatible
with older versions. The call signature of a pyramid_tm 0.2 and older
commit veto accepted three arguments: environ, status, and
headers. If you’re using a custom commit_veto function, you’ll
need to either convert your existing function to use the new calling
convention or use a wrapper to make it compatible with the new calling
convention. Here’s a simple wrapper function
(bwcompat_commit_veto_wrapper) that will allow you to use your existing
custom commit veto function:
def bwcompat_commit_veto_wrapper(request, response):
return my_custom_commit_veto(request.environ, response.status,
- The pyramid_tm.commit_veto configuration setting is now canonically
spelled as tm.commit_veto. The older spelling will continue to work,
but may raise a deprecation error when used.
- A new header X-Tm is now honored by the default_commit_veto commit
veto hook. If this header exists in the headerlist, its value must be a
string. If its value is commit, the transaction will be committed
regardless of the status code or the value of X-Tm-Abort. If the value
of the X-Tm header is abort (or any other string value except
commit), the transaction will be aborted, regardless of the status code
or the value of X-Tm-Abort.
- Initial release, based on repoze.tm2
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.