1 """(g)dbm-compatible interface to MetaKit"""
7 # prevent a second import of this module from spuriously succeeding
8 del sys.modules[__name__]
12 __all__ = ["error", "open"]
18 def __init__(self, file, flag, mode=0666, trans_threshold=1000):
22 self.trans_threshold = trans_threshold
23 self._transcount = 0 # transactions counter - for commiting transactions
25 if flag in ('c', 'n'):
33 self.db = db = Mk4py.storage(file, mode)
35 self.vw = db.getas("hash[key:S,value:S]")
37 self.vw = db.view("hash")
43 return map(lambda x: x.key, self.vw)
48 def has_key(self, key):
49 return self.vw.find(key=key)+1
51 def get(self, key, default=None):
56 def __getitem__(self, key):
63 def __setitem__(self, key, value):
67 vw.append(key=key, value=value)
72 def __delitem__(self, key):
81 if self._closed: return
82 if not self.read_only: self.db.commit()
87 self._transcount = self._transcount + 1
88 if self._transcount == self.trans_threshold:
93 def open(file, flag, mode=0666):
94 return MKhash(file, flag, mode)