1e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum# A wrapper around the (optional) built-in class dbm, supporting keys 2e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum# and values of almost any type instead of just string. 3e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum# (Actually, this works only for keys and values that can be read back 4e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum# correctly after being converted to a string.) 5e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 6e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 7e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossumclass Dbm: 8e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 9946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling def __init__(self, filename, mode, perm): 10946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling import dbm 11946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling self.db = dbm.open(filename, mode, perm) 12e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 13946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling def __repr__(self): 14946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling s = '' 15946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling for key in self.keys(): 1670a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald t = repr(key) + ': ' + repr(self[key]) 17946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling if s: t = ', ' + t 18946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling s = s + t 19946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling return '{' + s + '}' 20e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 21946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling def __len__(self): 22946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling return len(self.db) 23e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 24946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling def __getitem__(self, key): 2570a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald return eval(self.db[repr(key)]) 26e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 27946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling def __setitem__(self, key, value): 2870a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald self.db[repr(key)] = repr(value) 29e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 30946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling def __delitem__(self, key): 3170a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald del self.db[repr(key)] 32e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 33946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling def keys(self): 34946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling res = [] 35946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling for key in self.db.keys(): 36946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling res.append(eval(key)) 37946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling return res 38e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 39946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling def has_key(self, key): 4070a6b49821a3226f55e9716f32d802d06640cb89Walter Dörwald return self.db.has_key(repr(key)) 41e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 42e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 43e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossumdef test(): 44946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling d = Dbm('@dbm', 'rw', 0600) 45946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling print d 46946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling while 1: 47946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling try: 48946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling key = input('key: ') 49946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling if d.has_key(key): 50946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling value = d[key] 51946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling print 'currently:', value 52946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling value = input('value: ') 535b63acd31e0e40c1a9a9e9762905b0054ff37994Benjamin Peterson if value is None: 54946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling del d[key] 55946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling else: 56946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling d[key] = value 57946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling except KeyboardInterrupt: 58946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling print '' 59946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling print d 60946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling except EOFError: 61946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling print '[eof]' 62946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling break 63946c53ed7ff53f38792ac35e5da21de3e0a48ef2Andrew M. Kuchling print d 64e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 65e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 66e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossumtest() 67