source: python/vendor/Python-2.7.6/Demo/classes/Dbm.py

Last change on this file was 2, checked in by Yuri Dario, 15 years ago

Initial import for vendor code.

  • Property svn:eol-style set to native
File size: 1.5 KB
Line 
1# 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
7class Dbm:
8
9 def __init__(self, filename, mode, perm):
10 import dbm
11 self.db = dbm.open(filename, mode, perm)
12
13 def __repr__(self):
14 s = ''
15 for key in self.keys():
16 t = repr(key) + ': ' + repr(self[key])
17 if s: t = ', ' + t
18 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[repr(key)])
26
27 def __setitem__(self, key, value):
28 self.db[repr(key)] = repr(value)
29
30 def __delitem__(self, key):
31 del self.db[repr(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(repr(key))
41
42
43def test():
44 d = Dbm('@dbm', 'rw', 0600)
45 print d
46 while 1:
47 try:
48 key = input('key: ')
49 if d.has_key(key):
50 value = d[key]
51 print 'currently:', value
52 value = input('value: ')
53 if value is 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()
Note: See TracBrowser for help on using the repository browser.