[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