[Erp5-report] r15777 - /erp5/trunk/products/ERP5Form/ProxyField.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Aug 22 13:39:06 CEST 2007


Author: jerome
Date: Wed Aug 22 13:39:06 2007
New Revision: 15777

URL: http://svn.erp5.org?rev=15777&view=rev
Log:
Define a generic method to delegate a call to the original field widget. This
method is used by all methods called on the field from page templates: render,
render_view, render_css, render_pdf etc
Also add render_pdf to those methods.


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

Modified: erp5/trunk/products/ERP5Form/ProxyField.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ProxyField.py?rev=15777&r1=15776&r2=15777&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ProxyField.py (original)
+++ erp5/trunk/products/ERP5Form/ProxyField.py Wed Aug 22 13:39:06 2007
@@ -42,11 +42,28 @@
 from Products.PythonScripts.standard import url_quote_plus
 
 from AccessControl import ClassSecurityInfo
-import string
+from MethodObject import Method
 
 from zLOG import LOG, WARNING, DEBUG
 from Acquisition import aq_base, aq_inner, aq_acquire, aq_chain
 from Globals import DTMLFile
+
+
+class WidgetDelegatedMethod(Method):
+  """Method delegated to the proxied field's widget.
+  """
+  def __init__(self, method_id, default=''):
+    self._method_id = method_id
+    self._default = default
+
+  def __call__(self, instance, *args, **kw):
+    field = instance
+    proxied_field = field.getRecursiveTemplateField()
+    if proxied_field:
+      proxied_method = getattr(proxied_field.widget, self._method_id)
+      return proxied_method(field, *args, **kw)
+    return self._default
+
 
 class ProxyWidget(Widget.Widget):
   """
@@ -86,55 +103,15 @@
                                 href='manage_edit_target',
                                 required=0)
 
-  def render(self, field, key, value, REQUEST):
-    """
-    Render proxy field
-    """
-    result = ''
-    proxy_field = field.getRecursiveTemplateField()
-    if proxy_field is not None:
-      result = proxy_field.widget.render(field, key, value, REQUEST)
-    return result
-
-  def render_htmlgrid(self, field, key, value, REQUEST):
-    """
-    Render proxy field
-    """
-    result = ''
-    proxy_field = field.getRecursiveTemplateField()
-    if proxy_field is not None:
-      result = proxy_field.widget.render_htmlgrid(field, key, value, REQUEST)
-    return result
-
-  def render_view(self, field, value):
-    """
-      Display proxy field
-    """
-    result = ''
-    proxy_field = field.getRecursiveTemplateField()
-    if proxy_field is not None:
-      result = proxy_field.widget.render_view(field, value)
-    return result
-
-  def render_css(self, field, REQUEST):
-    """
-    Render proxy field
-    """
-    result = ''
-    proxy_field = field.getRecursiveTemplateField()
-    if proxy_field is not None:
-      result = proxy_field.widget.render_css(field, REQUEST)
-    return result
-
-  def get_javascript_list(self, field, REQUEST):
-    """
-    Render proxy field
-    """
-    result = []
-    proxy_field = field.getRecursiveTemplateField()
-    if proxy_field is not None:
-      result = proxy_field.widget.get_javascript_list(field, REQUEST)
-    return result
+  # Field API Methods, delegated to the template field widget
+  render = WidgetDelegatedMethod('render', default='')
+  render_htmlgrid = WidgetDelegatedMethod('render_htmlgrid', default='')
+  render_view = WidgetDelegatedMethod('render_view', default='')
+  render_pdf = WidgetDelegatedMethod('render_pdf', default='')
+  render_css = WidgetDelegatedMethod('render_css', default='')
+  get_javascript_list = WidgetDelegatedMethod(
+                            'get_javascript_list', default=[])
+
 
 class ProxyValidator(Validator.Validator):
   """




More information about the Erp5-report mailing list