diff --git a/product/ERP5Type/Core/Folder.py b/product/ERP5Type/Core/Folder.py index d11b70620e7e310d945b8eecec06c28479509673..946d5708f36038b900ebc655a38a10479fac13b9 100644 --- a/product/ERP5Type/Core/Folder.py +++ b/product/ERP5Type/Core/Folder.py @@ -445,15 +445,8 @@ class FolderMixIn(ExtensionClass.Base): """ hook_raised = ExceptionRaised() my_getattr = guarded_getattr if restricted else getattr - activate_kw = self.getDefaultActivateParameterDict.im_func(None) - activate_kw.update(kw.get('activate_kw', ())) - activate_kw.setdefault('active_process', None) - activate_kw.setdefault('activity', 'SQLQueue') activate = self.getPortalObject().portal_activities.activateObject validate = restricted and getSecurityManager().validate - cost = activate_kw.setdefault('group_method_cost', .034) # 30 objects - if cost != 1: - activate_kw.setdefault('group_method_id', None) # dummy group method activity_count = kw.get('activity_count', 1000) if activity_count is None: check_limit = lambda: None @@ -464,6 +457,18 @@ class FolderMixIn(ExtensionClass.Base): except KeyError: recurse_stack = [deque(id_list) if id_list else min_id or ''] kw['_recurse_stack'] = recurse_stack + # We are called by user (and not in a subsequent activity). + # Complete activate_kw, without mutating received value. + activate_kw = self.getDefaultActivateParameterDict.im_func(None) + activate_kw.update(kw.get('activate_kw', ())) + activate_kw.setdefault('active_process', None) + activate_kw.setdefault('activity', 'SQLQueue') + cost = activate_kw.setdefault('group_method_cost', .034) # 30 objects + if cost != 1: + activate_kw.setdefault('group_method_id', None) # dummy group method + kw['activate_kw'] = activate_kw + else: + activate_kw = kw['activate_kw'] min_depth = kw.get('min_depth', 0) max_depth = kw.get('max_depth', 0) get_activate_kw_method_id = kw.get('get_activate_kw_method_id') @@ -521,9 +526,10 @@ class FolderMixIn(ExtensionClass.Base): except StopIteration: if hook_raised: raise - activate_kw['group_method_id'] = kw['group_id'] = '' # no grouping - activate_kw['activity'] = 'SQLQueue' - activate(self, **activate_kw)._recurseCallMethod( + reactivate_kw = activate_kw.copy() + reactivate_kw['group_method_id'] = kw['group_id'] = '' # no grouping + reactivate_kw['activity'] = 'SQLQueue' + activate(self, **reactivate_kw)._recurseCallMethod( method_id, method_args, method_kw, restricted=restricted, **kw) security.declarePublic('recurseCallMethod')