[Erp5-report] r20052 - /erp5/trunk/products/ERP5Type/Base.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Mar 19 17:23:48 CET 2008
Author: alex
Date: Wed Mar 19 17:23:48 2008
New Revision: 20052
URL: http://svn.erp5.org?rev=20052&view=rev
Log:
When property A depends on property B, or Property A and B are acquired
ContentProperties, and only one of them is changed, _edit()'s behaviour could
have been unpredictable.
This is fixed by looping once more over unordered and unmodified properties.
Ordered properties (through edit_order) are not affected.
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=20052&r1=20051&r2=20052&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py (original)
+++ erp5/trunk/products/ERP5Type/Base.py Wed Mar 19 17:23:48 2008
@@ -1541,33 +1541,42 @@
modified_property_dict = self._v_modified_property_dict = {}
key_list = kw.keys()
- ordered_key_list = [k for k in key_list if k not in edit_order]
- for k in edit_order:
- if k in key_list:
- ordered_key_list.append(k)
-
- for key in ordered_key_list:
- # We only change if the value is different
- # This may be very long...
- old_value = None
- if not force_update:
- try:
- old_value = self.getProperty(key, evaluate=0)
- except TypeError:
- old_value = self.getProperty(key)
-
- if old_value != kw[key] or force_update:
- # We keep in a thread var the previous values
- # this can be useful for interaction workflow to implement lookups
- # XXX If iteraction workflow script is triggered by edit and calls
- # edit itself, this is useless as the dict will be overwritten
- # If the keep_existing flag is set to 1, we do not update properties which are defined
- if not keep_existing or not self.hasProperty(key):
- modified_property_dict[key] = old_value
- if key != 'id':
- self._setProperty(key, kw[key])
- else:
- self.setId(kw['id'], reindex=reindex_object)
+ unordered_key_list = [k for k in key_list if k not in edit_order]
+ ordered_key_list = [k for k in edit_order if k in key_list]
+ second_try_key_list = []
+
+ def setChangedPropertyList(key_list):
+ not_modified_list = []
+ for key in key_list:
+ # We only change if the value is different
+ # This may be very long...
+ old_value = None
+ if not force_update:
+ try:
+ old_value = self.getProperty(key, evaluate=0)
+ except TypeError:
+ old_value = self.getProperty(key)
+
+ if old_value != kw[key] or force_update:
+ # We keep in a thread var the previous values
+ # this can be useful for interaction workflow to implement lookups
+ # XXX If iteraction workflow script is triggered by edit and calls
+ # edit itself, this is useless as the dict will be overwritten
+ # If the keep_existing flag is set to 1, we do not update properties which are defined
+ if not keep_existing or not self.hasProperty(key):
+ modified_property_dict[key] = old_value
+ if key != 'id':
+ self._setProperty(key, kw[key])
+ else:
+ self.setId(kw['id'], reindex=reindex_object)
+ else:
+ not_modified_list.append(key)
+ return not_modified_list
+
+ unmodified_key_list = setChangedPropertyList(unordered_key_list)
+ setChangedPropertyList(unmodified_key_list)
+ # edit_order MUST be enforced, and done at the complete end
+ setChangedPropertyList(ordered_key_list)
if reindex_object:
# We do not want to reindex the object if nothing is changed
More information about the Erp5-report
mailing list