import sys import optparse from django_manage_commands_provider import _xml class Option: def __init__(self): self.long = [] self.short = [] self.arg = None self.help = None def dump(self, dumper): dumper.add_command_option(self.long, self.short, self.help, self.arg) def parse_option_desc(option_desc): option = Option() option.short = option_desc._short_opts option.long = option_desc._long_opts option.help = option_desc.help if option_desc.nargs > 0: option.arg = (option_desc.nargs, option_desc.type) return option def get_options(options_parser): return map(parse_option_desc, options_parser.option_list) def dump_actions(dumper, app): common_options = get_options(app._GetOptionParser()) for name, action in app.actions.iteritems(): dumper.start_command(name, action.short_desc) args = action.usage.split(name.split(' ')[0])[-1].strip() dumper.set_arguments(args) for option in common_options: option.dump(dumper) if action.options: parser = optparse.OptionParser(conflict_handler='resolve') action.options(app, parser) for option in get_options(parser): option.dump(dumper) dumper.close_command() if __name__ == "__main__": sys.path.append(sys.argv[1]) import appcfg try: appcfg.run_file('appcfg.py', globals()) finally: app = AppCfgApp(['appcfg.py', 'help']) dumper = _xml.XmlDumper() dump_actions(dumper, app) print(dumper.xml) sys.exit(0)