From e954de0777a5a7c1b6113ca7f4eebda6aed9941b Mon Sep 17 00:00:00 2001 From: Julien Muchembled <jm@nexedi.com> Date: Wed, 11 Aug 2010 08:34:53 +0000 Subject: [PATCH] CMFActivity refactoring: style changes + rewrite some code coming from SQLDict git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@37685 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/CMFActivity/Activity/SQLBase.py | 82 +++++++++++++++---------- 1 file changed, 50 insertions(+), 32 deletions(-) diff --git a/product/CMFActivity/Activity/SQLBase.py b/product/CMFActivity/Activity/SQLBase.py index b2f5f42e86..5eaf42c175 100644 --- a/product/CMFActivity/Activity/SQLBase.py +++ b/product/CMFActivity/Activity/SQLBase.py @@ -135,7 +135,8 @@ class SQLBase: LOG(self.__class__.__name__, severity, summary, error=severity>INFO and sys.exc_info() or None) - def getReservedMessageList(self, activity_tool, date, processing_node, limit=None, group_method_id=None): + def getReservedMessageList(self, activity_tool, date, processing_node, + limit=None, group_method_id=None): """ Get and reserve a list of messages. limit @@ -199,16 +200,14 @@ class SQLBase: limit=limit, group_method_id=group_method_id) if len(line_list): - LOG('SQLDict', TRACE, 'Reserved messages: %r' % ([x.uid for x in line_list])) + self._log(TRACE, 'Reserved messages: %r' % [x.uid for x in line_list]) return line_list def getDuplicateMessageUidList(line): - uid_list = self.getDuplicateMessageUidList(activity_tool=activity_tool, + uid_list = self.getDuplicateMessageUidList(activity_tool=activity_tool, line=line, processing_node=processing_node) if len(uid_list): - LOG('SQLDict', TRACE, 'Reserved duplicate messages: %r' % (uid_list, )) + self._log(TRACE, 'Reserved duplicate messages: %r' % (uid_list, )) return uid_list - def makeMessageListAvailable(uid_list): - self.makeMessageListAvailable(activity_tool=activity_tool, uid_list=uid_list) BUNDLE_MESSAGE_COUNT = 100 # Arbitrary number now_date = self.getNow(activity_tool) message_list = [] @@ -231,7 +230,8 @@ class SQLBase: count += len(m.getObjectList(activity_tool)) if count < MAX_GROUPED_OBJECTS: # Retrieve objects which have the same group method. - result = getReservedMessageList(limit=BUNDLE_MESSAGE_COUNT, group_method_id=group_method_id) + result = getReservedMessageList(limit=BUNDLE_MESSAGE_COUNT, + group_method_id=group_method_id) path_and_method_id_dict = {} unreserve_uid_list = [] for line in result: @@ -246,33 +246,39 @@ class SQLBase: key = (line.path, line.method_id, line.order_validation_text) original_uid = path_and_method_id_dict.get(key) if original_uid is not None: - uid_to_duplicate_uid_list_dict.setdefault(original_uid, []).append(line.uid) + uid_to_duplicate_uid_list_dict.setdefault(original_uid, []) \ + .append(line.uid) continue path_and_method_id_dict[key] = line.uid - uid_to_duplicate_uid_list_dict.setdefault(line.uid, []).extend(getDuplicateMessageUidList(line)) + uid_to_duplicate_uid_list_dict.setdefault(line.uid, []) \ + .extend(getDuplicateMessageUidList(line)) if count < MAX_GROUPED_OBJECTS: m = self.loadMessage(line.message, uid=line.uid, line=line) count += len(m.getObjectList(activity_tool)) message_list.append(m) else: unreserve_uid_list.append(line.uid) - activity_tool.SQLDict_processMessage(uid=[m.uid for m in message_list]) + activity_tool.SQLDict_processMessage( + uid=[m.uid for m in message_list]) # Unreserve extra messages as soon as possible. - makeMessageListAvailable(unreserve_uid_list) - return message_list, count, group_method_id, uid_to_duplicate_uid_list_dict + self.makeMessageListAvailable(activity_tool=activity_tool, + uid_list=unreserve_uid_list) + return (message_list, count, group_method_id, + uid_to_duplicate_uid_list_dict) except: - LOG('SQLDict', WARNING, 'Exception while reserving messages.', error=sys.exc_info()) + self._log(WARNING, 'Exception while reserving messages.') if len(message_list): to_free_uid_list = [m.uid for m in message_list] try: - makeMessageListAvailable(to_free_uid_list) + self.makeMessageListAvailable(activity_tool=activity_tool, + uid_list=to_free_uid_list) except: - LOG('SQLDict', ERROR, 'Failed to free messages: %r' % (to_free_uid_list, ), error=sys.exc_info()) + self._log(ERROR, 'Failed to free messages: %r' % to_free_uid_list) else: if len(to_free_uid_list): - LOG('SQLDict', TRACE, 'Freed messages %r' % (to_free_uid_list, )) + self._log(TRACE, 'Freed messages %r' % to_free_uid_list) else: - LOG('SQLDict', TRACE, '(no message was reserved)') + self._log(TRACE, '(no message was reserved)') return [], 0, None, {} # Queue semantic @@ -282,7 +288,8 @@ class SQLBase: for uid in uid_list: final_uid_list.append(uid) final_uid_list.extend(uid_to_duplicate_uid_list_dict.get(uid, [])) - self.makeMessageListAvailable(activity_tool=activity_tool, uid_list=final_uid_list) + self.makeMessageListAvailable(activity_tool=activity_tool, + uid_list=final_uid_list) message_list, count, group_method_id, uid_to_duplicate_uid_list_dict = \ self.getProcessableMessageList(activity_tool, processing_node) if message_list: @@ -312,23 +319,27 @@ class SQLBase: try: method(*args) except: - LOG('SQLDict', WARNING, 'Exception raised when invoking messages (uid, path, method_id) %r' % ([(m.uid, m.object_path, m.method_id) for m in message_list], ), error=sys.exc_info()) + self._log(WARNING, + 'Exception raised when invoking messages (uid, path, method_id) %r' + % [(m.uid, m.object_path, m.method_id) for m in message_list]) try: transaction.abort() except: - # Unfortunately, database adapters may raise an exception against abort. - LOG('SQLDict', PANIC, + # Unfortunately, database adapters may raise an exception against + # abort. + self._log(PANIC, 'abort failed, thus some objects may be modified accidentally') raise # XXX Is it still useful to free messages now that this node is able # to reselect them ? to_free_uid_list = [x.uid for x in message_list] try: - makeMessageListAvailable(to_free_uid_list, uid_to_duplicate_uid_list_dict) + makeMessageListAvailable(to_free_uid_list, + uid_to_duplicate_uid_list_dict) except: - LOG('SQLDict', ERROR, 'Failed to free messages: %r' % (to_free_uid_list, ), error=sys.exc_info()) + self._log(ERROR, 'Failed to free messages: %r' % to_free_uid_list) else: - LOG('SQLDict', TRACE, 'Freed messages %r' % (to_free_uid_list)) + self._log(TRACE, 'Freed messages %r' % to_free_uid_list) # Abort if something failed. if [m for m in message_list if m.getExecutionState() == MESSAGE_NOT_EXECUTED]: endTransaction = transaction.abort @@ -337,25 +348,32 @@ class SQLBase: try: endTransaction() except: - LOG('SQLDict', WARNING, 'Failed to end transaction for messages (uid, path, method_id) %r' % ([(m.uid, m.object_path, m.method_id) for m in message_list], ), error=sys.exc_info()) + self._log(WARNING, + 'Failed to end transaction for messages (uid, path, method_id) %r' + % [(m.uid, m.object_path, m.method_id) for m in message_list]) if endTransaction == transaction.abort: - LOG('SQLDict', PANIC, 'Failed to abort executed messages. Some objects may be modified accidentally.') + self._log(PANIC, 'Failed to abort executed messages.' + ' Some objects may be modified accidentally.') else: try: transaction.abort() except: - LOG('SQLDict', PANIC, 'Failed to abort executed messages which also failed to commit. Some objects may be modified accidentally.') + self._log(PANIC, 'Failed to abort executed messages which also' + ' failed to commit. Some objects may be modified accidentally.') raise exc_info = sys.exc_info() for m in message_list: - m.setExecutionState(MESSAGE_NOT_EXECUTED, exc_info=exc_info, log=False) + m.setExecutionState(MESSAGE_NOT_EXECUTED, exc_info, log=False) try: - makeMessageListAvailable([x.uid for x in message_list], uid_to_duplicate_uid_list_dict) + makeMessageListAvailable([x.uid for x in message_list], + uid_to_duplicate_uid_list_dict) except: - LOG('SQLDict', ERROR, 'Failed to free remaining messages: %r' % (message_list, ), error=sys.exc_info()) + self._log(ERROR, 'Failed to free remaining messages: %r' + % (message_list, )) else: - LOG('SQLDict', TRACE, 'Freed messages %r' % (message_list, )) - self.finalizeMessageExecution(activity_tool, message_list, uid_to_duplicate_uid_list_dict) + self._log(TRACE, 'Freed messages %r' % (message_list, )) + self.finalizeMessageExecution(activity_tool, message_list, + uid_to_duplicate_uid_list_dict) transaction.commit() return not message_list -- 2.30.9