* get rid of the stupid factory method
* make things considerably simpler!
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
# Authors: Baris Metin <baris@uludag.org.tr
|
# Authors: Baris Metin <baris@uludag.org.tr
|
||||||
# Eray Ozkural <eray@uludag.org.tr>
|
# Eray Ozkural <eray@uludag.org.tr>
|
||||||
|
|
||||||
|
|
||||||
from constants import const
|
from constants import const
|
||||||
from configfile import ConfigurationFile
|
from configfile import ConfigurationFile
|
||||||
|
|
||||||
|
|||||||
+5
-3
@@ -29,9 +29,8 @@ class InstallDBError(Exception):
|
|||||||
class InstallDB:
|
class InstallDB:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
util.check_dir(config.db_dir())
|
from os.path import join
|
||||||
self.db_filename = os.path.join(config.db_dir(), 'install.bdb')
|
self.d = shelve.LockedDBShelf('install')
|
||||||
self.d = shelve.open(self.db_filename)
|
|
||||||
self.files_dir = os.path.join(config.db_dir(), 'files')
|
self.files_dir = os.path.join(config.db_dir(), 'files')
|
||||||
|
|
||||||
def files_name(self, pkg, version, release):
|
def files_name(self, pkg, version, release):
|
||||||
@@ -98,3 +97,6 @@ class InstallDB:
|
|||||||
|
|
||||||
installdb = InstallDB()
|
installdb = InstallDB()
|
||||||
|
|
||||||
|
#def init():
|
||||||
|
# installdb = InstallDB()
|
||||||
|
|
||||||
|
|||||||
+25
-36
@@ -10,53 +10,42 @@
|
|||||||
# Please read the COPYING file.
|
# Please read the COPYING file.
|
||||||
#
|
#
|
||||||
# A simple wrapper to implement locking for bsddb's dbshelf
|
# A simple wrapper to implement locking for bsddb's dbshelf
|
||||||
|
#
|
||||||
# Authors: Eray Ozkural <eray@uludag.org.tr>
|
# Authors: Eray Ozkural <eray@uludag.org.tr>
|
||||||
|
|
||||||
|
|
||||||
import bsddb.dbshelve as shelve
|
import bsddb.dbshelve as shelve
|
||||||
import bsddb.db as db
|
import bsddb.db as db
|
||||||
|
import os
|
||||||
import fcntl
|
import fcntl
|
||||||
|
|
||||||
def open(filename, flags=db.DB_CREATE, mode=0660, filetype=db.DB_HASH,
|
from config import config
|
||||||
dbenv=None, dbname=None):
|
import util
|
||||||
"""
|
|
||||||
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
|
|
||||||
|
|
||||||
class LockedDBShelf(shelve.DBShelf):
|
class LockedDBShelf(shelve.DBShelf):
|
||||||
|
|
||||||
def __init__(self, env = None):
|
def __init__(self, dbname, flags=db.DB_CREATE, mode=0660,
|
||||||
shelve.DBShelf.__init__(self, env)
|
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):
|
def open(self, filename, dbname, filetype, flags, mode):
|
||||||
|
util.check_dir(config.db_dir())
|
||||||
self.lockfile = file(filename + '.lock', 'w')
|
self.lockfile = file(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)
|
||||||
|
|||||||
Reference in New Issue
Block a user