Commit f4cb94e8 authored by Jason Madden's avatar Jason Madden Committed by GitHub

Merge pull request #104 from NextThought/issue103

Don't raise an AttributeError when DemoStorage successfully stores a blob first.
parents 10e1326a e3d59568
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
Change History Change History
================ ================
5.0.1 (unreleased)
==================
- Fix an AttributeError that DemoStorage could raise if it was asked
to store a blob into a temporary changes before reading a blob. See
`issue 103 <https://github.com/zopefoundation/ZODB/issues/103>`_.
5.0.0 (2016-09-06) 5.0.0 (2016-09-06)
================== ==================
......
...@@ -379,10 +379,10 @@ class DemoStorage(ConflictResolvingStorage): ...@@ -379,10 +379,10 @@ class DemoStorage(ConflictResolvingStorage):
self.changes.storeBlob( self.changes.storeBlob(
oid, oldserial, data, blobfilename, '', transaction) oid, oldserial, data, blobfilename, '', transaction)
except AttributeError: except AttributeError:
if self._blobify(): if not self._blobify():
self.changes.storeBlob( raise
oid, oldserial, data, blobfilename, '', transaction) self.changes.storeBlob(
raise oid, oldserial, data, blobfilename, '', transaction)
checkCurrentSerialInTransaction = ( checkCurrentSerialInTransaction = (
ZODB.BaseStorage.checkCurrentSerialInTransaction) ZODB.BaseStorage.checkCurrentSerialInTransaction)
......
...@@ -286,6 +286,36 @@ storage wrapped around it when necessary: ...@@ -286,6 +286,36 @@ storage wrapped around it when necessary:
>>> db.close() >>> db.close()
This works even if we first write a blob rather than read a blob:
>>> base = ZODB.blob.BlobStorage('base',
... FileStorage('base.fs', read_only=True))
>>> storage = DemoStorage(base=base)
>>> type(storage.changes).__name__
'MappingStorage'
>>> db = DB(storage)
>>> conn = db.open()
>>> _ = transaction.begin()
>>> conn.root()['blob'] = ZODB.blob.Blob()
>>> with conn.root()['blob'].open('w') as file:
... _ = file.write(b'state 2')
>>> transaction.commit()
>>> type(storage.changes).__name__
'BlobStorage'
>>> with conn.root()['blob'].open() as fp: fp.read()
'state 2'
>>> storage.temporaryDirectory() == storage.changes.temporaryDirectory()
True
>>> db.close()
.. Check that the temporary directory is gone .. Check that the temporary directory is gone
For now, it won't go until the storage does. For now, it won't go until the storage does.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment