From 5fd8c62d56ff93866672335d18820e5c8f766d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 24 Oct 2005 18:47:41 +0000 Subject: [PATCH] * make constructor/destructor a little more flexible --- pisi/lockeddbshelve.py | 39 ++++++++++++++++++++++++--------------- pisi/ui.py | 2 +- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/pisi/lockeddbshelve.py b/pisi/lockeddbshelve.py index 76558af3..681159bb 100644 --- a/pisi/lockeddbshelve.py +++ b/pisi/lockeddbshelve.py @@ -33,6 +33,17 @@ class LockedDBShelf(shelve.DBShelf): def __init__(self, dbname, flags=db.DB_CREATE, mode=0660, filetype=db.DB_HASH, dbenv=None): shelve.DBShelf.__init__(self, dbenv) + filename = os.path.join( pisi.context.config.db_dir(), dbname + '.bdb') + self.open(filename, dbname, filetype, flags, mode) + + def __del__(self): + # superclass does something funky, we don't need that + pass + + def open(self, filename, dbname, filetype, flags, mode): + self.filename = filename + self.closed = False + #print 'open', filename if type(flags) == type(''): sflag = flags if sflag == 'r': @@ -47,30 +58,28 @@ class LockedDBShelf(shelve.DBShelf): flags = db.DB_TRUNCATE | db.DB_CREATE else: raise Error, _("Flags should be one of 'r', 'w', 'c' or 'n' or use the bsddb.db.DB_* flags") - filename = os.path.join( pisi.context.config.db_dir(), dbname + '.bdb') - self.open(filename, dbname, filetype, flags, mode) - self.filename = filename - self.closed = False - - def __del__(self): - # superclass does something funky, we don't need that - pass - - def open(self, filename, dbname, filetype, flags, mode): - #print 'open', filename + self.flags = flags pisi.util.check_dir(pisi.context.config.db_dir()) - self.lockfile = file(filename + '.lock', 'w') + if self.flags != db.DB_RDONLY: + self.lock() + return self.db.open(filename, dbname, filetype, flags, mode) + + def lock(self): + self.lockfile = file(self.filename + '.lock', 'w') try: fcntl.flock(self.lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB) except IOError: raise Error(_("Another instance of PISI is running. Try later!")) - return self.db.open(filename, dbname, filetype, flags, mode) + def close(self): if self.closed: return self.db.close() + if self.flags != db.DB_RDONLY: + self.unlock() + self.closed = True + + def unlock(self): self.lockfile.close() os.unlink(self.filename + '.lock') - #print 'closed', self.filename - self.closed = True diff --git a/pisi/ui.py b/pisi/ui.py index a1ee844f..8d6f661e 100644 --- a/pisi/ui.py +++ b/pisi/ui.py @@ -81,7 +81,7 @@ class UI(object): def confirm(self, msg): "ask a yes/no question" pass - + def display_progress(self, pd): "display progress" pass