* make constructor/destructor a little more flexible
This commit is contained in:
+24
-15
@@ -33,6 +33,17 @@ class LockedDBShelf(shelve.DBShelf):
|
|||||||
def __init__(self, dbname, flags=db.DB_CREATE, mode=0660,
|
def __init__(self, dbname, flags=db.DB_CREATE, mode=0660,
|
||||||
filetype=db.DB_HASH, dbenv=None):
|
filetype=db.DB_HASH, dbenv=None):
|
||||||
shelve.DBShelf.__init__(self, dbenv)
|
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(''):
|
if type(flags) == type(''):
|
||||||
sflag = flags
|
sflag = flags
|
||||||
if sflag == 'r':
|
if sflag == 'r':
|
||||||
@@ -47,30 +58,28 @@ class LockedDBShelf(shelve.DBShelf):
|
|||||||
flags = db.DB_TRUNCATE | db.DB_CREATE
|
flags = db.DB_TRUNCATE | db.DB_CREATE
|
||||||
else:
|
else:
|
||||||
raise Error, _("Flags should be one of 'r', 'w', 'c' or 'n' or use the bsddb.db.DB_* flags")
|
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.flags = flags
|
||||||
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
|
|
||||||
pisi.util.check_dir(pisi.context.config.db_dir())
|
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:
|
try:
|
||||||
fcntl.flock(self.lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
fcntl.flock(self.lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||||
except IOError:
|
except IOError:
|
||||||
raise Error(_("Another instance of PISI is running. Try later!"))
|
raise Error(_("Another instance of PISI is running. Try later!"))
|
||||||
return self.db.open(filename, dbname, filetype, flags, mode)
|
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
if self.closed:
|
if self.closed:
|
||||||
return
|
return
|
||||||
self.db.close()
|
self.db.close()
|
||||||
|
if self.flags != db.DB_RDONLY:
|
||||||
|
self.unlock()
|
||||||
|
self.closed = True
|
||||||
|
|
||||||
|
def unlock(self):
|
||||||
self.lockfile.close()
|
self.lockfile.close()
|
||||||
os.unlink(self.filename + '.lock')
|
os.unlink(self.filename + '.lock')
|
||||||
#print 'closed', self.filename
|
|
||||||
self.closed = True
|
|
||||||
|
|||||||
+1
-1
@@ -81,7 +81,7 @@ class UI(object):
|
|||||||
def confirm(self, msg):
|
def confirm(self, msg):
|
||||||
"ask a yes/no question"
|
"ask a yes/no question"
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def display_progress(self, pd):
|
def display_progress(self, pd):
|
||||||
"display progress"
|
"display progress"
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user