From: Allan B. W. <all...@ya...> - 2004-07-03 21:38:55
|
#!/usr/bin/python # IniOptionParser.py -- Class to initialize optparse default options = with values specified in a .ini file # Copyright (C) 2004 by Allan B. Wilson. All rights reserved. # Created: 20-Jun-04; last edit: 22-Jun-04 from optparse import OptionParser class IniOptionParser(OptionParser): " Override OptionParser's 'add_option' method so that 'local' option = defaults can be set from a .ini file " def __init__(self, *args, **kwargs): import os, sys progpath =3D os.path.abspath(os.path.dirname(sys.argv[0])) progname =3D os.path.splitext(os.path.basename(sys.argv[0]))[0] configfile =3D os.path.join(progpath, "%s.ini" % progname) if os.path.isfile(configfile): import ConfigParser self.cp =3D ConfigParser.ConfigParser() cpInput =3D file(configfile) self.cp.readfp(cpInput) cpInput.close() else: self.cp =3D None OptionParser.__init__(self, *args, **kwargs) def add_option(self, *args, **kwargs): if self.cp and kwargs.has_key("default") and kwargs.has_key("dest") = and self.cp.has_option("Defaults", kwargs["dest"]): argstring =3D self.cp.get("Defaults", kwargs["dest"]) argtype =3D type(kwargs["default"]) if argtype is bool: kwargs["default"] =3D bool(argstring.capitalize() = =3D=3D "True" or argstring =3D=3D "1" or argstring.capitalize() =3D=3D = "Yes") elif argtype is float: kwargs["default"] =3D float(argstring) elif argtype is int: kwargs["default"] =3D int(argstring) elif argtype is long: kwargs["default"] =3D long(argstring) elif argtype is str: kwargs["default"] =3D str(argstring) OptionParser.add_option(self, *args, **kwargs) if __name__ =3D=3D "__main__": """ Test setting add_option defaults from a .ini file If there is a file in the same directory and with the same name as the = running program but with a .ini extension, "local" defaults for options can be set from the file. For example, if = this is run as IniOptionParser.py and in the same directory is a file named IniOptionParser.ini that = contains: [Defaults] boolean=3DTrue string=3Dstring from .ini file then the defaults for options.boolean and options.string will be = changed from their settings in the add_option calls below. """ usage =3D "usage: %prog [options]" version =3D "1.0" parser =3D IniOptionParser(usage=3Dusage, version=3Dversion) parser.add_option("-b", "--boolean", action=3D"store_true", = dest=3D"boolean", help=3D"set boolean option True", default=3DFalse) parser.add_option("-s", "--string", action=3D"store", type=3D"string", = dest=3D"string", help=3D"set string option", default=3D"default string") parser.add_option("-d", "--defaults", action=3D"store_true", = dest=3D"defaults", help=3D"display option defaults", default=3DTrue) options, args =3D parser.parse_args() if options.defaults: print "boolean :", options.boolean print "string :", options.string print "defaults:", options.defaults |