[Erp5-report] r27329 - in /erp5/trunk/products/CMFActivity: ./ Activity/ skins/activity/ te...

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Jun 2 13:53:26 CEST 2009


Author: jm
Date: Tue Jun  2 13:53:25 2009
New Revision: 27329

URL: http://svn.erp5.org?rev=27329&view=rev
Log:
Fix ActiveProcess.hasActivity. On active processes, hasActivity tests active_process_uid instead of path:
* hasActivity must handle the case when no document is provided (bug #1142)
* Fix initialisation of active_process_uid property on Message objects.
Add unit test.

Modified:
    erp5/trunk/products/CMFActivity/ActiveObject.py
    erp5/trunk/products/CMFActivity/Activity/SQLDict.py
    erp5/trunk/products/CMFActivity/Activity/SQLQueue.py
    erp5/trunk/products/CMFActivity/ActivityTool.py
    erp5/trunk/products/CMFActivity/skins/activity/SQLDict_hasMessage.zsql
    erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_hasMessage.zsql
    erp5/trunk/products/CMFActivity/tests/testCMFActivity.py

Modified: erp5/trunk/products/CMFActivity/ActiveObject.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/ActiveObject.py?rev=27329&r1=27328&r2=27329&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/ActiveObject.py [utf8] (original)
+++ erp5/trunk/products/CMFActivity/ActiveObject.py [utf8] Tue Jun  2 13:53:25 2009
@@ -128,8 +128,12 @@
       raise ValueError, "Cannot defined a group_id with value None"
     elif kw.get('group_method_id') is None and kw.get('group_id') is not None:
       raise ValueError, "Cannot defined a group_id without group_method_id"
-    
-    activity_tool = getToolByName(self, 'portal_activities', None)
+
+    portal = self.getPortalObject()
+    if isinstance(active_process, basestring):
+      active_process = portal.unrestrictedTraverse(active_process)
+
+    activity_tool = getattr(portal, 'portal_activities', None)
     if activity_tool is None: return self # Do nothing if no portal_activities
     # activate returns an ActiveWrapper
     # a queue can be provided as well as extra parameters

Modified: erp5/trunk/products/CMFActivity/Activity/SQLDict.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/Activity/SQLDict.py?rev=27329&r1=27328&r2=27329&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/Activity/SQLDict.py [utf8] (original)
+++ erp5/trunk/products/CMFActivity/Activity/SQLDict.py [utf8] Tue Jun  2 13:53:25 2009
@@ -514,7 +514,10 @@
   def hasActivity(self, activity_tool, object, method_id=None, only_valid=None, active_process_uid=None):
     hasMessage = getattr(activity_tool, 'SQLDict_hasMessage', None)
     if hasMessage is not None:
-      my_object_path = '/'.join(object.getPhysicalPath())
+      if object is None:
+        my_object_path = None
+      else:
+        my_object_path = '/'.join(object.getPhysicalPath())
       result = hasMessage(path=my_object_path, method_id=method_id, only_valid=only_valid, active_process_uid=active_process_uid)
       if len(result) > 0:
         return result[0].message_count > 0

Modified: erp5/trunk/products/CMFActivity/Activity/SQLQueue.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/Activity/SQLQueue.py?rev=27329&r1=27328&r2=27329&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/Activity/SQLQueue.py [utf8] (original)
+++ erp5/trunk/products/CMFActivity/Activity/SQLQueue.py [utf8] Tue Jun  2 13:53:25 2009
@@ -360,7 +360,10 @@
   def hasActivity(self, activity_tool, object, method_id=None, only_valid=None, active_process_uid=None):
     hasMessage = getattr(activity_tool, 'SQLQueue_hasMessage', None)
     if hasMessage is not None:
-      my_object_path = '/'.join(object.getPhysicalPath())
+      if object is None:
+        my_object_path = None
+      else:
+        my_object_path = '/'.join(object.getPhysicalPath())
       result = hasMessage(path=my_object_path, method_id=method_id, only_valid=only_valid, active_process_uid=active_process_uid)
       if len(result) > 0:
         return result[0].message_count > 0

Modified: erp5/trunk/products/CMFActivity/ActivityTool.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/ActivityTool.py?rev=27329&r1=27328&r2=27329&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/ActivityTool.py [utf8] (original)
+++ erp5/trunk/products/CMFActivity/ActivityTool.py [utf8] Tue Jun  2 13:53:25 2009
@@ -159,6 +159,7 @@
   Message instances are stored in an activity queue, inside the Activity Tool.
   """
 
+  active_process = None
   active_process_uid = None
 
   def __init__(self, obj, active_process, activity_kw, method_id, args, kw):
@@ -168,11 +169,7 @@
     else:
       self.object_path = obj.getPhysicalPath()
       activity_creation_trace = obj.getPortalObject().portal_activities.activity_creation_trace
-    if type(active_process) is StringType:
-      self.active_process = active_process.split('/')
-    elif active_process is None:
-      self.active_process = None
-    else:
+    if active_process is not None:
       self.active_process = active_process.getPhysicalPath()
       self.active_process_uid = active_process.getUid()
     if activity_kw.get('serialization_tag', False) is None:

Modified: erp5/trunk/products/CMFActivity/skins/activity/SQLDict_hasMessage.zsql
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/skins/activity/SQLDict_hasMessage.zsql?rev=27329&r1=27328&r2=27329&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/skins/activity/SQLDict_hasMessage.zsql [utf8] (original)
+++ erp5/trunk/products/CMFActivity/skins/activity/SQLDict_hasMessage.zsql [utf8] Tue Jun  2 13:53:25 2009
@@ -13,8 +13,8 @@
 only_valid</params>
 SELECT count(path) as message_count FROM
   message
-WHERE
-path = <dtml-sqlvar path type="string">
+WHERE 1 = 1
+<dtml-if expr="path is not None">AND path = <dtml-sqlvar path type="string"> </dtml-if>
 <dtml-if expr="method_id is not None">AND method_id = <dtml-sqlvar method_id type="string"></dtml-if>
 <dtml-if expr="only_valid">AND processing_node > -2</dtml-if>
 <dtml-if expr="active_process_uid is not None"> AND active_process_uid = <dtml-sqlvar active_process_uid type="int"> </dtml-if>

Modified: erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_hasMessage.zsql
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_hasMessage.zsql?rev=27329&r1=27328&r2=27329&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_hasMessage.zsql [utf8] (original)
+++ erp5/trunk/products/CMFActivity/skins/activity/SQLQueue_hasMessage.zsql [utf8] Tue Jun  2 13:53:25 2009
@@ -13,8 +13,8 @@
 only_valid</params>
 SELECT count(path) as message_count FROM
   message_queue
-WHERE
-path = <dtml-sqlvar path type="string">
+WHERE 1 = 1
+<dtml-if expr="path is not None">AND path = <dtml-sqlvar path type="string"> </dtml-if>
 <dtml-if expr="method_id is not None"> AND method_id = <dtml-sqlvar method_id type="string"> </dtml-if>
 <dtml-if expr="only_valid"> AND processing_node > -2 </dtml-if>
 <dtml-if expr="active_process_uid is not None"> AND active_process_uid = <dtml-sqlvar active_process_uid type="int"> </dtml-if>

Modified: erp5/trunk/products/CMFActivity/tests/testCMFActivity.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/tests/testCMFActivity.py?rev=27329&r1=27328&r2=27329&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/tests/testCMFActivity.py [utf8] (original)
+++ erp5/trunk/products/CMFActivity/tests/testCMFActivity.py [utf8] Tue Jun  2 13:53:25 2009
@@ -3251,19 +3251,28 @@
     finally:
       delattr(Organisation, 'waitingActivity')
       Queue.tic = original_queue_tic
-  
-  def test_active_object_hasActivity(self):
+
+  def test_hasActivity(self):
     active_object = self.portal.organisation_module.newContent(
                                             portal_type='Organisation')
-    get_transaction().commit()
-    self.tic()
+    active_process = self.portal.portal_activities.newActiveProcess()
+    get_transaction().commit()
+    self.tic()
+
     self.assertFalse(active_object.hasActivity())
-    for activity in ('SQLDict', 'SQLQueue'):
-      active_object.activate(activity=activity).getTitle()
-      get_transaction().commit()
-      self.assertTrue(active_object.hasActivity(), activity)
-      self.tic()
-      self.assertFalse(active_object.hasActivity(), activity)
+    self.assertFalse(active_process.hasActivity())
+
+    def test(obj, **kw):
+      for activity in ('SQLDict', 'SQLQueue'):
+        active_object.activate(activity=activity, **kw).getTitle()
+        get_transaction().commit()
+        self.assertTrue(obj.hasActivity(), activity)
+        self.tic()
+        self.assertFalse(obj.hasActivity(), activity)
+
+    test(active_object)
+    test(active_process, active_process=active_process)
+    test(active_process, active_process=active_process.getPath())
 
   def test_active_object_hasActivity_does_not_catch_exceptions(self):
     """




More information about the Erp5-report mailing list