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

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Sep 24 21:39:06 CEST 2008


Author: kazuhiko
Date: Wed Sep 24 21:39:05 2008
New Revision: 23796

URL: http://svn.erp5.org?rev=23796&view=rev
Log:
* Don't use cache neither value nor template field if field is not
  stored in zodb, or if target field is defined by a TALES.
* cache an error if template field cache is None.

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=23796&r1=23795&r2=23796&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ProxyField.py (original)
+++ erp5/trunk/products/ERP5Form/ProxyField.py Wed Sep 24 21:39:05 2008
@@ -407,14 +407,22 @@
     """ 
     return self.getTemplateField().get_error_names()
 
-  def getTemplateField(self):
+  def getTemplateField(self, cache='auto'):
     """
     Return template field of the proxy field.
     """
-    try:
-      return self._getTemplateFieldCache()
-    except KeyError:
-      pass
+    if cache == 'auto':
+      tales = self.tales
+      if self._p_oid is None or tales['field_id'] or tales['form_id']:
+        cache = False
+      else:
+        cache = True
+
+    if cache is True:
+      try:
+        return self._getTemplateFieldCache()
+      except KeyError:
+        pass
 
     form = self.aq_parent
     object = form.aq_parent
@@ -427,7 +435,8 @@
           'Could not get a field from a proxy field %s in %s' % \
               (self.id, object.id))
       proxy_field = None
-    self._setTemplateFieldCache(proxy_field)
+    if cache is True:
+      self._setTemplateFieldCache(proxy_field)
     return proxy_field
 
   def getRecursiveTemplateField(self):
@@ -639,13 +648,22 @@
 
   security.declareProtected('Access contents information', 'get_value')
   def get_value(self, id, **kw):
-    REQUEST = get_request()
     if ((id in self.widget.property_names) or
         (not self.is_delegated(id))):
       return ZMIField.get_value(self, id, **kw)
 
+    # Don't use cache if field is not stored in zodb, or if target field is
+    # defined by a TALES
+    if self._p_oid is None or self.tales['field_id'] or self.tales['form_id']:
+      proxy_field = self.getTemplateField(cache=False)
+      if proxy_field is not None:
+        return proxy_field.get_value(id, **kw)
+      else:
+        return None
+
     field = self
-    proxy_field = self.getTemplateField()
+    proxy_field = self.getTemplateField(cache=True)
+    REQUEST = get_request()
     if proxy_field is not None and REQUEST is not None:
       field = REQUEST.get(
         'field__proxyfield_%s_%s_%s' % (self.id, self._p_oid, id),
@@ -653,11 +671,6 @@
       REQUEST.set(
         'field__proxyfield_%s_%s_%s' % (proxy_field.id, proxy_field._p_oid, id),
         field)
-
-    # Don't use cache if field is not stored in zodb, or if target field is
-    # defined by a TALES
-    if self._p_oid is None or self.tales['field_id'] or self.tales['form_id']:
-      return self._get_value(id, **kw)
 
     cache_id = ('ProxyField.get_value',
                 self._p_oid,
@@ -694,9 +707,10 @@
   def _getTemplateFieldCache(self):
     parent = self.aq_parent
     if parent is not None:
-      return getTransactionalVariable(self)[self._getCacheId()].__of__(parent)
-    else:
-      raise KeyError
+      cache = getTransactionalVariable(self)[self._getCacheId()]
+      if cache is not None:
+        return cache.__of__(parent)
+    raise KeyError
 
 
 #




More information about the Erp5-report mailing list