[Erp5-report] r25773 - in /erp5/trunk/products/ZSQLCatalog: ./ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Mar 2 13:18:15 CET 2009


Author: vincent
Date: Mon Mar  2 13:18:14 2009
New Revision: 25773

URL: http://svn.erp5.org?rev=25773&view=rev
Log:
Revert commit 25752 to change implementation of ScriptableKeys. Add a test.
  A "ScriptableKey" configuration is not a SearchKey, strictly speaking: a
  SearchKey generates Query instances from a value (the SearchKey contains the
  column information), and ScriptableKey's "script" does exactly that. So
  there is no need for any SearchKey to generate those Queries, so it's better
  to fix the feature at getColumnDefaultSearchKey caller's level.

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

Modified: erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SQLCatalog.py?rev=25773&r1=25772&r2=25773&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] Mon Mar  2 13:18:14 2009
@@ -1861,22 +1861,19 @@
        - If returned SearchKey is a RelatedKey, value is its definition
        - Otherwise, value is None
     """
-    # Is key a "real" column or some related key or scriptable key?
+    # Is key a "real" column or some related key ?
     related_key_definition = None
     if key in self.getColumnMap():
       search_key = self.getSearchKey(key, search_key_name)
     else:
       # Maybe a related key...
       related_key_definition = self.getRelatedKeyDefinition(key)
-      if related_key_definition is not None:
+      if related_key_definition is None:
+        # Unknown
+        search_key = None
+      else:
         # It's a related key
         search_key = self.getSearchKey(key, 'RelatedKey')
-      elif self.getScriptableKeyScript(key) is not None:
-        # It's a scriptable key
-        search_key = self.getSearchKey(key, 'RawKey')
-      else:
-        # Unknown
-        search_key = None
     return search_key, related_key_definition
 
   @profiler_decorator
@@ -1998,9 +1995,12 @@
           implicit_table_list.append(key)
         LOG('buildQuery', WARNING, 'Discarding empty value for key %r: %r' % (key, value))
       else:
+        script = self.getScriptableKeyScript(key)
         if isinstance(value, _Query):
           # Query instance: use as such, ignore key.
           result = value
+        elif script is not None:
+          result = script(value)
         elif isinstance(value, basestring):
           # String: parse using key's default search key.
           search_key = self.getColumnDefaultSearchKey(key)

Modified: erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py?rev=25773&r1=25772&r2=25773&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py [utf8] Mon Mar  2 13:18:14 2009
@@ -116,6 +116,7 @@
 
   sql_catalog_keyword_search_keys = ('keyword', )
   sql_catalog_datetime_search_keys = ('date', )
+  sql_catalog_scriptable_keys = ('scriptable_keyword | scriptableKeyScript', )
 
   def getColumnMap(self):
     return {
@@ -140,6 +141,9 @@
     assert 'table_1' in kw
     assert len(kw) == 4
     return '%(table_0)s.uid = %(query_table)s.uid AND %(table_0)s.other_uid = %(table_1)s' % kw
+
+  def scriptableKeyScript(self, value):
+    return SimpleQuery(operator='=', keyword=value)
 
 class TestSQLCatalog(unittest.TestCase):
   def setUp(self):
@@ -285,6 +289,10 @@
                    , operator='and'), operator='and'),
                  {'query': ComplexQuery(Query(related_default='a'), Query(related_default='b'))})
 
+  def test_007_testScriptableKey(self):
+    self.catalog(ReferenceQuery(ReferenceQuery(operator='=', keyword='%a%'), operator='and'),
+                 {'scriptable_keyword': '%a%'})
+
 ##return catalog(title=Query(title='a', operator='not'))
 #return catalog(title={'query': 'a', 'operator': 'not'})
 #return catalog(title={'query': ['a', 'b'], 'operator': 'not'})




More information about the Erp5-report mailing list