Mercurial > cpython-lru_cache-weakref
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 |
| 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:])) |
