[Erp5-report] r31884 seb - in /erp5/trunk/products: ERP5Catalog/tests/ ZSQLCatalog/ ZSQLCat...

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jan 21 16:30:21 CET 2010


Author: seb
Date: Thu Jan 21 16:30:20 2010
New Revision: 31884

URL: http://svn.erp5.org?rev=31884&view=rev
Log:
* define getProperty on zsqlbrain in order to get values
  either on the brain or on the real object
* update unit test for getProperty
* add new method hasColumn in catalog API
* add test for hasColumn

Modified:
    erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py
    erp5/trunk/products/ZSQLCatalog/Extensions/zsqlbrain.py
    erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
    erp5/trunk/products/ZSQLCatalog/ZSQLCatalog.py
    erp5/trunk/products/ZSQLCatalog/interfaces/query_catalog.py
    erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py

Modified: erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py?rev=31884&r1=31883&r2=31884&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py [utf8] (original)
+++ erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py [utf8] Thu Jan 21 16:30:20 2010
@@ -3932,17 +3932,28 @@
     # Make sure that we are able to retrieve data directly from mysql
     # without retrieving real objects
     title="foo"
-    person = person_module.newContent(portal_type='Person',title=title)
+    description = "foobar"
+    person = person_module.newContent(portal_type='Person',title=title,
+                                      description=description)
     person_uid = person.getUid()
     person.immediateReindexObject()
     folder_object_list = person_module.searchFolder(uid=person_uid, select_dict={'title': None})
     new_title = 'bar'
+    new_description = 'foobarfoo'
     person.setTitle(new_title)
+    person.setDescription(new_description)
     self.assertEquals(new_title, person.getTitle())
     expected_sql_title_list = [title]
-    self.assertEquals([x.title for x in folder_object_list], expected_sql_title_list)
+    self.assertEquals([x.title for x in folder_object_list],
+                      expected_sql_title_list)
+    self.assertEquals([x.getProperty('title') for x in
+                      folder_object_list], expected_sql_title_list)
+    expected_sql_description_list = [new_description]
+    self.assertEquals([x.getProperty('description') for x in
+                      folder_object_list], expected_sql_description_list)
     real_title_list = [new_title]
-    self.assertEquals([x.getTitle() for x in folder_object_list], real_title_list)
+    self.assertEquals([x.getTitle() for x in
+                      folder_object_list], real_title_list)
 
 def test_suite():
   suite = unittest.TestSuite()

Modified: erp5/trunk/products/ZSQLCatalog/Extensions/zsqlbrain.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Extensions/zsqlbrain.py?rev=31884&r1=31883&r2=31884&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Extensions/zsqlbrain.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Extensions/zsqlbrain.py [utf8] Thu Jan 21 16:30:20 2010
@@ -21,6 +21,8 @@
 from AccessControl.SecurityInfo import allow_class
 
 from zLOG import LOG
+
+_MARKER = []
 
 class  ZSQLBrain(Acquisition.Implicit):
   security = ClassSecurityInfo()
@@ -69,6 +71,19 @@
           error=sys.exc_info() )
       return None
 
+  def getProperty(self, name, d=_MARKER, **kw):
+    value = None
+    if hasattr(self, name):
+      value = getattr(self, name)
+    else:
+      if d is not _MARKER:
+        kw['d'] = d
+      document = self.getObject()
+      if document is None:
+        raise AttributeError(name)
+      value = document.getProperty(name, **kw)
+    return value
+
   def absolute_url(self, relative=0):
     """
       Default method used to return the path stored in the Catalog.

Modified: erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SQLCatalog.py?rev=31884&r1=31883&r2=31884&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] Thu Jan 21 16:30:20 2010
@@ -1867,6 +1867,9 @@
         # It's a related key
         search_key = self.getSearchKey(key, 'RelatedKey')
     return search_key, related_key_definition
+
+  def hasColumn(self, column):
+    return self.getColumnSearchKey(column)[0] is not None
 
   @profiler_decorator
   def getColumnDefaultSearchKey(self, key):

Modified: erp5/trunk/products/ZSQLCatalog/ZSQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/ZSQLCatalog.py?rev=31884&r1=31883&r2=31884&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/ZSQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/ZSQLCatalog.py [utf8] Thu Jan 21 16:30:20 2010
@@ -992,6 +992,12 @@
       return catalog.getColumnIds()
     return []
 
+  def hasColumn(self, column, sql_catalog_id=None):
+    catalog = self.getSQLCatalog(sql_catalog_id)
+    if catalog is not None:
+      return catalog.hasColumn(column)
+    return False
+
   def getAttributesForColumn(self, column, sql_catalog_id=None):
     """
       Return the attribute names as a single string

Modified: erp5/trunk/products/ZSQLCatalog/interfaces/query_catalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/interfaces/query_catalog.py?rev=31884&r1=31883&r2=31884&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/interfaces/query_catalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/interfaces/query_catalog.py [utf8] Thu Jan 21 16:30:20 2010
@@ -174,6 +174,12 @@
       There is one comparison operator instance per possible string value.
     """
 
+  def hasColumn(column):
+    """
+      Check if the given column or virtual column (in case
+      of related keys) exists or not
+    """
+
   # TODO: add support for other operators (logical, ensemblist (?))
 
   def searchResults(REQUEST=None, **kw):

Modified: erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py?rev=31884&r1=31883&r2=31884&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/tests/testSQLCatalog.py [utf8] Thu Jan 21 16:30:20 2010
@@ -534,6 +534,10 @@
     self.assertTrue('ambiguous_mapping' in select_dict, select_dict)
     self.assertTrue('bar' in select_dict['ambiguous_mapping'], select_dict['ambiguous_mapping'])
 
+  def test_hasColumn(self):
+    self.assertTrue(self._catalog.hasColumn('uid'))
+    self.assertFalse(self._catalog.hasColumn('foobar'))
+
 ##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