From c6e376adc2f67430ce6c0d5959a491bedd45f89c Mon Sep 17 00:00:00 2001 From: Julien Muchembled <jm@nexedi.com> Date: Wed, 11 Aug 2010 08:33:56 +0000 Subject: [PATCH] CMFActivity: style changes git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@37682 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/CMFActivity/ActivityTool.py | 74 ++++++++++++----------------- 1 file changed, 30 insertions(+), 44 deletions(-) diff --git a/product/CMFActivity/ActivityTool.py b/product/CMFActivity/ActivityTool.py index 1fe991e082..2332f81f46 100644 --- a/product/CMFActivity/ActivityTool.py +++ b/product/CMFActivity/ActivityTool.py @@ -1174,14 +1174,17 @@ class ActivityTool (Folder, UniqueObject): def invokeGroup(self, method_id, message_list): if self.activity_tracking: - activity_tracking_logger.info('invoking group messages: method_id=%s, paths=%s' % (method_id, ['/'.join(m.object_path) for m in message_list])) + activity_tracking_logger.info( + 'invoking group messages: method_id=%s, paths=%s' + % (method_id, ['/'.join(m.object_path) for m in message_list])) # Invoke a group method. object_list = [] expanded_object_list = [] new_message_list = [] path_dict = {} - # Filter the list of messages. If an object is not available, mark its message as non-executable. - # In addition, expand an object if necessary, and make sure that no duplication happens. + # Filter the list of messages. If an object is not available, mark its + # message as non-executable. In addition, expand an object if necessary, + # and make sure that no duplication happens. for m in message_list: # alternate method is used to segregate objects which cannot be grouped. alternate_method_id = m.activity_kw.get('alternate_method_id') @@ -1195,40 +1198,27 @@ class ActivityTool (Folder, UniqueObject): m.setExecutionState(MESSAGE_NOT_EXECUTABLE, context=self) continue try: - i = len(new_message_list) # This is an index of this message in new_message_list. + i = len(new_message_list) # This is an index of this message + # in new_message_list if m.hasExpandMethod(): - for subobj in m.getObjectList(self): - path = subobj.getPath() - if path not in path_dict: - path_dict[path] = i - if alternate_method_id is not None \ - and hasattr(aq_base(subobj), alternate_method_id): - # if this object is alternated, generate a new single active object. - activity_kw = m.activity_kw.copy() - if 'group_method_id' in activity_kw: - del activity_kw['group_method_id'] - if 'group_id' in activity_kw: - del activity_kw['group_id'] - active_obj = subobj.activate(**activity_kw) - getattr(active_obj, alternate_method_id)(*m.args, **m.kw) - else: - expanded_object_list.append(subobj) + subobject_list = m.getObjectList(self) else: - path = obj.getPath() + subobject_list = (obj,) + for subobj in subobject_list: + path = subobj.getPath() if path not in path_dict: path_dict[path] = i if alternate_method_id is not None \ - and hasattr(aq_base(obj), alternate_method_id): - # if this object is alternated, generate a new single active object. + and hasattr(aq_base(subobj), alternate_method_id): + # if this object is alternated, + # generate a new single active object activity_kw = m.activity_kw.copy() - if 'group_method_id' in activity_kw: - del activity_kw['group_method_id'] - if 'group_id' in activity_kw: - del activity_kw['group_id'] - active_obj = obj.activate(**activity_kw) + activity_kw.pop('group_method_id', None) + activity_kw.pop('group_id', None) + active_obj = subobj.activate(**activity_kw) getattr(active_obj, alternate_method_id)(*m.args, **m.kw) else: - expanded_object_list.append(obj) + expanded_object_list.append(subobj) object_list.append(obj) new_message_list.append(m) except: @@ -1238,8 +1228,9 @@ class ActivityTool (Folder, UniqueObject): if len(expanded_object_list) > 0: method = self.unrestrictedTraverse(method_id) # FIXME: how to apply security here? - # NOTE: expanded_object_list must be set to failed objects by the callee. - # If it fully succeeds, expanded_object_list must be empty when returning. + # NOTE: expanded_object_list must be set to failed objects by the + # callee. If it fully succeeds, expanded_object_list must be + # empty when returning. result = method(expanded_object_list, **m.kw) else: result = None @@ -1247,7 +1238,7 @@ class ActivityTool (Folder, UniqueObject): # In this case, the group method completely failed. exc_info = sys.exc_info() for m in new_message_list: - m.setExecutionState(MESSAGE_NOT_EXECUTED, exc_info=exc_info, log=False) + m.setExecutionState(MESSAGE_NOT_EXECUTED, exc_info, log=False) LOG('WARNING ActivityTool', 0, 'Could not call method %s on objects %s' % (method_id, expanded_object_list), error=exc_info) @@ -1255,22 +1246,17 @@ class ActivityTool (Folder, UniqueObject): if error_log is not None: error_log.raising(exc_info) else: - # Obtain all indices of failed messages. Note that this can be a partial failure. - failed_message_dict = {} - for obj in expanded_object_list: - path = obj.getPath() - i = path_dict[path] - failed_message_dict[i] = None - + # Obtain all indices of failed messages. + # Note that this can be a partial failure. + failed_message_set = set(path_dict[obj.getPath()] + for obj in expanded_object_list) # Only for succeeded messages, an activity process is invoked (if any). - for i in xrange(len(object_list)): - object = object_list[i] - m = new_message_list[i] - if i in failed_message_dict: + for i, m in enumerate(new_message_list): + if i in failed_message_set: m.setExecutionState(MESSAGE_NOT_EXECUTED, context=self) else: try: - m.activateResult(self, result, object) + m.activateResult(self, result, object_list[i]) except: m.setExecutionState(MESSAGE_NOT_EXECUTED, context=self) else: -- GitLab