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

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Feb 25 17:49:04 CET 2009


Author: vincent
Date: Wed Feb 25 17:49:03 2009
New Revision: 25715

URL: http://svn.erp5.org?rev=25715&view=rev
Log:
Restore support for scriptable keys.

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=25715&r1=25714&r2=25715&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] Wed Feb 25 17:49:03 2009
@@ -1812,6 +1812,26 @@
         related_key_definition_cache[key] = result
     return result
 
+  @transactional_cache_decorator('SQLCatalog._getgetScriptableKeyDict')
+  def _getgetScriptableKeyDict(self):
+    result = {}
+    for scriptable_key_definition in self.sql_catalog_scriptable_keys:
+      split_scriptable_key_definition = scriptable_key_definition.split('|')
+      if len(split_scriptable_key_definition) != 2:
+        LOG('SQLCatalog', 100, 'Malformed scriptable key definition: %r. Ignored.' % (scriptable_key_definition, ))
+        continue
+      key, script_id = [x.strip() for x in split_scriptable_key_definition]
+      script = getattr(self, script_id, None)
+      if script is None:
+        LOG('SQLCatalog', 100, 'Scriptable key %r script %r is missing.' \
+            ' Skipped.' % (key, script_id))
+      else:
+        result[key] = script
+    return result
+
+  def getScriptableKeyScript(self, key):
+    return self._getgetScriptableKeyDict().get(key)
+
   @profiler_decorator
   def getColumnSearchKey(self, key, search_key_name=None):
     """
@@ -1859,14 +1879,18 @@
       From key and value, determine the SearchKey to use and generate a Query
       from it.
     """
-    search_key, related_key_definition = self.getColumnSearchKey(key, search_key_name)
-    if search_key is None:
-      result = None
+    script = self.getScriptableKeyScript(key)
+    if script is None:
+      search_key, related_key_definition = self.getColumnSearchKey(key, search_key_name)
+      if search_key is None:
+        result = None
+      else:
+        if related_key_definition is None:
+          result = search_key.buildQuery(value, logical_operator=logical_operator, comparison_operator=comparison_operator)
+        else:
+          result = search_key.buildQuery(search_value=value, sql_catalog=self, search_key_name=search_key_name, related_key_definition=related_key_definition, logical_operator=logical_operator, comparison_operator=comparison_operator)
     else:
-      if related_key_definition is None:
-        result = search_key.buildQuery(value, logical_operator=logical_operator, comparison_operator=comparison_operator)
-      else:
-        result = search_key.buildQuery(search_value=value, sql_catalog=self, search_key_name=search_key_name, related_key_definition=related_key_definition, logical_operator=logical_operator, comparison_operator=comparison_operator)
+      result = script(value)
     return result
 
   @profiler_decorator




More information about the Erp5-report mailing list