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] _______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org http://mail.python.org/mailman/listinfo/distutils-sig