[Erp5-report] r13462 - /erp5/trunk/products/CMFActivity/ActivityTool.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Mar 16 18:18:26 CET 2007
Author: jerome
Date: Fri Mar 16 18:18:22 2007
New Revision: 13462
URL: http://svn.erp5.org?rev=13462&view=rev
Log:
when calling methods on activity queues, pass the innermost acquisition context
of the activity tool, this will solve problems that appears when Z SQL Methods
parameters conflicts with attributes on an object in the acquisition context.
( TestPreferences failures in
http://smets.com/pipermail/erp5-report/2007-March/011557.html )
Modified:
erp5/trunk/products/CMFActivity/ActivityTool.py
Modified: erp5/trunk/products/CMFActivity/ActivityTool.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/ActivityTool.py?rev=13462&r1=13461&r2=13462&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/ActivityTool.py (original)
+++ erp5/trunk/products/CMFActivity/ActivityTool.py Fri Mar 16 18:18:22 2007
@@ -46,6 +46,7 @@
from Products.CMFCore.utils import UniqueObject, _getAuthenticatedUser, getToolByName
from Globals import InitializeClass, DTMLFile
from Acquisition import aq_base
+from Acquisition import aq_inner
from Products.CMFActivity.ActiveObject import DISTRIBUTABLE_STATE, INVOKE_ERROR_STATE, VALIDATE_ERROR_STATE
from ActivityBuffer import ActivityBuffer
@@ -537,7 +538,7 @@
# Call distribute on each queue
for activity in activity_list:
try:
- activity.distribute(self, node_count)
+ activity.distribute(aq_inner(self), node_count)
except ConflictError:
raise
except:
@@ -564,19 +565,23 @@
# Initialize if needed
if not is_initialized: self.initialize()
-
+
+ inner_self = aq_inner(self)
+
# If this is the first tic after zope is started, reset the processing
# flag for activities of this node
if first_run:
- self.SQLDict_clearProcessingFlag(processing_node=processing_node)
- self.SQLQueue_clearProcessingFlag(processing_node=processing_node)
+ inner_self.SQLDict_clearProcessingFlag(
+ processing_node=processing_node)
+ inner_self.SQLQueue_clearProcessingFlag(
+ processing_node=processing_node)
first_run = 0
try:
# Wakeup each queue
for activity in activity_list:
try:
- activity.wakeup(self, processing_node)
+ activity.wakeup(inner_self, processing_node)
except ConflictError:
raise
except:
@@ -588,9 +593,8 @@
has_awake_activity = 0
for activity in activity_list:
try:
- activity.tic(self, processing_node) # Transaction processing is the responsability of the activity
- has_awake_activity = has_awake_activity or activity.isAwake(self, processing_node)
- #LOG('ActivityTool tic', 0, 'has_awake_activity = %r, activity = %r, activity.isAwake(self, processing_node) = %r' % (has_awake_activity, activity, activity.isAwake(self, processing_node)))
+ activity.tic(inner_self, processing_node) # Transaction processing is the responsability of the activity
+ has_awake_activity = has_awake_activity or activity.isAwake(inner_self, processing_node)
except ConflictError:
raise
except:
@@ -609,7 +613,7 @@
else:
obj = self
for activity in activity_list:
- if activity.hasActivity(self, obj, **kw):
+ if activity.hasActivity(aq_inner(self), obj, **kw):
return 1
return 0
@@ -633,13 +637,14 @@
activity_buffer = getattr(self, '_v_activity_buffer', None)
if activity_buffer is not None:
activity_buffer._register() # This is required if flush flush is called outside activate
- return activity.getRegisteredMessageList(self._v_activity_buffer, self)
+ return activity.getRegisteredMessageList(self._v_activity_buffer,
+ aq_inner(self))
else:
return []
def unregisterMessage(self, activity, message):
self._v_activity_buffer._register() # Required if called by flush, outside activate
- return activity.unregisterMessage(self._v_activity_buffer, self, message)
+ return activity.unregisterMessage(self._v_activity_buffer, aq_inner(self), message)
def flush(self, obj, invoke=0, **kw):
global is_initialized
@@ -651,19 +656,19 @@
else:
object_path = obj.getPhysicalPath()
for activity in activity_list:
- activity.flush(self, object_path, invoke=invoke, **kw)
+ activity.flush(aq_inner(self), object_path, invoke=invoke, **kw)
def start(self, **kw):
global is_initialized
if not is_initialized: self.initialize()
for activity in activity_list:
- activity.start(self, **kw)
+ activity.start(aq_inner(self), **kw)
def stop(self, **kw):
global is_initialized
if not is_initialized: self.initialize()
for activity in activity_list:
- activity.stop(self, **kw)
+ activity.stop(aq_inner(self), **kw)
def invoke(self, message):
message(self)
@@ -772,7 +777,7 @@
if not is_initialized: self.initialize()
if getattr(self, '_v_activity_buffer', None) is None:
self._v_activity_buffer = ActivityBuffer(activity_tool=self)
- activity_dict[activity].queueMessage(self,
+ activity_dict[activity].queueMessage(aq_inner(self),
Message(path, active_process, activity_kw, method_id, args, kw))
security.declareProtected( CMFCorePermissions.ManagePortal, 'manageInvoke' )
@@ -846,7 +851,7 @@
# Reactivate the messages.
for m in message_list:
try:
- m.reactivate(self)
+ m.reactivate(aq_inner(self))
except ConflictError:
raise
except:
@@ -869,7 +874,7 @@
message_list = []
for activity in activity_list:
try:
- message_list += activity.getMessageList(self,**kw)
+ message_list += activity.getMessageList(aq_inner(self),**kw)
except AttributeError:
LOG('getMessageList, could not get message from Activity:',0,activity)
return message_list
@@ -881,7 +886,7 @@
"""
message_count = 0
for activity in activity_list:
- message_count += activity.countMessageWithTag(self, value)
+ message_count += activity.countMessageWithTag(aq_inner(self), value)
return message_count
security.declarePublic('countMessage')
@@ -898,7 +903,7 @@
"""
message_count = 0
for activity in activity_list:
- message_count += activity.countMessage(self, **kw)
+ message_count += activity.countMessage(aq_inner(self), **kw)
return message_count
security.declareProtected( CMFCorePermissions.ManagePortal , 'newActiveProcess' )
@@ -920,8 +925,8 @@
for activity in activity_list:
method_id = "_validate_%s" % validator_id
if hasattr(activity, method_id):
-# LOG('CMFActivity: ', 0, 'validateOrder calling method_id %s' % method_id)
- if getattr(activity,method_id)(self, message, validation_value):
+ if getattr(activity,method_id)(aq_inner(self),
+ message, validation_value):
return 1
return 0
@@ -930,6 +935,6 @@
global is_initialized
if not is_initialized: self.initialize()
for activity in activity_list:
- activity.timeShift(self, delay)
+ activity.timeShift(aq_inner(self), delay)
InitializeClass(ActivityTool)
More information about the Erp5-report
mailing list