Dbm.py revision e876949f2b8a68646cac269cff9fd1c71975d3ac
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 Rossumdef opendbm(filename, mode, perm): 8e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum return Dbm().init(filename, mode, perm) 9e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 10e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 11e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossumclass Dbm: 12e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 13e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum def init(self, filename, mode, perm): 14e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum import dbm 15e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum self.db = dbm.open(filename, mode, perm) 16e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum return self 17e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 18e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum def __repr__(self): 19e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum s = '' 20e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum for key in self.keys(): 21e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum t = `key` + ': ' + `self[key]` 22e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum if s: t = t + ', ' 23e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum s = s + t 24e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum return '{' + s + '}' 25e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 26e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum def __len__(self): 27e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum return len(self.db) 28e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 29e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum def __getitem__(self, key): 30e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum return eval(self.db[`key`]) 31e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 32e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum def __setitem__(self, key, value): 33e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum self.db[`key`] = `value` 34e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 35e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum def __delitem__(self, key): 36e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum del self.db[`key`] 37e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 38e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum def keys(self): 39e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum res = [] 40e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum for key in self.db.keys(): 41e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum res.append(eval(key)) 42e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum return res 43e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 44e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum def has_key(self, key): 45e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum return self.db.has_key(`key`) 46e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 47e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 48e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossumdef test(): 49e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum d = opendbm('@dbm', 'rw', 0666) 50e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum print d 51e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum while 1: 52e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum try: 53e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum key = eval(raw_input('key: ')) 54e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum if d.has_key(key): 55e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum value = d[key] 56e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum print 'currently:', value 57e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum value = eval(raw_input('value: ')) 58e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum if value == None: 59e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum del d[key] 60e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum else: 61e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum d[key] = value 62e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum except KeyboardInterrupt: 63e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum print '' 64e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum print d 65e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum except EOFError: 66e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum print '[eof]' 67e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum break 68e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum print d 69e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 70e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossum 71e876949f2b8a68646cac269cff9fd1c71975d3acGuido van Rossumtest() 72