annotate Demo/classes/Dbm.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 8701b93383ab
children 558689b6d7f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # A wrapper around the (optional) built-in class dbm, supporting keys
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 # and values of almost any type instead of just string.
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # (Actually, this works only for keys and values that can be read back
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 # correctly after being converted to a string.)
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 class Dbm:
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
1377
3543ce88a31e Fix bug and use __init__
Guido van Rossum <guido@python.org>
parents: 945
diff changeset
9 def __init__(self, filename, mode, perm):
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 import dbm
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 self.db = dbm.open(filename, mode, perm)
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 def __repr__(self):
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 s = ''
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 for key in self.keys():
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 t = `key` + ': ' + `self[key]`
1377
3543ce88a31e Fix bug and use __init__
Guido van Rossum <guido@python.org>
parents: 945
diff changeset
17 if s: t = ', ' + t
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 s = s + t
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 return '{' + s + '}'
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 def __len__(self):
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 return len(self.db)
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 def __getitem__(self, key):
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 return eval(self.db[`key`])
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 def __setitem__(self, key, value):
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 self.db[`key`] = `value`
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 def __delitem__(self, key):
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 del self.db[`key`]
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 def keys(self):
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 res = []
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 for key in self.db.keys():
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 res.append(eval(key))
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 return res
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def has_key(self, key):
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 return self.db.has_key(`key`)
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 def test():
1427
8701b93383ab *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1377
diff changeset
44 d = Dbm('@dbm', 'rw', 0600)
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 print d
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 while 1:
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 try:
1427
8701b93383ab *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 1377
diff changeset
48 key = input('key: ')
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 if d.has_key(key):
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 value = d[key]
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 print 'currently:', value
1377
3543ce88a31e Fix bug and use __init__
Guido van Rossum <guido@python.org>
parents: 945
diff changeset
52 value = input('value: ')
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 if value == None:
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 del d[key]
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 else:
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 d[key] = value
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 except KeyboardInterrupt:
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 print ''
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 print d
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 except EOFError:
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 print '[eof]'
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 break
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 print d
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 test()