Commit 88c83fc6 authored by Matthew Wilkes's avatar Matthew Wilkes

Backported DoomedTransaction handling from trunk r92792 to 2.11 branch

parents 34411c84 e9ed54f5
......@@ -249,7 +249,15 @@ class ZPublisherExceptionHook:
REQUEST['AUTHENTICATED_USER'] = AccessControl.User.nobody
try:
f(client, REQUEST, t, v, traceback, error_log_url=error_log_url)
result = f(client, REQUEST, t, v,
traceback,
error_log_url=error_log_url)
if result is not None:
t, v, traceback = result
response = REQUEST.RESPONSE
response.setStatus(t)
response.setBody(v)
return response
except TypeError:
# Pre 2.6 call signature
f(client, REQUEST, t, v, traceback)
......@@ -267,7 +275,10 @@ class TransactionsManager:
transaction.begin()
def commit(self):
transaction.commit()
if hasattr(transaction, 'isDoomed') and transaction.isDoomed():
transaction.abort()
else:
transaction.commit()
def abort(self):
transaction.abort()
......
##############################################################################
#
# Copyright (c) 2007 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
import sys
import unittest
import logging
import transaction
class DoomedTransactionInManagerTest(unittest.TestCase):
def testDoomedFails(self):
transaction.begin()
trans = transaction.get()
trans.doom()
from transaction.interfaces import DoomedTransaction
self.assertRaises(DoomedTransaction, trans.commit)
def testDoomedSilentInTM(self):
from Zope2.App.startup import TransactionsManager
tm = TransactionsManager()
transaction.begin()
trans = transaction.get()
trans.doom()
tm.commit()
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(DoomedTransactionInManagerTest))
return suite
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment