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 |
|
---|
7 | class 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 |
|
---|
43 | def 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 |
|
---|
66 | test()
|
---|
Note:
See
TracBrowser
for help on using the repository browser.