[Erp5-report] r16581 - /erp5/trunk/products/ERP5Form/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Sep 24 19:23:42 CEST 2007


Author: yusei
Date: Mon Sep 24 19:23:42 2007
New Revision: 16581

URL: http://svn.erp5.org?rev=16581&view=rev
Log:
Fixed a bug. if field class had original get_value method and it was registered in ProxyField module, then use it instead of ProxyField's one.

Modified:
    erp5/trunk/products/ERP5Form/ListBox.py
    erp5/trunk/products/ERP5Form/MatrixBox.py
    erp5/trunk/products/ERP5Form/MultiRelationField.py
    erp5/trunk/products/ERP5Form/ParallelListField.py
    erp5/trunk/products/ERP5Form/PlanningBox.py
    erp5/trunk/products/ERP5Form/ProxyField.py
    erp5/trunk/products/ERP5Form/RelationField.py

Modified: erp5/trunk/products/ERP5Form/ListBox.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ListBox.py?rev=16581&r1=16580&r2=16581&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ListBox.py (original)
+++ erp5/trunk/products/ERP5Form/ListBox.py Mon Sep 24 19:23:42 2007
@@ -3322,4 +3322,6 @@
 #psyco.bind(ListBoxWidget.render)
 psyco.bind(ListBoxValidator.validate)
 
-
+# Register get_value
+from Products.ERP5Form.ProxyField import registerOriginalGetValueClassAndArgument
+registerOriginalGetValueClassAndArgument(ListBox, 'default')

Modified: erp5/trunk/products/ERP5Form/MatrixBox.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/MatrixBox.py?rev=16581&r1=16580&r2=16581&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/MatrixBox.py (original)
+++ erp5/trunk/products/ERP5Form/MatrixBox.py Mon Sep 24 19:23:42 2007
@@ -488,3 +488,7 @@
 from Products.ERP5Type.PsycoWrapper import psyco
 psyco.bind(MatrixBoxWidget.render)
 psyco.bind(MatrixBoxValidator.validate)
+
+# Register get_value
+from Products.ERP5Form.ProxyField import registerOriginalGetValueClassAndArgument
+registerOriginalGetValueClassAndArgument(MatrixBox, 'default')

Modified: erp5/trunk/products/ERP5Form/MultiRelationField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/MultiRelationField.py?rev=16581&r1=16580&r2=16581&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/MultiRelationField.py (original)
+++ erp5/trunk/products/ERP5Form/MultiRelationField.py Mon Sep 24 19:23:42 2007
@@ -789,3 +789,7 @@
     else:
       result = ZMIField.get_value(self, id, REQUEST=REQUEST, **kw)
     return result
+
+# Register get_value
+from Products.ERP5Form.ProxyField import registerOriginalGetValueClassAndArgument
+registerOriginalGetValueClassAndArgument(MultiRelationStringField, 'items')

Modified: erp5/trunk/products/ERP5Form/ParallelListField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ParallelListField.py?rev=16581&r1=16580&r2=16581&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ParallelListField.py (original)
+++ erp5/trunk/products/ERP5Form/ParallelListField.py Mon Sep 24 19:23:42 2007
@@ -283,3 +283,8 @@
   if hasattr(self, 'sub_form'):
      delattr(self, 'sub_form')
   return hash_list
+
+
+# Register get_value
+from Products.ERP5Form.ProxyField import registerOriginalGetValueClassAndArgument
+registerOriginalGetValueClassAndArgument(ParallelListField, '*')

Modified: erp5/trunk/products/ERP5Form/PlanningBox.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/PlanningBox.py?rev=16581&r1=16580&r2=16581&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/PlanningBox.py (original)
+++ erp5/trunk/products/ERP5Form/PlanningBox.py Mon Sep 24 19:23:42 2007
@@ -3212,3 +3212,7 @@
               Info):
   InitializeClass(klass)
   allow_class(klass)
+
+# Register get_value
+from Products.ERP5Form.ProxyField import registerOriginalGetValueClassAndArgument
+registerOriginalGetValueClassAndArgument(PlanningBox, 'default')

Modified: erp5/trunk/products/ERP5Form/ProxyField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ProxyField.py?rev=16581&r1=16580&r2=16581&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ProxyField.py (original)
+++ erp5/trunk/products/ERP5Form/ProxyField.py Mon Sep 24 19:23:42 2007
@@ -51,7 +51,6 @@
 from Globals import DTMLFile
 
 from Products.Formulator.TALESField import TALESMethod
-from Products.ERP5Form.ListBox import ListBox
 from Products.ERP5Form.Form import StaticValue, TALESValue, OverrideValue, DefaultValue, EditableValue
 
 _field_value_cache = {}
@@ -532,11 +531,11 @@
     try:
       template_field = self.getRecursiveTemplateField()
       # Old ListBox instance might have default attribute. so we need to check it.
-      if id=='default' and isinstance(aq_base(template_field), ListBox):
+      if checkOriginalGetValue(template_field, id):
         return self._get_value(id, **kw)
       value = self.get_recursive_orig_value(id)
     except KeyError:
-      # For ListBox
+      # For ListBox and other exceptional fields.
       return self._get_value(id, **kw)
 
     field_id = field.id
@@ -599,3 +598,38 @@
     if self.aq_parent:
       raise KeyError
     return getTransactionalVariable(self)[self._getCacheId()].__of__(self.aq_parent)
+
+
+#
+# get_value exception dict
+#
+_get_value_exception_dict = {}
+
+def registerOriginalGetValueClassAndArgument(class_, argument_name_list=()):
+  """
+  if field class has its own get_value implementation and
+  must use it rather than ProxyField's one, then register it.
+
+  if argument_name_list is '*' , original get_value is
+  applied for all arguments.
+  """
+  if not isinstance(argument_name_list, (list, tuple)):
+    argument_name_list = (argument_name_list,)
+  _get_value_exception_dict[class_] = argument_name_list
+
+def checkOriginalGetValue(instance, argument_name):
+  """
+  if exception data is registered, then return True
+  """
+  class_ = aq_base(instance).__class__
+  argument_name_list = _get_value_exception_dict.get(class_)
+
+  if argument_name_list is None:
+    return False
+  
+  if len(argument_name_list)==1 and argument_name_list[0]=='*':
+    return True
+
+  if argument_name in argument_name_list:
+    return True
+  return False

Modified: erp5/trunk/products/ERP5Form/RelationField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/RelationField.py?rev=16581&r1=16580&r2=16581&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/RelationField.py (original)
+++ erp5/trunk/products/ERP5Form/RelationField.py Mon Sep 24 19:23:42 2007
@@ -178,3 +178,7 @@
     else:
       result = ZMIField.get_value(self, id, REQUEST=REQUEST, **kw)
     return result
+
+# Register get_value
+from Products.ERP5Form.ProxyField import registerOriginalGetValueClassAndArgument
+registerOriginalGetValueClassAndArgument(RelationStringField, 'items')




More information about the Erp5-report mailing list