* get rid of the stupid factory method

* make things considerably simpler!
This commit is contained in:
Eray Özkural
2005-08-08 13:15:17 +00:00
parent 8a5340f8c3
commit ff9cd21b61
3 changed files with 30 additions and 40 deletions
-1
View File
@@ -16,7 +16,6 @@
# Authors: Baris Metin <baris@uludag.org.tr
# Eray Ozkural <eray@uludag.org.tr>
from constants import const
from configfile import ConfigurationFile
+5 -3
View File
@@ -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()
+25 -36
View File
@@ -10,53 +10,42 @@
# Please read the COPYING file.
#
# A simple wrapper to implement locking for bsddb's dbshelf
#
# Authors: Eray Ozkural <eray@uludag.org.tr>
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)