[Erp5-report] r16521 - in /erp5/trunk/products/ERP5Form: Form.py tests/testFields.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Sep 20 18:21:01 CEST 2007


Author: yusei
Date: Thu Sep 20 18:21:00 2007
New Revision: 16521

URL: http://svn.erp5.org?rev=16521&view=rev
Log:
Fixed a bug that original persistent Method object is cached.
Persistent object must be cloned before cached.

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

Modified: erp5/trunk/products/ERP5Form/Form.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/Form.py?rev=16521&r1=16520&r2=16521&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/Form.py (original)
+++ erp5/trunk/products/ERP5Form/Form.py Thu Sep 20 18:21:00 2007
@@ -40,6 +40,7 @@
 from Globals import InitializeClass, PersistentMapping, DTMLFile, get_request
 from AccessControl import Unauthorized, getSecurityManager, ClassSecurityInfo
 from ZODB.POSException import ConflictError
+from Acquisition import aq_base
 from Products.PageTemplates.Expressions import SecureModuleImporter
 from Products.ERP5Type.Utils import UpperCase
 
@@ -53,6 +54,7 @@
 # Patch the fiels methods to provide improved namespace handling
 
 from Products.Formulator.Field import Field
+from Products.Formulator.MethodField import Method
 from Products.Formulator.TALESField import TALESMethod
 
 from zLOG import LOG, PROBLEM
@@ -64,6 +66,8 @@
     value as is)
   """
   def __init__(self, value):
+    if type(aq_base(value)) is  Method:
+      value = Method(value.method_name)
     self.value = value
 
   def __call__(self, field, id, **kw):
@@ -143,6 +147,8 @@
 
 class OverrideValue(StaticValue):
   def __init__(self, override):
+    if type(aq_base(override)) is  Method:
+      override = Method(override.method_name)
     self.override = override
 
   def __call__(self, field, id, **kw):
@@ -151,6 +157,8 @@
 class DefaultValue(StaticValue):
   def __init__(self, field_id, value):
     self.key = field_id[3:]
+    if type(aq_base(value)) is  Method:
+      value = Method(value.method_name)
     self.value = value
 
   def __call__(self, field, id, **kw):

Modified: erp5/trunk/products/ERP5Form/tests/testFields.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/tests/testFields.py?rev=16521&r1=16520&r2=16521&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/tests/testFields.py (original)
+++ erp5/trunk/products/ERP5Form/tests/testFields.py Thu Sep 20 18:21:00 2007
@@ -51,9 +51,12 @@
 
 from Products.Formulator.StandardFields import FloatField
 from Products.Formulator.StandardFields import StringField
+from Products.Formulator.MethodField import Method
 
 from Products.ERP5Type.Core.Folder import Folder
-from Products.ERP5Form.Form import ERP5Form, purgeFieldValueCache
+from Products.ERP5Form.Form import ERP5Form
+from Products.ERP5Form.Form import purgeFieldValueCache
+from Products.ERP5Form.Form import getFieldValue
 
 
 class TestFloatField(unittest.TestCase):
@@ -218,10 +221,27 @@
     self.assertEquals('Base_view', proxy_field.get_value('title'))
 
 
+class TestFieldValueCache(unittest.TestCase):
+  """Tests field value caching system
+  """
+  def setUp(self):
+    self.form = ERP5Form('form', 'Form')
+    self.form.field = StringField('test_field')
+    # method field
+    self.form.field.values['external_validator'] = Method('this_is_a_method')
+
+  def test_method_field(self):
+    field = self.form.field
+    value = getFieldValue(field, field, 'external_validator')
+    self.assertEqual(False, value.value is field.values['external_validator'])
+    self.assertEqual(True, type(value.value) is Method)
+
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestFloatField))
   suite.addTest(unittest.makeSuite(TestStringField))
   suite.addTest(unittest.makeSuite(TestProxyField))
+  suite.addTest(unittest.makeSuite(TestFieldValueCache))
   return suite
 




More information about the Erp5-report mailing list