~ubuntu-branches/ubuntu/trusty/python3.4/trusty-proposed

« back to all changes in this revision

Viewing changes to Tools/scripts/pickle2db.py

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-11-25 09:44:27 UTC
  • Revision ID: package-import@ubuntu.com-20131125094427-lzxj8ap5w01lmo7f
Tags: upstream-3.4~b1
ImportĀ upstreamĀ versionĀ 3.4~b1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python3
 
2
 
 
3
"""
 
4
Synopsis: %(prog)s [-h|-b|-g|-r|-a|-d] [ picklefile ] dbfile
 
5
 
 
6
Read the given picklefile as a series of key/value pairs and write to a new
 
7
database.  If the database already exists, any contents are deleted.  The
 
8
optional flags indicate the type of the output database:
 
9
 
 
10
    -a - open using dbm (open any supported format)
 
11
    -b - open as bsddb btree file
 
12
    -d - open as dbm.ndbm file
 
13
    -g - open as dbm.gnu file
 
14
    -h - open as bsddb hash file
 
15
    -r - open as bsddb recno file
 
16
 
 
17
The default is hash.  If a pickle file is named it is opened for read
 
18
access.  If no pickle file is named, the pickle input is read from standard
 
19
input.
 
20
 
 
21
Note that recno databases can only contain integer keys, so you can't dump a
 
22
hash or btree database using db2pickle.py and reconstitute it to a recno
 
23
database with %(prog)s unless your keys are integers.
 
24
 
 
25
"""
 
26
 
 
27
import getopt
 
28
try:
 
29
    import bsddb
 
30
except ImportError:
 
31
    bsddb = None
 
32
try:
 
33
    import dbm.ndbm as dbm
 
34
except ImportError:
 
35
    dbm = None
 
36
try:
 
37
    import dbm.gnu as gdbm
 
38
except ImportError:
 
39
    gdbm = None
 
40
try:
 
41
    import dbm.ndbm as anydbm
 
42
except ImportError:
 
43
    anydbm = None
 
44
import sys
 
45
try:
 
46
    import pickle as pickle
 
47
except ImportError:
 
48
    import pickle
 
49
 
 
50
prog = sys.argv[0]
 
51
 
 
52
def usage():
 
53
    sys.stderr.write(__doc__ % globals())
 
54
 
 
55
def main(args):
 
56
    try:
 
57
        opts, args = getopt.getopt(args, "hbrdag",
 
58
                                   ["hash", "btree", "recno", "dbm", "anydbm",
 
59
                                    "gdbm"])
 
60
    except getopt.error:
 
61
        usage()
 
62
        return 1
 
63
 
 
64
    if len(args) == 0 or len(args) > 2:
 
65
        usage()
 
66
        return 1
 
67
    elif len(args) == 1:
 
68
        pfile = sys.stdin
 
69
        dbfile = args[0]
 
70
    else:
 
71
        try:
 
72
            pfile = open(args[0], 'rb')
 
73
        except IOError:
 
74
            sys.stderr.write("Unable to open %s\n" % args[0])
 
75
            return 1
 
76
        dbfile = args[1]
 
77
 
 
78
    dbopen = None
 
79
    for opt, arg in opts:
 
80
        if opt in ("-h", "--hash"):
 
81
            try:
 
82
                dbopen = bsddb.hashopen
 
83
            except AttributeError:
 
84
                sys.stderr.write("bsddb module unavailable.\n")
 
85
                return 1
 
86
        elif opt in ("-b", "--btree"):
 
87
            try:
 
88
                dbopen = bsddb.btopen
 
89
            except AttributeError:
 
90
                sys.stderr.write("bsddb module unavailable.\n")
 
91
                return 1
 
92
        elif opt in ("-r", "--recno"):
 
93
            try:
 
94
                dbopen = bsddb.rnopen
 
95
            except AttributeError:
 
96
                sys.stderr.write("bsddb module unavailable.\n")
 
97
                return 1
 
98
        elif opt in ("-a", "--anydbm"):
 
99
            try:
 
100
                dbopen = anydbm.open
 
101
            except AttributeError:
 
102
                sys.stderr.write("dbm module unavailable.\n")
 
103
                return 1
 
104
        elif opt in ("-g", "--gdbm"):
 
105
            try:
 
106
                dbopen = gdbm.open
 
107
            except AttributeError:
 
108
                sys.stderr.write("dbm.gnu module unavailable.\n")
 
109
                return 1
 
110
        elif opt in ("-d", "--dbm"):
 
111
            try:
 
112
                dbopen = dbm.open
 
113
            except AttributeError:
 
114
                sys.stderr.write("dbm.ndbm module unavailable.\n")
 
115
                return 1
 
116
    if dbopen is None:
 
117
        if bsddb is None:
 
118
            sys.stderr.write("bsddb module unavailable - ")
 
119
            sys.stderr.write("must specify dbtype.\n")
 
120
            return 1
 
121
        else:
 
122
            dbopen = bsddb.hashopen
 
123
 
 
124
    try:
 
125
        db = dbopen(dbfile, 'c')
 
126
    except bsddb.error:
 
127
        sys.stderr.write("Unable to open %s.  " % dbfile)
 
128
        sys.stderr.write("Check for format or version mismatch.\n")
 
129
        return 1
 
130
    else:
 
131
        for k in list(db.keys()):
 
132
            del db[k]
 
133
 
 
134
    while 1:
 
135
        try:
 
136
            (key, val) = pickle.load(pfile)
 
137
        except EOFError:
 
138
            break
 
139
        db[key] = val
 
140
 
 
141
    db.close()
 
142
    pfile.close()
 
143
 
 
144
    return 0
 
145
 
 
146
if __name__ == "__main__":
 
147
    sys.exit(main(sys.argv[1:]))