annotate Tools/scripts/db2pickle.py @ 28646:193b8aec00ce legacy-trunk

Changes from Jonathan Riehl to allow his pgen extension (PEP 269) to work. This includes some more code that used to be part of pgen in the main parser; I'm okay with that. I'll see if the Windows build needs work next.
author Guido van Rossum <guido@python.org>
date Thu, 17 Apr 2003 14:55:42 +0000
parents dd73a1218f69
children c9bee11eaa8b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
1 #!/usr/bin/env python
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
2
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
3 """
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
4 Synopsis: %(prog)s [-h|-b|-r] dbfile [ picklefile ]
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
5
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
6 Convert the bsddb database file given on the command like to a pickle
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
7 representation. The optional flags indicate the type of the database (hash,
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
8 btree, recno). The default is hash. If a pickle file is named it is opened
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
9 for write access (deleting any existing data). If no pickle file is named,
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
10 the pickle output is written to standard output.
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
11
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
12 """
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
13
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
14 import getopt
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
15 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
16 import bsddb
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
17 except ImportError:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
18 bsddb = None
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
19 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
20 import dbm
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
21 except ImportError:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
22 dbm = None
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
23 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
24 import anydbm
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
25 except ImportError:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
26 anydbm = None
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
27 import sys
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
28 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
29 import cPickle as pickle
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
30 except ImportError:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
31 import pickle
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
32
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
33 prog = sys.argv[0]
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
34
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
35 def usage():
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
36 sys.stderr.write(__doc__ % globals())
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
37
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
38 def main(args):
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
39 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
40 opts, args = getopt.getopt(args, "hbrda",
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
41 ["hash", "btree", "recno", "dbm", "anydbm"])
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
42 except getopt.error:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
43 usage()
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
44 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
45
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
46 if len(args) == 0 or len(args) > 2:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
47 usage()
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
48 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
49 elif len(args) == 1:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
50 dbfile = args[0]
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
51 pfile = sys.stdout
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
52 else:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
53 dbfile = args[0]
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
54 try:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
55 pfile = open(args[1], 'wb')
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
56 except IOError:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
57 sys.stderr.write("Unable to open %s\n" % args[1])
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
58 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
59
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
60 dbopen = None
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
61 for opt, arg in opts:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
62 if opt in ("-h", "--hash"):
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
63 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
64 dbopen = bsddb.hashopen
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
65 except AttributeError:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
66 sys.stderr.write("bsddb module unavailable.\n")
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
67 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
68 elif opt in ("-b", "--btree"):
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
69 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
70 dbopen = bsddb.btopen
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
71 except AttributeError:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
72 sys.stderr.write("bsddb module unavailable.\n")
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
73 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
74 elif opt in ("-r", "--recno"):
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
75 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
76 dbopen = bsddb.rnopen
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
77 except AttributeError:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
78 sys.stderr.write("bsddb module unavailable.\n")
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
79 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
80 elif opt in ("-a", "--anydbm"):
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
81 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
82 dbopen = anydbm.open
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
83 except AttributeError:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
84 sys.stderr.write("anydbm module unavailable.\n")
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
85 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
86 elif opt in ("-d", "--dbm"):
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
87 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
88 dbopen = dbm.open
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
89 except AttributeError:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
90 sys.stderr.write("dbm module unavailable.\n")
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
91 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
92 if dbopen is None:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
93 if bsddb is None:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
94 sys.stderr.write("bsddb module unavailable - ")
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
95 sys.stderr.write("must specify dbtype.\n")
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
96 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
97 else:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
98 dbopen = bsddb.hashopen
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
99
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
100 try:
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
101 db = dbopen(dbfile, 'r')
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
102 except bsddb.error:
27641
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
103 sys.stderr.write("Unable to open %s. " % dbfile)
dd73a1218f69 try to avoid gross incompatibilities with older versions of Python
Skip Montanaro <skip@pobox.com>
parents: 27632
diff changeset
104 sys.stderr.write("Check for format or version mismatch.\n")
27632
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
105 return 1
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
106
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
107 for k in db.keys():
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
108 pickle.dump((k, db[k]), pfile, 1==1)
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
109
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
110 db.close()
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
111 pfile.close()
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
112
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
113 return 0
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
114
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
115 if __name__ == "__main__":
640e52dee1a0 dump database files to pickle format
Skip Montanaro <skip@pobox.com>
parents:
diff changeset
116 sys.exit(main(sys.argv[1:]))