[Erp5-report] r30404 - /erp5/trunk/products/ZSQLCatalog/SQLCatalog.py

nobody at svn.erp5.org nobody at svn.erp5.org
Sun Nov 8 15:01:11 CET 2009


Author: yo
Date: Sun Nov  8 15:01:11 2009
New Revision: 30404

URL: http://svn.erp5.org?rev=30404&view=rev
Log:
Make catalogObjectList slightly faster.

Modified:
    erp5/trunk/products/ZSQLCatalog/SQLCatalog.py

Modified: erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SQLCatalog.py?rev=30404&r1=30403&r2=30404&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] Sun Nov  8 15:01:11 2009
@@ -1383,11 +1383,13 @@
       if not disable_cache:
         enableReadOnlyTransactionCache(self)
 
+      filter_dict = self.filter_dict
+      isMethodFiltered = self.isMethodFiltered
       for method_name in method_id_list:
-        kw = {}
-        if self.isMethodFiltered(method_name):
+        if isMethodFiltered(method_name):
           catalogged_object_list = []
-          filter = self.filter_dict[method_name]
+          append = catalogged_object_list.append
+          filter = filter_dict[method_name]
           type_set = frozenset(filter['type']) or None
           expression = filter['expression_instance']
           expression_cache_key_list = filter.get('expression_cache_key', '').split()
@@ -1405,7 +1407,7 @@
                 # objects but we could also use over multiple transactions
                 # if this can improve performance significantly
                 try:
-                  cache_key = map(lambda key: object.getProperty(key, None), expression_cache_key_list)
+                  cache_key = (object.getProperty(key, None) for key in expression_cache_key_list)
                     # ZZZ - we could find a way to compute this once only
                   cache_key = (method_name, tuple(cache_key))
                   result = expression_result_cache[cache_key]
@@ -1427,7 +1429,7 @@
                 expression_result_cache[cache_key] = result
               if not result:
                 continue
-            catalogged_object_list.append(object)
+            append(object)
         else:
           catalogged_object_list = object_list
 
@@ -1444,12 +1446,14 @@
             method.func_code.co_varnames[:method.func_code.co_argcount]
         else:
           arguments = []
+        kw = {}
         for arg in arguments:
           value_list = []
           append = value_list.append
           for object in catalogged_object_list:
+            argument_cache_key = (object.uid, arg)
             try:
-              value = argument_cache[(object.uid, arg)]
+              value = argument_cache[argument_cache_key]
             except KeyError:
               try:
                 value = getattr(object, arg, None)
@@ -1462,7 +1466,7 @@
                     (arg, object), error=sys.exc_info())
                 value = None
               if not disable_cache:
-                argument_cache[(object.uid, arg)] = value
+                argument_cache[argument_cache_key] = value
             append(value)
           kw[arg] = value_list
 




More information about the Erp5-report mailing list