From 1835e1b83c3897670f795046b3cd5d2825790313 Mon Sep 17 00:00:00 2001
From: Sebastien Robin <seb@nexedi.com>
Date: Mon, 19 Apr 2004 09:59:08 +0000
Subject: [PATCH] corrected some bugs when we want to invoke messages by hand

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@695 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/CMFActivity/Activity/Queue.py   |  5 +++-
 product/CMFActivity/Activity/SQLDict.py |  5 +++-
 product/CMFActivity/ActivityTool.py     | 37 +++++++++++--------------
 3 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/product/CMFActivity/Activity/Queue.py b/product/CMFActivity/Activity/Queue.py
index 849948cc2c..8aad7c6b78 100755
--- a/product/CMFActivity/Activity/Queue.py
+++ b/product/CMFActivity/Activity/Queue.py
@@ -190,4 +190,7 @@ class Queue:
           
   def getRegisteredMessageList(self, activity_buffer, activity_tool):
     class_name = self.__class__.__name__
-    return filter(lambda m: m.is_registered, getattr(activity_buffer, '_%s_message_list' % class_name))      
\ No newline at end of file
+    if hasattr(activity_buffer, '_%s_message_list' % class_name):
+      return filter(lambda m: m.is_registered, getattr(activity_buffer, '_%s_message_list' % class_name))      
+    else:
+      return ()
diff --git a/product/CMFActivity/Activity/SQLDict.py b/product/CMFActivity/Activity/SQLDict.py
index 8728f769b9..6b9666f8f3 100755
--- a/product/CMFActivity/Activity/SQLDict.py
+++ b/product/CMFActivity/Activity/SQLDict.py
@@ -86,7 +86,10 @@ class SQLDict(RAMDict):
       del activity_buffer._sqldict_uid_dict[(m.object_path, m.method_id)]
 
   def getRegisteredMessageList(self, activity_buffer, activity_tool):
-    return filter(lambda m: m.is_registered, activity_buffer._sqldict_message_list)
+    if hasattr(activity_buffer,'_sqldict_message_list'):
+      return filter(lambda m: m.is_registered, activity_buffer._sqldict_message_list)
+    else:
+      return ()
                 
   # Queue semantic
   def dequeueMessage(self, activity_tool, processing_node):
diff --git a/product/CMFActivity/ActivityTool.py b/product/CMFActivity/ActivityTool.py
index 4edf0cb9e9..cb8c3bdf3a 100755
--- a/product/CMFActivity/ActivityTool.py
+++ b/product/CMFActivity/ActivityTool.py
@@ -105,8 +105,7 @@ class Message:
     # Store REQUEST Info ?
 
   def __call__(self, activity_tool):
-    #try:
-    if 1:
+    try:
       LOG('WARNING ActivityTool', 0,
            'Trying to call method %s on object %s' % (self.method_id, self.object_path))
       object = activity_tool.unrestrictedTraverse(self.object_path)
@@ -118,8 +117,7 @@ class Message:
         active_process = activity_tool.getActiveProcess()
         active_process.activateResult(Result(object,self.method_id,result)) # XXX Allow other method_id in future
       self.is_executed = 1
-    else:
-    #except:
+    except:
       self.is_executed = 0
       LOG('WARNING ActivityTool', 0,
            'Could not call method %s on object %s' % (self.method_id, self.object_path))
@@ -234,11 +232,9 @@ class ActivityTool (Folder, UniqueObject):
 
       # Call distribute on each queue
       for activity in activity_list:
-        #try:
-        if 1:
+        try:
           activity.distribute(self, node_count)
-        #except:
-        else:
+        except:
           LOG('CMFActivity:', 100, 'Core call to distribute failed for activity %s' % activity)
 
     security.declarePublic('tic')
@@ -316,7 +312,10 @@ class ActivityTool (Folder, UniqueObject):
       self._v_activity_buffer.deferredDeleteMessage(self, activity, message)
           
     def getRegisteredMessageList(self, activity):
-      return activity.getRegisteredMessageList(self._v_activity_buffer, self)
+      if getattr(self, '_v_activity_buffer', None):
+        return activity.getRegisteredMessageList(self._v_activity_buffer, self)
+      else:
+        return []
           
     def unregisterMessage(self, activity, message):
       return activity.unregisterMessage(self._v_activity_buffer, self, message)
@@ -324,7 +323,11 @@ class ActivityTool (Folder, UniqueObject):
     def flush(self, object, invoke=0, **kw):
       global is_initialized
       if not is_initialized: self.initialize()
-      object_path = object.getPhysicalPath()
+      if not hasattr(self, '_v_activity_buffer'): self._v_activity_buffer = ActivityBuffer()
+      if type(object) is type(()):
+        object_path = object
+      else:
+        object_path = object.getPhysicalPath()
       for activity in activity_list:
         LOG('CMFActivity: ', 0, 'flushing activity %s' % activity.__class__.__name__)
         activity.flush(self, object_path, invoke=invoke, **kw)
@@ -358,11 +361,7 @@ class ActivityTool (Folder, UniqueObject):
       """
       if type(object_path) is type(''):
         object_path = tuple(object_path.split('/'))
-      for activity in activity_list:
-        try:
-          activity.flush(self, object_path, method_id=method_id, invoke=1)
-        except AttributeError:
-          LOG('CMFActivity.manageCancel, Warning, could not flush activity on:',0,activity)
+      self.flush(object_path,method_id=method_id,invoke=1)
       if REQUEST is not None:
         return REQUEST.RESPONSE.redirect('%s/%s' % (self.absolute_url(), 'manageActivities'))
 
@@ -372,11 +371,7 @@ class ActivityTool (Folder, UniqueObject):
       """
       if type(object_path) is type(''):
         object_path = tuple(object_path.split('/'))
-      for activity in activity_list:
-        try:
-          activity.flush(self, object_path, method_id=method_id, invoke=0)
-        except AttributeError:
-          LOG('CMFActivity.manageCancel, Warning, could not flush activity on:',0,activity)
+      self.flush(object_path,method_id=method_id,invoke=0)
       if REQUEST is not None:
         return REQUEST.RESPONSE.redirect('%s/%s' % (self.absolute_url(), 'manageActivities'))
 
@@ -415,4 +410,4 @@ class ActivityTool (Folder, UniqueObject):
       return None
 
 
-InitializeClass(ActivityTool)
\ No newline at end of file
+InitializeClass(ActivityTool)
-- 
2.30.9