[Erp5-report] r32266 kazuhiko - in /erp5/trunk/products/ERP5: Document/ PropertySheet/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Feb 4 15:34:02 CET 2010


Author: kazuhiko
Date: Thu Feb  4 15:34:02 2010
New Revision: 32266

URL: http://svn.erp5.org?rev=32266&view=rev
Log:
set causality to Solver Decision in Target Solver documents under Solver Process.

Modified:
    erp5/trunk/products/ERP5/Document/SolverProcess.py
    erp5/trunk/products/ERP5/PropertySheet/TargetSolver.py

Modified: erp5/trunk/products/ERP5/Document/SolverProcess.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/SolverProcess.py?rev=32266&r1=32265&r2=32266&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/SolverProcess.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/SolverProcess.py [utf8] Thu Feb  4 15:34:02 2010
@@ -84,6 +84,9 @@
     solver_dict = {}
     movement_dict = {}
     types_tool = self.portal_types
+
+    # XXX The following logic does not work if several testers handle
+    # the divergence for the same property.
 
     # First create a mapping between delivery movements and solvers
     #   in order to know for each movements which solvers are needed
@@ -99,18 +102,24 @@
       for movement in decision.getDeliveryValueList():
         # Detect incompatibilities
         movement_solver_dict = movement_dict.setdefault(movement.getRelativeUrl(), {})
-        movement_solver_configuration_dict = movement_solver_dict.setdefault(solver_type, {})
+        movement_solver_configuration_dict = movement_solver_dict.setdefault((solver_type, decision), {})
         movement_solver_configuration_dict[solver_conviguration_key] = None
 
     # Second, make sure solvers do not conflict and configuration is valid
     for movement_url, movement_solver_dict in movement_dict.items():
-      for solver_type, movement_solver_configuration_dict in movement_solver_dict.items():
+      for solver_info, movement_solver_configuration_dict in movement_solver_dict.items():
+        solver_type, decision = solver_info
         solver = types_tool[solver_type]
-        for other_solver_type in movement_solver_dict.keys():
-          if other_solver_type == solver_type:
+        for other_solver_info in movement_solver_dict.keys():
+          if other_solver_info == solver_info:
             continue
-          if solver.conflictsWithSolver(types_tool[other_solver_type]):
-            raise ValueError, "Solver %s conflicts with solver %s on movement %s" % (solver_type, other_solver_type, movement_url)
+          # Try do detect conflict.
+          # XXX it cannot be determined by solver portal type itself, but we
+          # need the information of testers.
+          # if solver.conflictsWithSolver(types_tool[other_solver_type]):
+          if set(decision.getCausalityValue().getTestedPropertyList).intersection(
+              set(other_solver_info[1].getCausalityValue().getTestedPropertyList)):
+            raise ValueError, "Solver %s for %s conflicts with solver %s for %s on movement %s" % (solver_type, decision.getTitle(), other_solver_info[0], other_solver_info[0].getCausalityTitle(), movement_url)
         # Make sure multiple configuration are possible
         try:
           # Solver key contains only those properties which differentiate
@@ -118,15 +127,17 @@
           solver_key = tuple(solver.reduceConfigurationList(movement_solver_configuration_dict.keys()))
         except:
           raise
-        solver_key_dict = solver_dict.setdefault(solver_type, {})
+        solver_key_dict = solver_dict.setdefault(solver_info, {})
         solver_movement_dict = solver_key_dict.setdefault(solver_key, {})
         solver_movement_dict[movement_url] = movement_solver_configuration_dict.keys()
 
     # Third, build target solvers
-    for solver_type, solver_key_dict in solver_dict.items():
+    for solver_info, solver_key_dict in solver_dict.items():
+      solver_type, decision = solver_info
       for solver_key, solver_movement_dict in solver_key_dict.items():
          solver_instance = self.newContent(portal_type=solver_type)
          solver_instance._setDeliveryList(solver_movement_dict.keys())
+         solver_instance.setCausalityValue(decision)
          for movement_url, configuration_list in solver_movement_dict.iteritems():
            for configuration_kw in configuration_list:
              if len(configuration_kw):

Modified: erp5/trunk/products/ERP5/PropertySheet/TargetSolver.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/PropertySheet/TargetSolver.py?rev=32266&r1=32265&r2=32266&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/PropertySheet/TargetSolver.py [utf8] (original)
+++ erp5/trunk/products/ERP5/PropertySheet/TargetSolver.py [utf8] Thu Feb  4 15:34:02 2010
@@ -30,4 +30,4 @@
 from Products.CMFCore.Expression import Expression
 
 class TargetSolver:
-  _categories = ('delivery',)
+  _categories = ('delivery', 'causality')




More information about the Erp5-report mailing list