[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