symbian-qemu-0.9.1-12/python-2.6.1/Tools/scripts/pickle2db.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #!/usr/bin/env python
       
     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 anydbm
       
    11     -b - open as bsddb btree file
       
    12     -d - open as dbm file
       
    13     -g - open as gdbm 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
       
    34 except ImportError:
       
    35     dbm = None
       
    36 try:
       
    37     import gdbm
       
    38 except ImportError:
       
    39     gdbm = None
       
    40 try:
       
    41     import anydbm
       
    42 except ImportError:
       
    43     anydbm = None
       
    44 import sys
       
    45 try:
       
    46     import cPickle 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("anydbm 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("gdbm 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 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 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:]))