blob: 8d7fe0f8f4b282717fb94ece4489e8da5d338275 [file] [log] [blame]
Guido van Rossume8769491992-08-13 12:14:11 +00001# A wrapper around the (optional) built-in class dbm, supporting keys
2# and values of almost any type instead of just string.
3# (Actually, this works only for keys and values that can be read back
4# correctly after being converted to a string.)
5
6
Guido van Rossume8769491992-08-13 12:14:11 +00007class Dbm:
8
Guido van Rossumbecec311993-10-30 12:38:16 +00009 def __init__(self, filename, mode, perm):
Guido van Rossume8769491992-08-13 12:14:11 +000010 import dbm
11 self.db = dbm.open(filename, mode, perm)
Guido van Rossume8769491992-08-13 12:14:11 +000012
13 def __repr__(self):
14 s = ''
15 for key in self.keys():
16 t = `key` + ': ' + `self[key]`
Guido van Rossumbecec311993-10-30 12:38:16 +000017 if s: t = ', ' + t
Guido van Rossume8769491992-08-13 12:14:11 +000018 s = s + t
19 return '{' + s + '}'
20
21 def __len__(self):
22 return len(self.db)
23
24 def __getitem__(self, key):
25 return eval(self.db[`key`])
26
27 def __setitem__(self, key, value):
28 self.db[`key`] = `value`
29
30 def __delitem__(self, key):
31 del self.db[`key`]
32
33 def keys(self):
34 res = []
35 for key in self.db.keys():
36 res.append(eval(key))
37 return res
38
39 def has_key(self, key):
40 return self.db.has_key(`key`)
41
42
43def test():
Guido van Rossum7565b931993-12-17 14:23:52 +000044 d = Dbm('@dbm', 'rw', 0600)
Guido van Rossume8769491992-08-13 12:14:11 +000045 print d
46 while 1:
47 try:
Guido van Rossum7565b931993-12-17 14:23:52 +000048 key = input('key: ')
Guido van Rossume8769491992-08-13 12:14:11 +000049 if d.has_key(key):
50 value = d[key]
51 print 'currently:', value
Guido van Rossumbecec311993-10-30 12:38:16 +000052 value = input('value: ')
Guido van Rossume8769491992-08-13 12:14:11 +000053 if value == None:
54 del d[key]
55 else:
56 d[key] = value
57 except KeyboardInterrupt:
58 print ''
59 print d
60 except EOFError:
61 print '[eof]'
62 break
63 print d
64
65
66test()