repoze/repoze.tm2 — pull request #5 by jinty (2013-06-27 12:31:06+00:00)
Title: An exception on commit can return 200 OK

If you get an exception on the commit() call the
browser may see an OK message. This is because the
result is already passed to the WSGI server by the
time commit() is called. What actually happens
depends on the server.

It is a very bas idea to return a "Your changes
have been saved" message when, in fact, they have not.

This can happen if you have work happen on commit().
For example, SQLAlchemy will often only flush on commit
or a DEFERRED PostgreSQL constraint.

This is just a test as the solution is non-trivial.
Simply keeping the WSGI result in memory until the
commit() is called is not workable for large responses
or streaming (see 4b68c7db6917be228a71f4b2fd059897066b9b4b)

Neither does the WSGI spec provide any solace:
http://www.python.org/dev/peps/pep-3333/#error-handling