1 """Provide a (g)dbm-compatible interface to MetaKit.
2 Author: Oleg Broytman <phd@phd.pp.ru>
3 Copyright (C) 2001-2002 PhiloSoft Design
11 # prevent a second import of this module from spuriously succeeding
12 del sys.modules[__name__]
16 __all__ = ["error", "open"]
22 def __init__(self, file, flag, mode=0666, trans_threshold=1000):
26 self.trans_threshold = trans_threshold
27 self._transcount = 0 # transactions counter - for commiting transactions
29 if flag in ('c', 'n'):
37 self.db = db = Mk4py.storage(file, mode)
39 self.vw = db.getas("hash[key:S,value:S]")
41 self.vw = db.view("hash")
47 return map(lambda x: x.key, self.vw)
52 def has_key(self, key):
53 return self.vw.find(key=key)+1
55 def get(self, key, default=None):
60 def __getitem__(self, key):
67 def __setitem__(self, key, value):
71 vw.append(key=key, value=value)
76 def __delitem__(self, key):
85 if self._closed: return
86 if not self.read_only: self.db.commit()
91 self._transcount = self._transcount + 1
92 if self._transcount == self.trans_threshold:
97 def open(file, flag, mode=0666):
98 return MKhash(file, flag, mode)