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