Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import shutil
- from tempfile import mkstemp
- import transaction
- from ZODB import FileStorage, DB
- from ZODB.broken import find_global
- from ZODB.serialize import referencesf
- from persistent.list import PersistentList
- class ZodbFile(object):
- def __init__(self, filename):
- self._filename = filename
- fh, self._tempname = mkstemp(prefix="MyPrefix_", suffix=".fs")
- os.close(fh)
- if filename != "":
- shutil.copyfile(self._filename, self._tempname)
- self._zodb_storage = FileStorage.FileStorage(self._tempname)
- self._zodb_db = DB(self._zodb_storage)
- self._zodb_connection = self._zodb_db.open()
- self._zodb_root = self._zodb_connection.root()
- self._bootstrap()
- def close(self):
- """ close db connection and remove temporary db files """
- transaction.abort()
- self._zodb_connection.close()
- self._zodb_root = None
- # cleanup db files in TMP dir
- for fn in (self._tempname,
- "%s.index" % self._tempname,
- "%s.index_tmp" % self._tempname,
- "%s.lock" % self._tempname,
- "%s.old" % self._tempname,
- "%s.pack" % self._tempname,
- "%s.tmp" % self._tempname):
- try:
- os.unlink(fn)
- except OSError:
- pass
- def dbRoot(self):
- """ return zodb root """
- return self._zodb_root
- def save(self):
- """ save temporary db to original filename """
- self.saveAs(self._filename)
- def saveAs(self, filename):
- """ save temporary db to given filename """
- transaction.commit()
- self._zodb_storage.pack(time(), referencesf)
- shutil.copyfile(self._tempname, filename)
- self._filename = filename
- def _bootstrap(self):
- """ setup internal structure of ZODB """
- root = self._zodb_root
- # do your db initialization and schema migration stuff here...
Add Comment
Please, Sign In to add comment