[Checkins] SVN: Products.ZSQLMethods/trunk/ - LP #142689: Actually use SQL connection titles in the list of

Jens Vagelpohl jens at dataflake.org
Thu Aug 19 06:48:29 EDT 2010


Log message for revision 115792:
  - LP #142689: Actually use SQL connection titles in the list of
    connections returned by SQL.SQLConnectionIDs
  

Changed:
  U   Products.ZSQLMethods/trunk/CHANGES.txt
  U   Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/SQL.py
  A   Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/dummy.py
  U   Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/test_SQL.py

-=-
Modified: Products.ZSQLMethods/trunk/CHANGES.txt
===================================================================
--- Products.ZSQLMethods/trunk/CHANGES.txt	2010-08-19 10:30:44 UTC (rev 115791)
+++ Products.ZSQLMethods/trunk/CHANGES.txt	2010-08-19 10:48:29 UTC (rev 115792)
@@ -4,7 +4,10 @@
 2.13.3 (unreleased)
 -------------------
 
+- LP #142689: Actually use SQL connection titles in the list of 
+  connections returned by SQL.SQLConnectionIDs
 
+
 2.13.2 (2010-07-09)
 -------------------
 

Modified: Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/SQL.py
===================================================================
--- Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/SQL.py	2010-08-19 10:30:44 UTC (rev 115791)
+++ Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/SQL.py	2010-08-19 10:48:29 UTC (rev 115792)
@@ -14,6 +14,8 @@
 from AccessControl.Permissions import change_database_methods
 from AccessControl.SecurityInfo import ClassSecurityInfo
 from App.special_dtml import DTMLFile
+from Acquisition import aq_inner
+from Acquisition import aq_parent
 from Shared.DC.ZRDB.DA import DA
 
 # BBB Zope 2.12
@@ -23,36 +25,37 @@
     from App.class_init import InitializeClass
 
 
-def SQLConnectionIDs(self):
+def SQLConnectionIDs(container):
     """Find SQL database connections in the current folder and above
 
-    This function return a list of ids.
+    This function returns a list of two-element tuples. The second element
+    is the connection ID, the first element either its title, or if the 
+    title is empty, its ID.
     """
-    ids={}
-    have_id=ids.has_key
-    StringType=type('')
+    ids = {}
 
-    while self is not None:
-        if hasattr(self, 'objectValues'):
-            for o in self.objectValues():
-                if (hasattr(o, '_isAnSQLConnection') and o._isAnSQLConnection
-                    and hasattr(o, 'id')):
-                    id = o.id
-                    if type(id) is not StringType:
-                        id = id()
-                    if not have_id(id):
-                        if hasattr(o, 'title_and_id'):
-                            o = o.title_and_id()
+    while container is not None:
+        if getattr(container, 'objectValues', None) is not None:
+            for ob in container.objectValues():
+                if ( getattr(ob, '_isAnSQLConnection', None) and
+                     getattr(ob, 'id', None) ):
+                    ob_id = ob.id
+
+                    if callable(ob_id):
+                        ob_id = ob_id()
+
+                    if ob_id not in ids:
+                        if hasattr(ob, 'title_and_id'):
+                            title = ob.title_and_id()
                         else:
-                            o = id
-                        ids[id] = id
-        if hasattr(self, 'aq_parent'):
-            self=self.aq_parent
-        else:
-            self=None
+                            title = ob_id
+                        ids[ob_id] = title
 
-    ids = map(lambda item: (item[1], item[0]), ids.items())
+        container = aq_parent(aq_inner(container))
+
+    ids = [(item[1], item[0]) for item in ids.items()]
     ids.sort()
+
     return ids
 
 manage_addZSQLMethodForm=DTMLFile('dtml/add', globals())

Added: Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/dummy.py
===================================================================
--- Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/dummy.py	                        (rev 0)
+++ Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/dummy.py	2010-08-19 10:48:29 UTC (rev 115792)
@@ -0,0 +1,21 @@
+# Dummy implementations for unit tests
+
+from Acquisition import Implicit
+from ExtensionClass import Base
+
+class DummySQLConnection(Base, Implicit):
+
+    _isAnSQLConnection = True
+    meta_type = 'Dummy ZSQLConnection'
+
+    def __init__(self, id, title=''):
+        self._id = id
+        self.title = title
+
+    def id(self):
+        return self._id
+
+    def title_and_id(self):
+        if not self.title:
+            return self._id
+        return '%s (%s)' % (self.title, self._id)


Property changes on: Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/dummy.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native

Modified: Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/test_SQL.py
===================================================================
--- Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/test_SQL.py	2010-08-19 10:30:44 UTC (rev 115791)
+++ Products.ZSQLMethods/trunk/src/Products/ZSQLMethods/tests/test_SQL.py	2010-08-19 10:48:29 UTC (rev 115792)
@@ -16,7 +16,52 @@
         verifyClass(IWriteLock, self._getTargetClass())
 
 
+class SQLConnectionIdsTests(unittest.TestCase):
+
+    def setUp(self):
+        from OFS.Folder import Folder
+        from Products.ZSQLMethods.tests.dummy import DummySQLConnection
+        super(SQLConnectionIdsTests, self).setUp()
+
+        self.root = Folder('root')
+        conn1 = DummySQLConnection('conn1', 'Title1')
+        self.root._setObject('conn1', conn1)
+        self.root._setObject('child1', Folder('child1'))
+        conn2 = DummySQLConnection('conn2', 'Title2')
+        self.root.child1._setObject('conn2', conn2)
+        self.root._setObject('child2', Folder('child2'))
+        conn3 = DummySQLConnection('conn3')
+        self.root.child2._setObject('conn3', conn3)
+        self.root.child1._setObject('grandchild1', Folder('grandchild1'))
+        conn4 = DummySQLConnection('conn4')
+        self.root.child1.grandchild1._setObject('conn4', conn4)
+
+    def test_SQLConnectionIDs(self):
+        from Products.ZSQLMethods.SQL import SQLConnectionIDs
+
+        self.assertEqual( SQLConnectionIDs(self.root)
+                        , [('Title1 (conn1)', 'conn1')]
+                        )
+        self.assertEqual( SQLConnectionIDs(self.root.child1)
+                        , [ ('Title1 (conn1)', 'conn1')
+                          , ('Title2 (conn2)', 'conn2')
+                          ]
+                        )
+        self.assertEqual( SQLConnectionIDs(self.root.child1.grandchild1)
+                        , [ ('Title1 (conn1)', 'conn1')
+                          , ('Title2 (conn2)', 'conn2')
+                          , ('conn4', 'conn4')
+                          ]
+                        )
+        self.assertEqual( SQLConnectionIDs(self.root.child2)
+                        , [ ('Title1 (conn1)', 'conn1')
+                          , ('conn3', 'conn3')
+                          ]
+                        )
+
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(SQLMethodTests),
+        unittest.makeSuite(SQLConnectionIdsTests),
         ))



More information about the checkins mailing list