[Erp5-report] r31328 jp - /erp5/trunk/products/ERP5/mixin/rule.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Dec 16 13:47:07 CET 2009
Author: jp
Date: Wed Dec 16 13:47:00 2009
New Revision: 31328
URL: http://svn.erp5.org?rev=31328&view=rev
Log:
Comments to highlight code weaknesses.
Modified:
erp5/trunk/products/ERP5/mixin/rule.py
Modified: erp5/trunk/products/ERP5/mixin/rule.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/mixin/rule.py?rev=31328&r1=31327&r2=31328&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/mixin/rule.py [utf8] (original)
+++ erp5/trunk/products/ERP5/mixin/rule.py [utf8] Wed Dec 16 13:47:00 2009
@@ -87,9 +87,15 @@
def test(self, *args, **kw):
"""
If no test method is defined, return False, to prevent infinite loop
+
+ XXX-JPS - I do not understand why
"""
if not self.getTestMethodId():
- return False
+ return False # XXX-JPS - if people are stupid are enough not to configfure predicates,
+ # it is not our role to be clever for them
+ # Rules have a workflow - make sure applicable rule system works
+ # if you wish, add a test here on workflow state to prevent using
+ # rules which are no longer applicable
return Predicate.test(self, *args, **kw)
def expand(self, applied_rule, **kw):
@@ -110,7 +116,7 @@
for movement in applied_rule.getMovementList():
movement.expand(**kw)
- # Implementation of IDivergenceController
+ # Implementation of IDivergenceController # XXX-JPS move to IDivergenceController only mixin for
security.declareProtected( Permissions.AccessContentsInformation,
'isDivergent')
def isDivergent(self, movement, ignore_list=[]):
@@ -170,7 +176,7 @@
# of the form (prevision_movement_dict, list of decision_movement)
prevision_to_decision_map = []
- # XXX First we try to match by 'order' value if possible.
+ # XXX First we try to match by 'order' value if possible. # XXX-JPS implement as DivergenceTester, no ad-hoc here
matched_prevision_list = []
matched_decision_list = []
prevision_order_dict = dict(
@@ -243,7 +249,7 @@
map_list = []
for decision_movement in decision_movement_dict.get(tester_key, ()):
if _compare(tester_list, prevision_movement, decision_movement):
- # XXX is it OK to have more than 2 decision_movements?
+ # XXX is it OK to have more than 2 decision_movements? # XXX-JPS - I think yes
map_list.append(decision_movement)
prevision_to_decision_map.append((prevision_movement, map_list))
@@ -311,7 +317,7 @@
quantity divergence testers
"""
if exclude_quantity:
- return filter(lambda x:x.isTestingProvider() and \
+ return filter(lambda x:x.isTestingProvider() and \ # XXX-JPS name too generic - is it for divergence ? for somehting else ?
x.getTestedProperty() != 'quantity', self.objectValues(
portal_type=self.getPortalDivergenceTesterTypeList()))
else:
@@ -357,6 +363,14 @@
Compares a prevision_movement to decision_movement_list which
are part of the matching group and updates movement_collection_diff
accordingly
+
+ NOTE: this method API implicitely considers that each group of matching
+ movements has 1 prevision_movement (aggregated) for N decision_movement
+ It implies that prevision_movement are "more" aggregated than
+ decision_movement.
+
+ TODO:
+ - is this asumption appropriate ?
"""
# Sample implementation - but it actually looks very generic
# Case 1: movements which are not needed
@@ -425,8 +439,9 @@
# Not Frozen can be updated
kw = {}
for tester in divergence_tester_list:
- if tester.compare(prevision_movement, decision_movement):
+ if tester.compare(prevision_movement, decision_movement):
kw.update(tester.getUpdatablePropertyDict(prevision_movement, decision_movement))
+ # XXX-JPS - there is a risk here that quanity is wrongly updated
if kw:
movement_collection_diff.addUpdatableMovement(decision_movement, kw)
# Second, we calculate if the total quantity is the same on both sides
More information about the Erp5-report
mailing list