+++ /dev/null
-#!/usr/bin/env python\r
-\r
-"""\r
-Synopsis: %(prog)s [-h|-g|-b|-r|-a] dbfile [ picklefile ]\r
-\r
-Convert the database file given on the command line to a pickle\r
-representation. The optional flags indicate the type of the database:\r
-\r
- -a - open using anydbm\r
- -b - open as bsddb btree file\r
- -d - open as dbm file\r
- -g - open as gdbm file\r
- -h - open as bsddb hash file\r
- -r - open as bsddb recno file\r
-\r
-The default is hash. If a pickle file is named it is opened for write\r
-access (deleting any existing data). If no pickle file is named, the pickle\r
-output is written to standard output.\r
-\r
-"""\r
-\r
-import getopt\r
-try:\r
- import bsddb\r
-except ImportError:\r
- bsddb = None\r
-try:\r
- import dbm\r
-except ImportError:\r
- dbm = None\r
-try:\r
- import gdbm\r
-except ImportError:\r
- gdbm = None\r
-try:\r
- import anydbm\r
-except ImportError:\r
- anydbm = None\r
-import sys\r
-try:\r
- import cPickle as pickle\r
-except ImportError:\r
- import pickle\r
-\r
-prog = sys.argv[0]\r
-\r
-def usage():\r
- sys.stderr.write(__doc__ % globals())\r
-\r
-def main(args):\r
- try:\r
- opts, args = getopt.getopt(args, "hbrdag",\r
- ["hash", "btree", "recno", "dbm",\r
- "gdbm", "anydbm"])\r
- except getopt.error:\r
- usage()\r
- return 1\r
-\r
- if len(args) == 0 or len(args) > 2:\r
- usage()\r
- return 1\r
- elif len(args) == 1:\r
- dbfile = args[0]\r
- pfile = sys.stdout\r
- else:\r
- dbfile = args[0]\r
- try:\r
- pfile = open(args[1], 'wb')\r
- except IOError:\r
- sys.stderr.write("Unable to open %s\n" % args[1])\r
- return 1\r
-\r
- dbopen = None\r
- for opt, arg in opts:\r
- if opt in ("-h", "--hash"):\r
- try:\r
- dbopen = bsddb.hashopen\r
- except AttributeError:\r
- sys.stderr.write("bsddb module unavailable.\n")\r
- return 1\r
- elif opt in ("-b", "--btree"):\r
- try:\r
- dbopen = bsddb.btopen\r
- except AttributeError:\r
- sys.stderr.write("bsddb module unavailable.\n")\r
- return 1\r
- elif opt in ("-r", "--recno"):\r
- try:\r
- dbopen = bsddb.rnopen\r
- except AttributeError:\r
- sys.stderr.write("bsddb module unavailable.\n")\r
- return 1\r
- elif opt in ("-a", "--anydbm"):\r
- try:\r
- dbopen = anydbm.open\r
- except AttributeError:\r
- sys.stderr.write("anydbm module unavailable.\n")\r
- return 1\r
- elif opt in ("-g", "--gdbm"):\r
- try:\r
- dbopen = gdbm.open\r
- except AttributeError:\r
- sys.stderr.write("gdbm module unavailable.\n")\r
- return 1\r
- elif opt in ("-d", "--dbm"):\r
- try:\r
- dbopen = dbm.open\r
- except AttributeError:\r
- sys.stderr.write("dbm module unavailable.\n")\r
- return 1\r
- if dbopen is None:\r
- if bsddb is None:\r
- sys.stderr.write("bsddb module unavailable - ")\r
- sys.stderr.write("must specify dbtype.\n")\r
- return 1\r
- else:\r
- dbopen = bsddb.hashopen\r
-\r
- try:\r
- db = dbopen(dbfile, 'r')\r
- except bsddb.error:\r
- sys.stderr.write("Unable to open %s. " % dbfile)\r
- sys.stderr.write("Check for format or version mismatch.\n")\r
- return 1\r
-\r
- for k in db.keys():\r
- pickle.dump((k, db[k]), pfile, 1==1)\r
-\r
- db.close()\r
- pfile.close()\r
-\r
- return 0\r
-\r
-if __name__ == "__main__":\r
- sys.exit(main(sys.argv[1:]))\r