You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.6 KiB
63 lines
1.6 KiB
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)
|