def get_db_connection(blob_dir): storage = MappingStorage('test') blob_storage = BlobStorage(blob_dir, storage) db = DB(blob_storage) conn = db.open() create_app_root(conn) return conn
def factory(): filestorage = FileStorage(*args, **kw) demostorage = DemoStorage(base=filestorage) blobstorage = BlobStorage(blobstorage_dir, demostorage, layout=blobstorage_layout) return DB(blobstorage, **dbkw)
def testRedo(self): base_storage = FileStorage(self.storagefile) blob_storage = BlobStorage(self.blob_dir, base_storage) database = DB(blob_storage) connection = database.open() root = connection.root() blob = Blob() transaction.begin() blob.open('w').write('this is state 1') root['blob'] = blob transaction.commit() transaction.begin() blob = root['blob'] blob.open('w').write('this is state 2') transaction.commit() database.undo(database.undoLog(0, 1)[0]['id']) transaction.commit() self.assertEqual(blob.open('r').read(), 'this is state 1') serial = base64.encodestring(blob_storage._tid) database.undo(database.undoLog(0, 1)[0]['id']) transaction.commit() self.assertEqual(blob.open('r').read(), 'this is state 2') database.close()
def testUndoAfterConsumption(self): base_storage = FileStorage(self.storagefile) blob_storage = BlobStorage(self.blob_dir, base_storage) database = DB(blob_storage) connection = database.open() root = connection.root() transaction.begin() open('consume1', 'w').write('this is state 1') blob = Blob() blob.consumeFile('consume1') root['blob'] = blob transaction.commit() transaction.begin() blob = root['blob'] open('consume2', 'w').write('this is state 2') blob.consumeFile('consume2') transaction.commit() database.undo(database.undoLog(0, 1)[0]['id']) transaction.commit() self.assertEqual(blob.open('r').read(), 'this is state 1') database.close()
def testDeepCopyCanInvalidate(self): """ Tests regression for invalidation problems related to missing readers and writers values in cloned objects (see http://mail.zope.org/pipermail/zodb-dev/2008-August/012054.html) """ base_storage = FileStorage(self.storagefile) blob_storage = BlobStorage(self.blob_dir, base_storage) database = DB(blob_storage) connection = database.open() root = connection.root() transaction.begin() root['blob'] = Blob() transaction.commit() stream = StringIO() p = Pickler(stream, 1) p.dump(root['blob']) u = Unpickler(stream) stream.seek(0) clone = u.load() clone._p_invalidate() # it should also be possible to open the cloned blob # (even though it won't contain the original data) clone.open()
def patch_testing_db(): # first, make sure the DB has been set up from Testing import ZopeTestCase # then, patch it db = Globals.DB orig_storage = db._storage blob_dir = tempfile.mkdtemp() db._storage = BlobStorage(blob_dir, orig_storage) # provide a cleanup function, return it as callback def cleanup(): db._storage = orig_storage shutil.rmtree(blob_dir) return cleanup
def testUndoWithoutPreviousVersion(self): base_storage = FileStorage(self.storagefile) blob_storage = BlobStorage(self.blob_dir, base_storage) database = DB(blob_storage) connection = database.open() root = connection.root() transaction.begin() root['blob'] = Blob() transaction.commit() database.undo(database.undoLog(0, 1)[0]['id']) transaction.commit() # the blob footprint object should exist no longer self.assertRaises(KeyError, root.__getitem__, 'blob') database.close()
def testRedoOfCreation(self): base_storage = FileStorage(self.storagefile) blob_storage = BlobStorage(self.blob_dir, base_storage) database = DB(blob_storage) connection = database.open() root = connection.root() blob = Blob() transaction.begin() blob.open('w').write('this is state 1') root['blob'] = blob transaction.commit() database.undo(database.undoLog(0, 1)[0]['id']) transaction.commit() self.assertRaises(KeyError, root.__getitem__, 'blob') database.undo(database.undoLog(0, 1)[0]['id']) transaction.commit() self.assertEqual(blob.open('r').read(), 'this is state 1') database.close()
def open(self): from ZODB.blob import BlobStorage base = self.config.base.open() return BlobStorage(self.config.blob_dir, base)
def factory(): filestorage = FileStorage(*args, **kw) blobstorage = BlobStorage(blobstorage_dir, filestorage, layout=blobstorage_layout) return DB(blobstorage, **dbkw)
def get_base_storage(self, **kwargs): storage = self._storage() if 'base_directory' in kwargs: storage = BlobStorage(storage=storage, **kwargs) return storage