[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