From ff9cd21b61b736681e942e40a33e413c2adec2bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Mon, 8 Aug 2005 13:15:17 +0000 Subject: [PATCH] * get rid of the stupid factory method * make things considerably simpler! --- pisi/config.py | 1 - pisi/installdb.py | 8 +++--- pisi/lockeddbshelve.py | 61 +++++++++++++++++------------------------- 3 files changed, 30 insertions(+), 40 deletions(-) diff --git a/pisi/config.py b/pisi/config.py index ee8a8d5c..b7e2d088 100644 --- a/pisi/config.py +++ b/pisi/config.py @@ -16,7 +16,6 @@ # Authors: Baris Metin - from constants import const from configfile import ConfigurationFile diff --git a/pisi/installdb.py b/pisi/installdb.py index ea1f5783..e8aa5978 100644 --- a/pisi/installdb.py +++ b/pisi/installdb.py @@ -29,9 +29,8 @@ class InstallDBError(Exception): class InstallDB: def __init__(self): - util.check_dir(config.db_dir()) - self.db_filename = os.path.join(config.db_dir(), 'install.bdb') - self.d = shelve.open(self.db_filename) + from os.path import join + self.d = shelve.LockedDBShelf('install') self.files_dir = os.path.join(config.db_dir(), 'files') def files_name(self, pkg, version, release): @@ -98,3 +97,6 @@ class InstallDB: installdb = InstallDB() +#def init(): +# installdb = InstallDB() + diff --git a/pisi/lockeddbshelve.py b/pisi/lockeddbshelve.py index 5a484434..c77dfa6e 100644 --- a/pisi/lockeddbshelve.py +++ b/pisi/lockeddbshelve.py @@ -10,53 +10,42 @@ # Please read the COPYING file. # # A simple wrapper to implement locking for bsddb's dbshelf - +# # Authors: Eray Ozkural import bsddb.dbshelve as shelve import bsddb.db as db +import os import fcntl -def open(filename, flags=db.DB_CREATE, mode=0660, filetype=db.DB_HASH, - dbenv=None, dbname=None): - """ - A simple factory function for compatibility with the standard - shleve.py module. It can be used like this, where key is a string - and data is a pickleable object: - - from bsddb import dbshelve - db = dbshelve.open(filename) - - db[key] = data - - db.close() - """ - if type(flags) == type(''): - sflag = flags - if sflag == 'r': - flags = db.DB_RDONLY - elif sflag == 'rw': - flags = 0 - elif sflag == 'w': - flags = db.DB_CREATE - elif sflag == 'c': - flags = db.DB_CREATE - elif sflag == 'n': - 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" - - d = LockedDBShelf(dbenv) - d.open(filename, dbname, filetype, flags, mode) - return d +from config import config +import util class LockedDBShelf(shelve.DBShelf): - def __init__(self, env = None): - shelve.DBShelf.__init__(self, env) - + def __init__(self, dbname, flags=db.DB_CREATE, mode=0660, + filetype=db.DB_HASH, dbenv=None): + shelve.DBShelf.__init__(self, dbenv) + if type(flags) == type(''): + sflag = flags + if sflag == 'r': + flags = db.DB_RDONLY + elif sflag == 'rw': + flags = 0 + elif sflag == 'w': + flags = db.DB_CREATE + elif sflag == 'c': + flags = db.DB_CREATE + elif sflag == 'n': + 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( config.db_dir(), dbname + '.bdb') + LockedDBShelf.open(self,filename, dbname, filetype, flags, mode) + def open(self, filename, dbname, filetype, flags, mode): + util.check_dir(config.db_dir()) self.lockfile = file(filename + '.lock', 'w') try: fcntl.flock(self.lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB)