[Erp5-report] r35695 rafael - /erp5/trunk/products/ERP5Type/Base.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri May 28 03:13:18 CEST 2010


Author: rafael
Date: Fri May 28 03:13:16 2010
New Revision: 35695

URL: http://svn.erp5.org?rev=35695&view=rev
Log:
Re-apply http://svn.erp5.org/?view=revision&revision=33677 But now using aq_inner instead aq_base (Thanks Julien M.)

this will prevent authorization problems due acquisition.

Modified:
    erp5/trunk/products/ERP5Type/Base.py

Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=35695&r1=35694&r2=35695&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Base.py [utf8] Fri May 28 03:13:16 2010
@@ -3083,16 +3083,6 @@
 
       fallback_script_id : the script to use if nothing is found
     """
-    def getScriptName(portal_type, method_id): 	 
-      from Products.ERP5Type.Base import Base 	 
-      class_name_list = [base_class.__name__ for base_class in self.__class__.mro() if issubclass(base_class, Base)] 	 
-      script_name_end = '_%s' % method_id 	 
-      for script_name_begin in [portal_type, self.getMetaType()] + class_name_list: 	 
-        name = ''.join([script_name_begin.replace(' ',''), script_name_end]) 	 
-        script = getattr(self, name, None) 	 
-        if script is not None: 	 
-          return name
-
     # script_id should not be used any more, keep compatibility
     if script_id is not None:
       LOG('ERP5Type/Base.getTypeBaseMethod',0,
@@ -3107,12 +3097,22 @@
 
     cache_key = (portal_type, method_id)
     try:
-      name = type_base_cache[cache_key]
+      script = type_base_cache[cache_key]
     except KeyError:
-      name = getScriptName(portal_type, method_id)
-      type_base_cache[cache_key] = name
-    if name is not None:
-      return getattr(self, name)
+      class_name_list = [portal_type, self.getMetaType()] + \
+        [base_class.__name__ for base_class in self.__class__.mro()
+                             if issubclass(base_class, Base)]
+      script_name_end = '_' + method_id
+      for script_name_begin in class_name_list:
+        script_id = script_name_begin.replace(' ','') + script_name_end
+        script = getattr(self, script_id, None)
+        if script is not None:
+          type_base_cache[cache_key] = aq_inner(script)
+          return script
+      type_base_cache[cache_key] = None
+
+    if script is not None:
+      return script.__of__(self)
     if fallback_script_id is not None:
       return getattr(self, fallback_script_id)
 




More information about the Erp5-report mailing list