* make constructor/destructor a little more flexible

This commit is contained in:
Eray Özkural
2005-10-24 18:47:41 +00:00
parent 46e9a94292
commit 5fd8c62d56
2 changed files with 25 additions and 16 deletions
+24 -15
View File
@@ -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
+1 -1
View File
@@ -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