This package provides error handling in a second transaction after the doomed transaction was already rolled back, but within the same request.
It subscribes a method to ZPublisher.interfaces.IPubFailure
,
which is thrown after the actual transaction aborted. This allows the error
handling procedure to interact with the database and eventually commit a
transaction.
To implement an error handling procedure that is executed after the failed
transaction is already rolled back, place a method named
afterfail_error_message_
so it is found in the context of where the error
occurs. Additionally, you should have a standard_error_message
, especially
under Zope 4, where otherwise a default error view is called after the handler
and overwrites the output.
Within the doomed transaction, standard_error_message
is called and its
result is used for the response of the request by default. After the
transaction is rolled back, afterfail_error_message_
is called with the
same arguments (error_type
, error_value
and error_tb
) in a new
transaction, which is afterwards commited unless an uncaught exception occurs
inside the method. If the method returns a string, this replaces the response.
If it returns None
, the original response from standard_error_message
is used.