1import sys 2import optparse 3from django_manage_commands_provider import _xml 4 5 6class Option: 7 def __init__(self): 8 self.long = [] 9 self.short = [] 10 self.arg = None 11 self.help = None 12 13 def dump(self, dumper): 14 dumper.add_command_option(self.long, self.short, self.help, self.arg) 15 16 17def parse_option_desc(option_desc): 18 option = Option() 19 option.short = option_desc._short_opts 20 option.long = option_desc._long_opts 21 option.help = option_desc.help 22 if option_desc.nargs > 0: 23 option.arg = (option_desc.nargs, option_desc.type) 24 return option 25 26 27def get_options(options_parser): 28 return map(parse_option_desc, options_parser.option_list) 29 30 31def dump_actions(dumper, app): 32 common_options = get_options(app._GetOptionParser()) 33 34 for name, action in app.actions.iteritems(): 35 dumper.start_command(name, action.short_desc) 36 37 args = action.usage.split(name.split(' ')[0])[-1].strip() 38 dumper.set_arguments(args) 39 40 for option in common_options: 41 option.dump(dumper) 42 43 if action.options: 44 parser = optparse.OptionParser(conflict_handler='resolve') 45 action.options(app, parser) 46 for option in get_options(parser): 47 option.dump(dumper) 48 dumper.close_command() 49 50 51if __name__ == "__main__": 52 sys.path.append(sys.argv[1]) 53 import appcfg 54 55 try: 56 appcfg.run_file('appcfg.py', globals()) 57 finally: 58 app = AppCfgApp(['appcfg.py', 'help']) 59 dumper = _xml.XmlDumper() 60 dump_actions(dumper, app) 61 print(dumper.xml) 62 sys.exit(0) 63