[Erp5-report] r16874 - /erp5/trunk/products/ERP5Form/Form.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Oct 5 19:30:31 CEST 2007


Author: yusei
Date: Fri Oct  5 19:30:31 2007
New Revision: 16874

URL: http://svn.erp5.org?rev=16874&view=rev
Log:
Fixed a bug related to DateTime Field. (Thank you yoshinori)

Modified:
    erp5/trunk/products/ERP5Form/Form.py

Modified: erp5/trunk/products/ERP5Form/Form.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/Form.py?rev=16874&r1=16873&r2=16874&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/Form.py (original)
+++ erp5/trunk/products/ERP5Form/Form.py Fri Oct  5 19:30:31 2007
@@ -54,10 +54,21 @@
 # Patch the fiels methods to provide improved namespace handling
 
 from Products.Formulator.Field import Field
-from Products.Formulator.MethodField import Method
+from Products.Formulator.MethodField import Method, BoundMethod
 from Products.Formulator.TALESField import TALESMethod
 
 from zLOG import LOG, PROBLEM
+
+
+def copyMethod(value):
+    if type(aq_base(value)) is Method:
+      value = Method(value.method_name)
+    elif type(aq_base(value)) is TALESMethod:
+      value = TALESMethod(value._text)
+    elif type(aq_base(value)) is BoundMethod:
+      value = BoundMethod(value.object, value.method_name)
+    return value
+
 
 class StaticValue:
   """
@@ -66,8 +77,8 @@
     value as is)
   """
   def __init__(self, value):
-    if isinstance(aq_base(value), Method):
-      value = Method(value.method_name)
+    if isinstance(aq_base(value), (Method, TALESMethod)):
+      value = copyMethod(value)
     self.value = value
 
   def __call__(self, field, id, **kw):
@@ -151,8 +162,8 @@
 
 class OverrideValue(StaticValue):
   def __init__(self, override):
-    if isinstance(aq_base(override), Method):
-      override = Method(override.method_name)
+    if isinstance(aq_base(override), (Method, TALESMethod)):
+      override = copyMethod(override)
     self.override = override
 
   def __call__(self, field, id, **kw):
@@ -161,8 +172,8 @@
 class DefaultValue(StaticValue):
   def __init__(self, field_id, value):
     self.key = field_id[3:]
-    if isinstance(aq_base(value), Method):
-      value = Method(value.method_name)
+    if isinstance(aq_base(value), (Method, TALESMethod)):
+      value = copyMethod(value)
     self.value = value
 
   def __call__(self, field, id, **kw):
@@ -755,18 +766,14 @@
     def proxifyField(self, field_dict=None, REQUEST=None):
         """Convert fields to proxy fields"""
         from Products.ERP5Form.ProxyField import ProxyWidget
-        from Products.Formulator.MethodField import Method
-        from Products.Formulator.TALESField import TALESMethod
 
         def copy(_dict):
             new_dict = {}
             for key, value in _dict.items():
                 if value=='':
                     continue
-                if isinstance(value, Method):
-                    value = Method(value.method_name)
-                elif isinstance(value, TALESMethod):
-                    value = TALESMethod(value._text)
+                if isinstance(aq_base(value), (Method, TALESMethod)):
+                    value = copyMethod(value)
                 elif value is not None and not isinstance(value,
                         (str, unicode, int, long, bool, list, tuple, dict)):
                     raise ValueError, repr(value)
@@ -778,7 +785,7 @@
             type_b = type(b)
             if type_a is not type_b:
                 return False
-            elif type_a is Method:
+            elif type_a is Method or type_a is BoundMethod:
                 return a.method_name==b.method_name
             elif type_a is TALESMethod:
                 return a._text==b._text




More information about the Erp5-report mailing list