Added context manager on ZEOConnectionInfo object class ZTK-1.1
authorThierry Florac <tflorac@ulthar.net>
Thu, 18 Oct 2012 23:43:15 +0200
branchZTK-1.1
changeset 179 612a350cc660
parent 177 b9ad5a9614c4
child 180 ad0c70fceea9
Added context manager on ZEOConnectionInfo object class
src/ztfy/utils/interfaces.py
src/ztfy/utils/zodb.py
--- a/src/ztfy/utils/interfaces.py	Tue Oct 16 08:17:49 2012 +0200
+++ b/src/ztfy/utils/interfaces.py	Thu Oct 18 23:43:15 2012 +0200
@@ -23,7 +23,7 @@
 # import local interfaces
 
 # import Zope3 packages
-from zope.interface import Interface
+from zope.interface import Interface, Attribute
 from zope.schema import TextLine, Int, Password, Bool
 
 # import local packages
@@ -189,6 +189,8 @@
                            required=True,
                            default=False)
 
+    connection = Attribute(_("Opened ZEO connection"))
+
     def getSettings(self):
         """Get ZEO connection setting as a JSON dict"""
 
--- a/src/ztfy/utils/zodb.py	Tue Oct 16 08:17:49 2012 +0200
+++ b/src/ztfy/utils/zodb.py	Thu Oct 18 23:43:15 2012 +0200
@@ -45,6 +45,10 @@
 
     implements(IZEOConnection)
 
+    _storage = None
+    _db = None
+    _connection = None
+
     server_name = FieldProperty(IZEOConnection['server_name'])
     server_port = FieldProperty(IZEOConnection['server_port'])
     storage = FieldProperty(IZEOConnection['storage'])
@@ -79,6 +83,21 @@
         db = DB(storage)
         return (storage, db) if get_storage else db
 
+    @property
+    def connection(self):
+        return self._connection
+
+    def __enter__(self):
+        self._storage, self._db = self.getConnection(get_storage=True)
+        self._connection = self._db.open()
+        return self
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        if self._connection is not None:
+            self._connection.close()
+        if self._storage is not None:
+            self._storage.close()
+
 
 class ZEOConnectionUtility(ZEOConnectionInfo, Persistent, Contained):
     """Persistent ZEO connection settings utility"""