[Erp5-report] r33942 kazuhiko - /erp5/trunk/products/ERP5/Document/SolverProcess.py

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Mar 22 10:04:49 CET 2010


Author: kazuhiko
Date: Mon Mar 22 10:04:48 2010
New Revision: 33942

URL: http://svn.erp5.org?rev=33942&view=rev
Log:
revert r32266 (set causality to Solver Decision in Target Solver documents under Solver Process), because Target Solver can be invoked without any Solver Decision, and each Target Solver portal type itself should be able to handle conflicts of target solvers.

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

Modified: erp5/trunk/products/ERP5/Document/SolverProcess.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/SolverProcess.py?rev=33942&r1=33941&r2=33942&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/SolverProcess.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/SolverProcess.py [utf8] Mon Mar 22 10:04:48 2010
@@ -83,9 +83,6 @@
     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
@@ -101,24 +98,18 @@
       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, decision), {})
+        movement_solver_configuration_dict = movement_solver_dict.setdefault(solver_type, {})
         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_info, movement_solver_configuration_dict in movement_solver_dict.items():
-        solver_type, decision = solver_info
+      for solver_type, movement_solver_configuration_dict in movement_solver_dict.items():
         solver = types_tool[solver_type]
-        for other_solver_info in movement_solver_dict.keys():
-          if other_solver_info == solver_info:
+        for other_solver_type in movement_solver_dict.keys():
+          if other_solver_type == solver_type:
             continue
-          # 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)
+          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)
         # Make sure multiple configuration are possible
         try:
           # Solver key contains only those properties which differentiate
@@ -126,17 +117,15 @@
           solver_key = tuple(solver.reduceConfigurationList(movement_solver_configuration_dict.keys()))
         except:
           raise
-        solver_key_dict = solver_dict.setdefault(solver_info, {})
+        solver_key_dict = solver_dict.setdefault(solver_type, {})
         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_info, solver_key_dict in solver_dict.items():
-      solver_type, decision = solver_info
+    for solver_type, solver_key_dict in solver_dict.items():
       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):




More information about the Erp5-report mailing list