[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS/Services/ConnectionService - ConnectionService.py:1.2 IConnectionAdding.py:1.2 configure.zcml:1.2

Stephan Richter srichter@cbu.edu
Wed, 10 Jul 2002 19:52:48 -0400


Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Services/ConnectionService
In directory cvs.zope.org:/tmp/cvs-serv6998

Modified Files:
	ConnectionService.py IConnectionAdding.py configure.zcml 
Log Message:
Finished up the Connectoin Service and provide views for Database Adapters.


=== Zope3/lib/python/Zope/App/OFS/Services/ConnectionService/ConnectionService.py 1.1 => 1.2 ===
 # FOR A PARTICULAR PURPOSE.
 # 
 ##############################################################################
-"""$Id$
 """
+$Id$
+"""
+from types import TupleType
+
+from Zope.ComponentArchitecture import queryNextService
+from Zope.ContextWrapper import ContextMethod
 
-from Zope.ComponentArchitecture import getNextService
-from IConnectionManager import IConnectionManager
-from Persistence import PersistentMapping, Persistent
+from Zope.App.OFS.Container.IContainer import IHomogenousContainer, IContainer
+from Zope.App.OFS.Container.BTreeContainer import BTreeContainer
 
-class ConnectionService(Persistent):
+from Zope.App.RDB.IConnectionService import IConnectionService
+from Zope.App.RDB.IZopeDatabaseAdapter import IZopeDatabaseAdapter
+
+class ILocalConnectionService(IConnectionService, IContainer,
+                              IHomogenousContainer):
+    """TTW manageable connection service"""
     
-    __implements__ = IConnectionManager
 
-    def __init__(self):
-        self.__connections = PersistentMapping()
+class ConnectionService(BTreeContainer):
+
+    __implements__ =  ILocalConnectionService
 
-    # IContainer methods
-    def __getitem__(self, key):
-        """see interface Zope.App.OFS.Container.IContainer."""
-        return self.__connections[key]
-
-    def get(self, key, default=None):
-        """see interface Zope.App.OFS.Container.IContainer."""        
-        return self.__connections.get(key, default)
-
-    def __contains__(self, key):
-        """see interface Zope.App.OFS.Container.IContainer."""        
-        return self.__connections.has_key(key)
-
-    def keys(self):
-        """see interface Zope.App.OFS.Container.IContainer."""        
-        return self.__connections.keys()
-
-    def values(self):
-        """see interface Zope.App.OFS.Container.IContainer."""        
-        return self.__connections.values()
-
-    def items(self):
-        """see interface Zope.App.OFS.Container.IContainer."""        
-        return self.__connections.items()
-
-    def __len__(self):
-        """see interface Zope.App.OFS.Container.IContainer."""        
-        return len(self.__connections)
-
-    def setObject(self, key, object):
-        """see interface Zope.App.OFS.Container.IContainer."""        
-        self.__connections[key] = object
-        return object
-
-    def __delitem__(self, key):
-        """see interface Zope.App.OFS.Container.IContainer."""        
-        del self.__connections[key]
+    ############################################################
+    # Implementation methods for interface
+    # Zope.App.RDB.ConnectionService.ILocalConnectionService
+
+    ######################################
+    # from: Zope.App.RDB.IConnectionService.IConnectionService
 
-    # IConnectionService methods
     def getConnection(self, name):
-        """see interface Zope.App.RDB.IConnectionService """
-        return self[name]()
-        
-    def queryConnection(self, name, default):
-        """see interface Zope.App.RDB.IConnectionService """        
-        return self.get(name, default)()
+        'See Zope.App.RDB.IConnectionService.IConnectionService'
+        return self.__getitem__(name)()
+
+    def queryConnection(self, name, default=None):
+        'See Zope.App.RDB.IConnectionService.IConnectionService' 
+        adapter = self.get(name, default)
+        if adapter is not default:
+            return adapter()
+        return default
 
     def getAvailableConnections(self):
-        """Returns the connections known to this connection service"""
-        # XXX, not yet
-        # connections = self.keys()
-        # return connections + \getNextService(self, "ConnectionService").getAvailableConnections()
-    
+        'See Zope.App.RDB.IConnectionService.IConnectionService'
+        connections = list(self.keys())
+        service = queryNextService(self, "ConnectionService")
+        if service is not None:
+            connections.append(service.getAvailableConnections())
+        return connections
+
+    getAvailableConnections = ContextMethod(getAvailableConnections)
+
+    ######################################
+    # from: Zope.App.OFS.Container.IContainer.IHomogenousContainer
+
+    def isAddable(self, interfaces):
+        'See Zope.App.OFS.Container.IContainer.IHomogenousContainer'
+        if type(interfaces) != TupleType:
+            interfaces = (interfaces,)
+        if IZopeDatabaseAdapter in interfaces:
+            return 1
+        return 0
+
+    #
+    ############################################################


=== Zope3/lib/python/Zope/App/OFS/Services/ConnectionService/IConnectionAdding.py 1.1 => 1.2 ===
 # FOR A PARTICULAR PURPOSE.
 # 
 ##############################################################################
-"""XXX short summary goes here.
-
-XXX longer description goes here.
-
-$Id$
+"""$Id$
 """
 
 from Zope.App.OFS.Container.IAdding import IAdding


=== Zope3/lib/python/Zope/App/OFS/Services/ConnectionService/configure.zcml 1.1 => 1.2 ===
 <zopeConfigure
-   xmlns='http://namespaces.zope.org/zope'
-   xmlns:browser='http://namespaces.zope.org/browser'
-
-   xmlns:service='http://namespaces.zope.org/service'
->
-  <content class=".ConnectionService.">
-
-    <factory
-        id="ConnectionService"
-        permission="Zope.ManageServices"
-        />
+     xmlns='http://namespaces.zope.org/zope'>
 
+<content class=".ConnectionService.">
+  <factory id="ConnectionService" permission="Zope.ManageServices" />
     <require
         permission="Zope.View"
         interface="Zope.App.RDB.IConnectionService." />
     <require
         permission="Zope.ManageServices"
         interface="Zope.App.OFS.Container.IContainer." />
+</content>
 
-  </content>
-
-  <browser:menuItem menu="add_service" for="Zope.App.OFS.Container.IAdding."
-     action="ConnectionService"  title="RDBMS Connection Service" />
-
-  <include package=".Views" />
+<include package=".Views" />
 
 </zopeConfigure>