~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Tools/scripts/db2pickle.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 dbm (any supported format)
 
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.ndbm as dbm
 
29
except ImportError:
 
30
    dbm = None
 
31
try:
 
32
    import dbm.gnu as gdbm
 
33
except ImportError:
 
34
    gdbm = None
 
35
try:
 
36
    import dbm as 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("dbm 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("dbm.gnu 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.ndbm 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:]))