symbian-qemu-0.9.1-12/python-2.6.1/Tools/scripts/pickle2db.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/Tools/scripts/pickle2db.py	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,147 @@
+#!/usr/bin/env python
+
+"""
+Synopsis: %(prog)s [-h|-b|-g|-r|-a|-d] [ picklefile ] dbfile
+
+Read the given picklefile as a series of key/value pairs and write to a new
+database.  If the database already exists, any contents are deleted.  The
+optional flags indicate the type of the output database:
+
+    -a - open using anydbm
+    -b - open as bsddb btree file
+    -d - open as dbm file
+    -g - open as gdbm file
+    -h - open as bsddb hash file
+    -r - open as bsddb recno file
+
+The default is hash.  If a pickle file is named it is opened for read
+access.  If no pickle file is named, the pickle input is read from standard
+input.
+
+Note that recno databases can only contain integer keys, so you can't dump a
+hash or btree database using db2pickle.py and reconstitute it to a recno
+database with %(prog)s unless your keys are integers.
+
+"""
+
+import getopt
+try:
+    import bsddb
+except ImportError:
+    bsddb = None
+try:
+    import dbm
+except ImportError:
+    dbm = None
+try:
+    import gdbm
+except ImportError:
+    gdbm = None
+try:
+    import anydbm
+except ImportError:
+    anydbm = None
+import sys
+try:
+    import cPickle as pickle
+except ImportError:
+    import pickle
+
+prog = sys.argv[0]
+
+def usage():
+    sys.stderr.write(__doc__ % globals())
+
+def main(args):
+    try:
+        opts, args = getopt.getopt(args, "hbrdag",
+                                   ["hash", "btree", "recno", "dbm", "anydbm",
+                                    "gdbm"])
+    except getopt.error:
+        usage()
+        return 1
+
+    if len(args) == 0 or len(args) > 2:
+        usage()
+        return 1
+    elif len(args) == 1:
+        pfile = sys.stdin
+        dbfile = args[0]
+    else:
+        try:
+            pfile = open(args[0], 'rb')
+        except IOError:
+            sys.stderr.write("Unable to open %s\n" % args[0])
+            return 1
+        dbfile = args[1]
+
+    dbopen = None
+    for opt, arg in opts:
+        if opt in ("-h", "--hash"):
+            try:
+                dbopen = bsddb.hashopen
+            except AttributeError:
+                sys.stderr.write("bsddb module unavailable.\n")
+                return 1
+        elif opt in ("-b", "--btree"):
+            try:
+                dbopen = bsddb.btopen
+            except AttributeError:
+                sys.stderr.write("bsddb module unavailable.\n")
+                return 1
+        elif opt in ("-r", "--recno"):
+            try:
+                dbopen = bsddb.rnopen
+            except AttributeError:
+                sys.stderr.write("bsddb module unavailable.\n")
+                return 1
+        elif opt in ("-a", "--anydbm"):
+            try:
+                dbopen = anydbm.open
+            except AttributeError:
+                sys.stderr.write("anydbm module unavailable.\n")
+                return 1
+        elif opt in ("-g", "--gdbm"):
+            try:
+                dbopen = gdbm.open
+            except AttributeError:
+                sys.stderr.write("gdbm module unavailable.\n")
+                return 1
+        elif opt in ("-d", "--dbm"):
+            try:
+                dbopen = dbm.open
+            except AttributeError:
+                sys.stderr.write("dbm module unavailable.\n")
+                return 1
+    if dbopen is None:
+        if bsddb is None:
+            sys.stderr.write("bsddb module unavailable - ")
+            sys.stderr.write("must specify dbtype.\n")
+            return 1
+        else:
+            dbopen = bsddb.hashopen
+
+    try:
+        db = dbopen(dbfile, 'c')
+    except bsddb.error:
+        sys.stderr.write("Unable to open %s.  " % dbfile)
+        sys.stderr.write("Check for format or version mismatch.\n")
+        return 1
+    else:
+        for k in db.keys():
+            del db[k]
+
+    while 1:
+        try:
+            (key, val) = pickle.load(pfile)
+        except EOFError:
+            break
+        db[key] = val
+
+    db.close()
+    pfile.close()
+
+    return 0
+
+if __name__ == "__main__":
+    sys.exit(main(sys.argv[1:]))