Update to 2.7.3
[profile/ivi/python.git] / Tools / scripts / db2pickle.py
1 #!/usr/bin/env python
2
3 """
4 Synopsis: %(prog)s [-h|-g|-b|-r|-a] dbfile [ picklefile ]
5
6 Convert the database file given on the command line to a pickle
7 representation.  The optional flags indicate the type of the database:
8
9     -a - open using anydbm
10     -b - open as bsddb btree file
11     -d - open as dbm file
12     -g - open as gdbm file
13     -h - open as bsddb hash file
14     -r - open as bsddb recno file
15
16 The default is hash.  If a pickle file is named it is opened for write
17 access (deleting any existing data).  If no pickle file is named, the pickle
18 output is written to standard output.
19
20 """
21
22 import getopt
23 try:
24     import bsddb
25 except ImportError:
26     bsddb = None
27 try:
28     import dbm
29 except ImportError:
30     dbm = None
31 try:
32     import gdbm
33 except ImportError:
34     gdbm = None
35 try:
36     import anydbm
37 except ImportError:
38     anydbm = None
39 import sys
40 try:
41     import cPickle as pickle
42 except ImportError:
43     import pickle
44
45 prog = sys.argv[0]
46
47 def usage():
48     sys.stderr.write(__doc__ % globals())
49
50 def main(args):
51     try:
52         opts, args = getopt.getopt(args, "hbrdag",
53                                    ["hash", "btree", "recno", "dbm",
54                                     "gdbm", "anydbm"])
55     except getopt.error:
56         usage()
57         return 1
58
59     if len(args) == 0 or len(args) > 2:
60         usage()
61         return 1
62     elif len(args) == 1:
63         dbfile = args[0]
64         pfile = sys.stdout
65     else:
66         dbfile = args[0]
67         try:
68             pfile = open(args[1], 'wb')
69         except IOError:
70             sys.stderr.write("Unable to open %s\n" % args[1])
71             return 1
72
73     dbopen = None
74     for opt, arg in opts:
75         if opt in ("-h", "--hash"):
76             try:
77                 dbopen = bsddb.hashopen
78             except AttributeError:
79                 sys.stderr.write("bsddb module unavailable.\n")
80                 return 1
81         elif opt in ("-b", "--btree"):
82             try:
83                 dbopen = bsddb.btopen
84             except AttributeError:
85                 sys.stderr.write("bsddb module unavailable.\n")
86                 return 1
87         elif opt in ("-r", "--recno"):
88             try:
89                 dbopen = bsddb.rnopen
90             except AttributeError:
91                 sys.stderr.write("bsddb module unavailable.\n")
92                 return 1
93         elif opt in ("-a", "--anydbm"):
94             try:
95                 dbopen = anydbm.open
96             except AttributeError:
97                 sys.stderr.write("anydbm module unavailable.\n")
98                 return 1
99         elif opt in ("-g", "--gdbm"):
100             try:
101                 dbopen = gdbm.open
102             except AttributeError:
103                 sys.stderr.write("gdbm module unavailable.\n")
104                 return 1
105         elif opt in ("-d", "--dbm"):
106             try:
107                 dbopen = dbm.open
108             except AttributeError:
109                 sys.stderr.write("dbm module unavailable.\n")
110                 return 1
111     if dbopen is None:
112         if bsddb is None:
113             sys.stderr.write("bsddb module unavailable - ")
114             sys.stderr.write("must specify dbtype.\n")
115             return 1
116         else:
117             dbopen = bsddb.hashopen
118
119     try:
120         db = dbopen(dbfile, 'r')
121     except bsddb.error:
122         sys.stderr.write("Unable to open %s.  " % dbfile)
123         sys.stderr.write("Check for format or version mismatch.\n")
124         return 1
125
126     for k in db.keys():
127         pickle.dump((k, db[k]), pfile, 1==1)
128
129     db.close()
130     pfile.close()
131
132     return 0
133
134 if __name__ == "__main__":
135     sys.exit(main(sys.argv[1:]))