From df7be7b557f72edc67f177662daa8c3ea2d59a0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 24 Oct 2005 19:06:33 +0000 Subject: [PATCH] * smart constructor that falls back to read-only access when there aren't sufficient permissions --- pisi/lockeddbshelve.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pisi/lockeddbshelve.py b/pisi/lockeddbshelve.py index 681159bb..0b8d7edd 100644 --- a/pisi/lockeddbshelve.py +++ b/pisi/lockeddbshelve.py @@ -30,17 +30,23 @@ class Error(pisi.Error): class LockedDBShelf(shelve.DBShelf): """A simple wrapper to implement locking for bsddb's dbshelf""" - def __init__(self, dbname, flags=db.DB_CREATE, mode=0660, + def __init__(self, dbname, mode=0660, filetype=db.DB_HASH, dbenv=None): shelve.DBShelf.__init__(self, dbenv) filename = os.path.join( pisi.context.config.db_dir(), dbname + '.bdb') + if os.access(os.path.dirname(filename), os.W_OK): + flags = 'w' + elif os.access(filename, os.R_OK): + flags = 'r' + else: + raise Error(_('Cannot attain read or write access to database %s') % dbname) 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): + def open(self, filename, dbname, filetype, flags=db.DB_CREATE, mode=0660): self.filename = filename self.closed = False #print 'open', filename