[Zodb-checkins] SVN: ZODB/trunk/src/ Ported fix for TmpStore's
implementation of loadBlob.
Christian Theune
ct at gocept.com
Mon Feb 18 07:02:24 EST 2008
Log message for revision 84018:
Ported fix for TmpStore's implementation of loadBlob.
Changed:
U ZODB/trunk/src/CHANGES.txt
U ZODB/trunk/src/ZODB/Connection.py
U ZODB/trunk/src/ZODB/tests/blob_transaction.txt
U ZODB/trunk/src/ZODB/tests/testblob.py
-=-
Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt 2008-02-18 11:32:30 UTC (rev 84017)
+++ ZODB/trunk/src/CHANGES.txt 2008-02-18 12:02:23 UTC (rev 84018)
@@ -37,6 +37,9 @@
Bugs Fixed
----------
+- Fixed bug in Connection.TmpStore: load() would not defer to the backend
+ storage for loading blobs.
+
- Fix for bug #181712: Make ClientStorage update `lastTransaction` directly
after connecting to a server, even when no cache verification is necessary.
Modified: ZODB/trunk/src/ZODB/Connection.py
===================================================================
--- ZODB/trunk/src/ZODB/Connection.py 2008-02-18 11:32:30 UTC (rev 84017)
+++ ZODB/trunk/src/ZODB/Connection.py 2008-02-18 12:02:23 UTC (rev 84018)
@@ -1244,7 +1244,7 @@
self._storage)
filename = self._getCleanFilename(oid, serial)
if not os.path.exists(filename):
- raise POSKeyError("No blob file", oid, serial)
+ return self._storage.loadBlob(oid, serial)
return filename
def _getBlobPath(self, oid):
Modified: ZODB/trunk/src/ZODB/tests/blob_transaction.txt
===================================================================
--- ZODB/trunk/src/ZODB/tests/blob_transaction.txt 2008-02-18 11:32:30 UTC (rev 84017)
+++ ZODB/trunk/src/ZODB/tests/blob_transaction.txt 2008-02-18 12:02:23 UTC (rev 84018)
@@ -247,7 +247,7 @@
"I'm a happy blob. And I'm singing."
>>> transaction.commit()
-We support optimistic savepoints too:
+We support non-optimistic savepoints too:
>>> root5['blob'].open("a").write(" And I'm dancing.")
>>> root5['blob'].open("r").read()
Modified: ZODB/trunk/src/ZODB/tests/testblob.py
===================================================================
--- ZODB/trunk/src/ZODB/tests/testblob.py 2008-02-18 11:32:30 UTC (rev 84017)
+++ ZODB/trunk/src/ZODB/tests/testblob.py 2008-02-18 12:02:23 UTC (rev 84018)
@@ -443,6 +443,60 @@
"""
+def loadblob_tmpstore():
+ """
+ This is a test for assuring that the TmpStore's loadBlob implementation
+ falls back correctly to loadBlob on the backend.
+
+ First, let's setup a regular database and store a blob:
+
+ >>> import transaction
+ >>> from ZODB.FileStorage.FileStorage import FileStorage
+ >>> from ZODB.blob import BlobStorage
+ >>> from ZODB.DB import DB
+ >>> from ZODB.serialize import referencesf
+ >>> from tempfile import mkdtemp, mktemp
+
+ >>> storagefile = mktemp()
+ >>> base_storage = FileStorage(storagefile)
+ >>> blob_dir = mkdtemp()
+ >>> blob_storage = BlobStorage(blob_dir, base_storage)
+ >>> database = DB(blob_storage)
+ >>> connection = database.open()
+ >>> root = connection.root()
+ >>> from ZODB.blob import Blob
+ >>> root['blob'] = Blob()
+ >>> connection.add(root['blob'])
+ >>> root['blob'].open('w').write('test')
+ >>> import transaction
+ >>> transaction.commit()
+ >>> blob_oid = root['blob']._p_oid
+ >>> tid = blob_storage.lastTransaction()
+
+ Now we open a database with a TmpStore in front:
+
+ >>> database.close()
+
+ >>> from ZODB.Connection import TmpStore
+ >>> tmpstore = TmpStore(blob_storage)
+
+ We can access the blob correctly:
+
+ >>> tmpstore.loadBlob(blob_oid, tid) # doctest: +ELLIPSIS
+ '.../0x01/0x...blob'
+
+ Clean up:
+
+ >>> database.close()
+ >>> import shutil
+ >>> shutil.rmtree(blob_dir)
+
+ >>> os.unlink(storagefile)
+ >>> os.unlink(storagefile+".index")
+ >>> os.unlink(storagefile+".tmp")
+"""
+
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(ZODBBlobConfigTest))
More information about the Zodb-checkins
mailing list