# # # patch "tracvc/mtn/cache.py" # from [002c9c78cae717b48ab71dec380935bcccd0c473] # to [ee9520b88bf99131896bdb55ec7d977be849ef9f] # ============================================================ --- tracvc/mtn/cache.py 002c9c78cae717b48ab71dec380935bcccd0c473 +++ tracvc/mtn/cache.py ee9520b88bf99131896bdb55ec7d977be849ef9f @@ -147,13 +147,16 @@ Cache.add_backend('localmem', LocalMem) # Unfortunately, dbash (i.e. bsddb) doesn't work reliably, at least on # my system, so we can't simply use anydb, which prefers dbhash. +try: + import shelve + import dbm +except ImportError: + dbm = None + class DBMShelve(LocalMem): """Using Python's shelve on a DBM database.""" def __init__(self, realm, prefix): - import shelve - import dbm - self.dbname = prefix + realm self.cache = shelve.Shelf(dbm.open(self.dbname, 'c')) self.lock = Lock() @@ -164,9 +167,19 @@ class DBMShelve(LocalMem): def flush_all(self): self.cache = Shelf(dbm.open(self.dbname, 'n')) -Cache.add_backend('dbmshelve', DBMShelve) +if dbm: + Cache.add_backend('dbmshelve', DBMShelve) +has_bsddb = False +try: + from bsddb3 import dbshelve, db +except ImportError: + try: + from bsddb import dbshelve, db + except ImportError: + db = None + class BSDDBShelve(Cache): """Using the bsddb3 interface to db.""" @@ -175,14 +188,12 @@ class BSDDBShelve(Cache): @classmethod def get_env(self, dir): if not self.dbenv: - from bsddb3 import db self.dbenv = db.DBEnv() self.dbenv.open(dir, db.DB_INIT_CDB|db.DB_INIT_MPOOL|db.DB_CREATE) return self.dbenv def __init__(self, realm, dir, prefix=''): - from bsddb3 import dbshelve self.dbname = prefix + realm self.cache = dbshelve.open(self.dbname, dbenv=self.get_env(dir)) @@ -196,7 +207,8 @@ class BSDDBShelve(Cache): def get(self, key): return self.cache[key] -Cache.add_backend('bsddb', BSDDBShelve) +if db: + Cache.add_backend('bsddb', BSDDBShelve) def memoize(get_cachespec, realm = None):