before-commit-hook API for the transaction object changed. Temporarily patch...

before-commit-hook API for the transaction object changed. Temporarily patch transaction on Zope 2.8 with the new API and adapt all uses (approved by jm)

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@29871 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 4d92f5bc
...@@ -27,10 +27,7 @@ from Shared.DC.ZRDB.TM import TM ...@@ -27,10 +27,7 @@ from Shared.DC.ZRDB.TM import TM
from zLOG import LOG, ERROR, INFO from zLOG import LOG, ERROR, INFO
import sys import sys
try: import transaction
from transaction import get as get_transaction
except ImportError:
pass
class ActivityBuffer(TM): class ActivityBuffer(TM):
...@@ -81,13 +78,11 @@ class ActivityBuffer(TM): ...@@ -81,13 +78,11 @@ class ActivityBuffer(TM):
for activity in activity_dict.itervalues(): for activity in activity_dict.itervalues():
activity.registerActivityBuffer(self) activity.registerActivityBuffer(self)
# In Zope 2.8 (ZODB 3.4), use beforeCommitHook instead of # Notice: The operation below cannot fail silently, or we get errors late
# patching Trasaction. # in the transaction that are very hard to understand.
transaction = get_transaction() transaction.get().addBeforeCommitHook(self.tpc_prepare,
try: (transaction,),
transaction.beforeCommitHook(self.tpc_prepare, transaction, activity_tool=activity_tool) dict(activity_tool=activity_tool))
except AttributeError:
pass
except: except:
LOG('ActivityBuffer', ERROR, "exception during _begin", LOG('ActivityBuffer', ERROR, "exception during _begin",
error=sys.exc_info()) error=sys.exc_info())
......
...@@ -306,7 +306,7 @@ class InteractionWorkflowDefinition (DCWorkflowDefinition, ActiveObject): ...@@ -306,7 +306,7 @@ class InteractionWorkflowDefinition (DCWorkflowDefinition, ActiveObject):
# Execute Before Commit # Execute Before Commit
for script_name in tdef.before_commit_script_name: for script_name in tdef.before_commit_script_name:
script = self.scripts[script_name] script = self.scripts[script_name]
transaction.get().beforeCommitHook(script, sci) transaction.get().addBeforeCommitHook(script, (sci,))
# Execute "activity" scripts # Execute "activity" scripts
for script_name in tdef.activate_script_name: for script_name in tdef.activate_script_name:
......
...@@ -56,6 +56,9 @@ from Products.ERP5Type.patches import http_server ...@@ -56,6 +56,9 @@ from Products.ERP5Type.patches import http_server
from Products.ERP5Type.patches import memcache_client from Products.ERP5Type.patches import memcache_client
from Products.ERP5Type.patches import StateChangeInfoPatch from Products.ERP5Type.patches import StateChangeInfoPatch
from Products.ERP5Type.patches import OFSPdata from Products.ERP5Type.patches import OFSPdata
# Forward Compatibility with Zope 2.12 or CMF 2.2. Remove when we've dropped
# support for old versions
from Products.ERP5Type.patches import TransactionAddBeforeCommitHook
# These symbols are required for backward compatibility # These symbols are required for backward compatibility
from Products.ERP5Type.patches.PropertyManager import ERP5PropertyManager from Products.ERP5Type.patches.PropertyManager import ERP5PropertyManager
......
##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
# Copyright (c) 2009 Nexedi SARL 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
#
##############################################################################
from transaction._transaction import Transaction
if not hasattr(Transaction, 'addBeforeCommitHook'):
def Transaction_addBeforeCommitHook(self, hook, args=(), kws=None):
if kws is None:
kws = {}
self.beforeCommitHook(hook, *args, **kws)
import logging
logger = logging.getLogger(__name__)
logger.info("Patching Transaction with forward compatibility for "
".addBeforeCommitHook()")
Transaction.addBeforeCommitHook = Transaction_addBeforeCommitHook
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