On Feb 20, 2008, at 8:13 PM, Michael Hoffman wrote:
Noah Gift wrote:
Has anyone created a command line tool, using optparse, that dynamically creates options from available eggs/plugins? I have a need to create such a tool, and was looking for an example.
Thanks Michael. That gives me some good ideas to start with!
Yeah, I did something like this, which is somewhat clunky:
def parse_options(args): usage = """%prog [OPTION...] MODEL SEQFILE OUTFILE %prog [OPTION...] --driver=DRIVER MODEL SEQFILE [DRIVEROPTIONS...]""" version = "%%prog %s" % __version__ parser = OptionParser(usage=usage, version=version) parser.disable_interspersed_args()
with OptionGroup(parser, "Output driver") as group: group.add_option("-d", "--driver", default="DEFAULT", help="set output format")
group.add_option("--driver-help", action="store_true", help="get driver-specific help")
options, args = parser.parse_args(args)
if options.driver_help: driver_class = driver_load(options.driver) driver_class.print_help() sys.exit(0)
def driver_load(name): return load_entry_point("myproject", "myproject.drivers", name)
And I defined the entry points in my setup.py file:
==== [myproject.drivers] DEFAULT = myproject.driver.hdf5:HDF5Driver hdf5 = myproject.driver.hdf5:HDF5Driver sql = myproject.driver.sql:SQLDriver ====
At some point I pass unprocessed args to the entry point, which parse them with optparse. I could call the program like this:
myproject --driver=sql model seqfile --database=server.example.net
_______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org http://mail.python.org/mailman/listinfo/distutils-sig
Noah Gift / http://noahgift.com [Python+Grok+AJAX+Mashup]