[Erp5-report] r30720 - /erp5/trunk/products/ERP5/Document/BusinessTemplate.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Nov 18 12:59:57 CET 2009


Author: ivan
Date: Wed Nov 18 12:59:53 2009
New Revision: 30720

URL: http://svn.erp5.org?rev=30720&view=rev
Log:
Make sure that enabling a Preference (which generates a reindex activity) in a business template installation is wrapped into proper execution activity order. This is required to prevent calling an recursiveReindexObject on a deleted object. 

Modified:
    erp5/trunk/products/ERP5/Document/BusinessTemplate.py

Modified: erp5/trunk/products/ERP5/Document/BusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BusinessTemplate.py?rev=30720&r1=30719&r2=30720&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] Wed Nov 18 12:59:53 2009
@@ -787,6 +787,23 @@
     """
     pass
 
+  def setSafeReindexationMode(self, context):
+    """
+      Postpone indexations after unindexations.
+      This avoids alarming error messages about a single uid being used
+      by "deleted" path and reindexed object. This can happen here for
+      objects on which the uid was restored: previous object was deleted,
+      hence the "deleted" path, and new object does have the same uid.
+    """
+    original_reindex_parameters = context.getPlacelessDefaultReindexParameters()
+    if original_reindex_parameters is None:
+      original_reindex_parameters = {}
+    activate_kw = original_reindex_parameters.get('activate_kw', {}).copy()
+    activate_kw['after_method_id'] = 'unindexObject'
+    context.setPlacelessDefaultReindexParameters(activate_kw=activate_kw, \
+                                                 **original_reindex_parameters)
+    return original_reindex_parameters
+
   def install(self, context, trashbin, **kw):
     self.beforeInstall()
     update_dict = kw.get('object_to_update')
@@ -817,17 +834,8 @@
       # sort to add objects before their subobjects
       keys = self._objects.keys()
       keys.sort()
-      # Postpone indexations after unindexations.
-      # This avoids alarming error messages about a single uid being used
-      # by "deleted" path and reindexed object. This can happen here for
-      # objects on which the uid was restored: previous object was deleted,
-      # hence the "deleted" path, and new object does have the same uid.
-      original_reindex_parameters = context.getPlacelessDefaultReindexParameters()
-      if original_reindex_parameters is None:
-        original_reindex_parameters = {}
-      activate_kw = original_reindex_parameters.get('activate_kw', {}).copy()
-      activate_kw['after_method_id'] = 'unindexObject'
-      context.setPlacelessDefaultReindexParameters(activate_kw=activate_kw, **original_reindex_parameters)
+      # set safe activities execution order
+      original_reindex_parameters = self.setSafeReindexationMode(context)
       for path in keys:
         if update_dict.has_key(path) or force:
           # get action for the oject
@@ -1036,7 +1044,7 @@
                 group_value_list.remove(widget_id)
           # now set new group object
           obj.groups = new_groups_dict
-      # Remove after_method_id
+      # restore previous activities execution order
       context.setPlacelessDefaultReindexParameters(**original_reindex_parameters)
     else:
       # for old business template format
@@ -1236,11 +1244,15 @@
       pref = portal.unrestrictedTraverse(object_path)
       # XXX getPreferenceState is a bad name
       if pref.getPreferenceState() == 'disabled':
+        # set safe activities execution order
+        original_reindex_parameters = self.setSafeReindexationMode(context)
         portal.portal_workflow.doActionFor(
                       pref,
                       'enable_action',
                       comment="Initialized during Business Template " \
                               "installation.")
+        # restore previous activities execution order
+        context.setPlacelessDefaultReindexParameters(**original_reindex_parameters) 
 
 class CategoryTemplateItem(ObjectTemplateItem):
 




More information about the Erp5-report mailing list