[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