[Erp5-report] r15993 - /erp5/trunk/products/ERP5Type/Base.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Sat Sep 1 16:02:20 CEST 2007
Author: jp
Date: Sat Sep 1 16:02:17 2007
New Revision: 15993
URL: http://svn.erp5.org?rev=15993&view=rev
Log:
Added a workflow method global registry so that it is possible to reset the registrations of transitions and interactions of each workflow method whenever _aq_reset is invoked.
Modified:
erp5/trunk/products/ERP5Type/Base.py
Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=15993&r1=15992&r2=15993&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py (original)
+++ erp5/trunk/products/ERP5Type/Base.py Sat Sep 1 16:02:17 2007
@@ -84,7 +84,16 @@
_MARKER=[]
+global registered_workflow_method_set
wildcard_interaction_method_id_matcher = re.compile(".*[\+\*].*")
+workflow_method_registry = [] # XXX A set() would be better but would require a hash in WorkflowMethod class
+
+def resetRegisteredWorkflowMethod(portal_type=None):
+ """
+ TODO: unwrap workflow methos which were standard methods initially
+ """
+ for method in workflow_method_registry:
+ method.reset(portal_type=portal_type)
class WorkflowMethod(Method):
@@ -208,6 +217,7 @@
"""
transition_list = self._invoke_always.setdefault(portal_type, {}).setdefault(workflow_id, [])
if transition_id not in transition_list: transition_list.append(transition_id)
+ self.register()
def registerTransitionOncePerTransaction(self, portal_type, workflow_id, transition_id):
"""
@@ -216,6 +226,25 @@
"""
transition_list = self._invoke_once.setdefault(portal_type, {}).setdefault(workflow_id, [])
if transition_id not in transition_list: transition_list.append(transition_id)
+ self.register()
+
+ def register(self):
+ """
+ Registers the method so that _aq_reset may later reset it
+ """
+ global registered_workflow_method_set
+ workflow_method_registry.append(self)
+
+ def reset(self, portal_type=None):
+ """
+ Reset the list of registered interactions or transitions
+ """
+ if portal_type:
+ self._invoke_once[portal_type] = {}
+ self._invoke_always[portal_type] = {}
+ else:
+ self._invoke_once = {}
+ self._invoke_always = {}
class ActionMethod(Method):
@@ -239,6 +268,9 @@
# Some method generations are based on portal methods, and portal methods cache results.
# So it is safer to invalidate the cache.
clearCache()
+
+ # Reset workflow methods so that they no longer invoke workflows
+ resetRegisteredWorkflowMethod()
class PropertyHolder:
isRADContent = 1
More information about the Erp5-report
mailing list