[Zodb-checkins] SVN: ZODB/trunk/src/ DemoStorages now accept constructor athuments, close_base_on_close

Jim Fulton jim at zope.com
Fri May 7 14:44:07 EDT 2010


Log message for revision 112159:
  DemoStorages now accept constructor athuments, close_base_on_close
  and close_changes_on_close, to control whether underlying storages
  are closed when the DemoStorage is closed.
  
  https://bugs.launchpad.net/zodb/+bug/118512
  

Changed:
  U   ZODB/trunk/src/CHANGES.txt
  U   ZODB/trunk/src/ZODB/DemoStorage.py
  U   ZODB/trunk/src/ZODB/DemoStorage.test

-=-
Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt	2010-05-07 17:10:36 UTC (rev 112158)
+++ ZODB/trunk/src/CHANGES.txt	2010-05-07 18:44:06 UTC (rev 112159)
@@ -2,6 +2,18 @@
  Change History
 ================
 
+3.10.0b1 (2010-05-??)
+=====================
+
+New Features
+------------
+
+- DemoStorages now accept constructor athuments, close_base_on_close
+  and close_changes_on_close, to control whether underlying storages
+  are closed when the DemoStorage is closed.
+
+  https://bugs.launchpad.net/zodb/+bug/118512
+
 3.10.0a2 (2010-05-04)
 =====================
 

Modified: ZODB/trunk/src/ZODB/DemoStorage.py
===================================================================
--- ZODB/trunk/src/ZODB/DemoStorage.py	2010-05-07 17:10:36 UTC (rev 112158)
+++ ZODB/trunk/src/ZODB/DemoStorage.py	2010-05-07 18:44:06 UTC (rev 112159)
@@ -38,24 +38,34 @@
         ZODB.interfaces.IStorageIteration,
         )
 
-    def __init__(self, name=None, base=None, changes=None):
-        if base is None:
-            base = ZODB.MappingStorage.MappingStorage()
-            self._temporary_base = True
-        else:
-            self._temporary_base = False
+    def __init__(self, name=None, base=None, changes=None,
+                 close_base_on_close=None, close_changes_on_close=None):
+
+        if close_base_on_close is None:
+            if base is None:
+                base = ZODB.MappingStorage.MappingStorage()
+                close_base_on_close = False
+            else:
+                close_base_on_close = True
+
         self.base = base
+        self.close_base_on_close = close_base_on_close
 
+
         if changes is None:
+            self._temporary_changes = True
             changes = ZODB.MappingStorage.MappingStorage()
             zope.interface.alsoProvides(self, ZODB.interfaces.IBlobStorage)
-            self._temporary_changes = True
+            if close_changes_on_close is None:
+                close_changes_on_close = False
         else:
             if ZODB.interfaces.IBlobStorage.providedBy(changes):
                 zope.interface.alsoProvides(self, ZODB.interfaces.IBlobStorage)
-            self._temporary_changes = False
+            if close_changes_on_close is None:
+                close_changes_on_close = True
 
         self.changes = changes
+        self.close_changes_on_close = close_changes_on_close
 
         self._issued_oids = set()
         self._stored_oids = set()
@@ -88,9 +98,9 @@
         self.changes.cleanup()
 
     def close(self):
-        if not self._temporary_base:
+        if self.close_base_on_close:
             self.base.close()
-        if not self._temporary_changes:
+        if self.close_changes_on_close:
             self.changes.close()
 
     def _copy_methods_from_changes(self, changes):
@@ -222,9 +232,9 @@
 
     def pack(self, t, referencesf, gc=None):
         if gc is None:
-            if self._temporary_base:
+            if self._temporary_changes:
                 return self.changes.pack(t, referencesf)
-        elif self._temporary_base:
+        elif self._temporary_changes:
             return self.changes.pack(t, referencesf, gc=gc)
         elif gc:
             raise TypeError(

Modified: ZODB/trunk/src/ZODB/DemoStorage.test
===================================================================
--- ZODB/trunk/src/ZODB/DemoStorage.test	2010-05-07 17:10:36 UTC (rev 112158)
+++ ZODB/trunk/src/ZODB/DemoStorage.test	2010-05-07 18:44:06 UTC (rev 112159)
@@ -133,6 +133,30 @@
 
     >>> db.close()
 
+Closing demo storages
+=====================
+
+Normally, when a demo storage is closed, it's base and changes
+storage are closed:
+
+    >>> from ZODB.MappingStorage import MappingStorage
+    >>> demo = DemoStorage(base=MappingStorage(), changes=MappingStorage())
+    >>> demo.close()
+    >>> demo.base.opened(), demo.changes.opened()
+    (False, False)
+
+You can pass constructor arguments to control whether the base and
+changes storages should be closed when the demo storage is closed:
+
+    >>> demo = DemoStorage(
+    ...     base=MappingStorage(), changes=MappingStorage(),
+    ...     close_base_on_close=False, close_changes_on_close=False,
+    ...     )
+    >>> demo.close()
+    >>> demo.base.opened(), demo.changes.opened()
+    (True, True)
+
+
 Storage Stacking
 ================
 
@@ -147,7 +171,6 @@
 
 We can also supply an explicit changes storage, if we wish:
 
-    >>> from ZODB.MappingStorage import MappingStorage
     >>> changes = MappingStorage()
     >>> demo3 = demo2.push(changes)
     >>> demo3.changes is changes, demo3.base is demo2
@@ -166,13 +189,8 @@
 --------------------------------------
 
 Normally, when a demo storage is closed, it's base and changes
-storage are closed:
+storage are closed.
 
-    >>> demo = DemoStorage(base=MappingStorage(), changes=MappingStorage())
-    >>> demo.close()
-    >>> demo.base.opened(), demo.changes.opened()
-    (False, False)
-
 Older versions of DemoStorage didn't have a separate changes storage
 and didn't close or discard their changes when they were closed.  When
 a stack was built solely of demo storages, the close method
@@ -354,7 +372,7 @@
     >>> storage = DemoStorage.push(storage)
     >>> random.seed(47)
     >>> storage.new_oid()
-    '\x1a,S\xa4\xe9\xbb\x17\xbd'
+    '8\xaa-\tz\x1dP\x07'
 
 Then we'll force the random number generator to use the same seed for the
 subsequent call to "new_oid" and show that we get a different OID.
@@ -362,7 +380,7 @@
     >>> random.seed(47)
     >>> oid = storage.new_oid()
     >>> oid
-    '\x1a,S\xa4\xe9\xbb\x17\xbe'
+    '8\xaa-\tz\x1dP\x08'
 
 DemoStorage keeps up with the issued OIDs to know when not to reissue them...
 



More information about the Zodb-checkins mailing list