[Erp5-report] r35458 yusei - /erp5/trunk/products/ERP5Form/
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed May 19 14:17:15 CEST 2010
Author: yusei
Date: Wed May 19 14:17:13 2010
New Revision: 35458
URL: http://svn.erp5.org?rev=35458&view=rev
Log:
If original template field of a proxy field has its own get_value
implementation, then stop caching and call registered special function
which should behave as the special get_value method. This change fixes
a bug tested on TestProxyField.test_proxifyParallelListField.
Modified:
erp5/trunk/products/ERP5Form/ParallelListField.py
erp5/trunk/products/ERP5Form/ProxyField.py
Modified: erp5/trunk/products/ERP5Form/ParallelListField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ParallelListField.py?rev=35458&r1=35457&r2=35458&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ParallelListField.py [utf8] (original)
+++ erp5/trunk/products/ERP5Form/ParallelListField.py [utf8] Wed May 19 14:17:13 2010
@@ -232,14 +232,7 @@
Optionally pass keyword arguments that get passed to TALES
expression.
"""
- result = MARKER
- key = KEYWORD % id
- if (REQUEST is not None) and \
- (REQUEST.has_key(key)):
- result = REQUEST.get(key)
- if result is MARKER:
- result = ZMIField.get_value(self, id, REQUEST=REQUEST, **kw)
- return result
+ return paralellListFieldGetValue(self, id, REQUEST=REQUEST, **kw)
def generateSubForm(self, value, REQUEST):
item_list = [x for x in self.get_value('items', REQUEST=REQUEST)
@@ -274,8 +267,20 @@
empty_sub_field_property_dict['value'] = value_list
return [empty_sub_field_property_dict]
+def paralellListFieldGetValue(field, id, REQUEST=None, **kw):
+ result = MARKER
+ key = KEYWORD % id
+ if REQUEST is not None and REQUEST.has_key(key):
+ result = REQUEST.get(key)
+ if result is MARKER:
+ result = ZMIField.get_value(field, id, REQUEST=REQUEST, **kw)
+ return result
+
# Register get_value
from Products.ERP5Form.ProxyField import registerOriginalGetValueClassAndArgument
-registerOriginalGetValueClassAndArgument(ParallelListField,
- ('title', 'required', 'size', 'default', 'first_item', 'items'))
-
+registerOriginalGetValueClassAndArgument(
+ ParallelListField,
+ ('title', 'required', 'size', 'default', 'first_item', 'items'),
+ paralellListFieldGetValue)
+
+
Modified: erp5/trunk/products/ERP5Form/ProxyField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ProxyField.py?rev=35458&r1=35457&r2=35458&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ProxyField.py [utf8] (original)
+++ erp5/trunk/products/ERP5Form/ProxyField.py [utf8] Wed May 19 14:17:13 2010
@@ -648,6 +648,13 @@
"""
Return a callable expression and cacheable boolean flag
"""
+ # Some field types have their own get_value implementation,
+ # then we must use it always. This check must be done at first.
+ template_field = self.getRecursiveTemplateField()
+ # Old ListBox instance might have default attribute. so we need to check it.
+ if checkOriginalGetValue(template_field, id):
+ return _USE_ORIGINAL_GET_VALUE_MARKER, True
+
try:
tales_expr = self.get_tales_expression(id)
except ValueError:
@@ -667,10 +674,6 @@
# Get a normal value.
try:
- template_field = self.getRecursiveTemplateField()
- # Old ListBox instance might have default attribute. so we need to check it.
- if checkOriginalGetValue(template_field, id):
- return _USE_ORIGINAL_GET_VALUE_MARKER, True
value = self.get_recursive_orig_value(id)
except KeyError:
# For ListBox and other exceptional fields.
@@ -698,9 +701,15 @@
security.declareProtected('Access contents information', 'get_value')
def get_value(self, id, **kw):
- if ((id in self.widget.property_names) or
- (not self.is_delegated(id))):
+ if id in self.widget.property_names:
return ZMIField.get_value(self, id, **kw)
+ if not self.is_delegated(id):
+ original_template_field = self.getRecursiveTemplateField()
+ function = getOriginalGetValueFunction(original_template_field, id)
+ if function is not None:
+ return function(self, id, **kw)
+ else:
+ return ZMIField.get_value(self, id, **kw)
field = self
proxy_field = self.getTemplateField()
@@ -770,7 +779,7 @@
#
_get_value_exception_dict = {}
-def registerOriginalGetValueClassAndArgument(class_, argument_name_list=()):
+def registerOriginalGetValueClassAndArgument(class_, argument_name_list=(), get_value_function=None):
"""
if field class has its own get_value implementation and
must use it rather than ProxyField's one, then register it.
@@ -780,14 +789,18 @@
"""
if not isinstance(argument_name_list, (list, tuple)):
argument_name_list = (argument_name_list,)
- _get_value_exception_dict[class_] = argument_name_list
+ if get_value_function is None:
+ get_value_function = ZMIField.get_value
+ _get_value_exception_dict[class_] = {'argument_name_list':argument_name_list,
+ 'get_value_function':get_value_function}
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_)
+ dict_ = _get_value_exception_dict.get(class_, {})
+ argument_name_list = dict_.get('argument_name_list')
if argument_name_list is None:
return False
@@ -798,3 +811,8 @@
if argument_name in argument_name_list:
return True
return False
+
+def getOriginalGetValueFunction(instance, argument_name):
+ class_ = aq_base(instance).__class__
+ dict_ = _get_value_exception_dict.get(class_, {})
+ return dict_.get('get_value_function')
More information about the Erp5-report
mailing list