symbian-qemu-0.9.1-12/python-2.6.1/Demo/classes/Dbm.py
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Demo/classes/Dbm.py	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,66 @@
+# A wrapper around the (optional) built-in class dbm, supporting keys
+# and values of almost any type instead of just string.
+# (Actually, this works only for keys and values that can be read back
+# correctly after being converted to a string.)
+
+
+class Dbm:
+
+    def __init__(self, filename, mode, perm):
+        import dbm
+        self.db = dbm.open(filename, mode, perm)
+
+    def __repr__(self):
+        s = ''
+        for key in self.keys():
+            t = repr(key) + ': ' + repr(self[key])
+            if s: t = ', ' + t
+            s = s + t
+        return '{' + s + '}'
+
+    def __len__(self):
+        return len(self.db)
+
+    def __getitem__(self, key):
+        return eval(self.db[repr(key)])
+
+    def __setitem__(self, key, value):
+        self.db[repr(key)] = repr(value)
+
+    def __delitem__(self, key):
+        del self.db[repr(key)]
+
+    def keys(self):
+        res = []
+        for key in self.db.keys():
+            res.append(eval(key))
+        return res
+
+    def has_key(self, key):
+        return self.db.has_key(repr(key))
+
+
+def test():
+    d = Dbm('@dbm', 'rw', 0600)
+    print d
+    while 1:
+        try:
+            key = input('key: ')
+            if d.has_key(key):
+                value = d[key]
+                print 'currently:', value
+            value = input('value: ')
+            if value is None:
+                del d[key]
+            else:
+                d[key] = value
+        except KeyboardInterrupt:
+            print ''
+            print d
+        except EOFError:
+            print '[eof]'
+            break
+    print d
+
+
+test()