def create_parser(self, prog, parents=None):
"""
Creates an ArgumentParser instance from options returned
by get_options(), and a subparser for the given command.
"""
prog = os.path.basename(prog)
options_parser = argparse.ArgumentParser(add_help=False)
for option in self.get_options():
options_parser.add_argument(*option.args, **option.kwargs)
# parser_parents = parents if parents else [option_parser]
# parser_parents = [options_parser]
parser = argparse.ArgumentParser(prog=prog, usage=self.usage,
description=self.description,
parents=[options_parser])
subparsers = parser.add_subparsers()
for name, command in self._commands.items():
usage = getattr(command, 'usage', None)
help = getattr(command, 'help', command.__doc__)
description = getattr(command, 'description', command.__doc__)
# Only pass `parents` argument for commands that support it
try:
command_parser = command.create_parser(name, parents=[options_parser])
except TypeError:
warnings.warn("create_parser for {0} command should accept a `parents` argument".format(name), DeprecationWarning)
command_parser = command.create_parser(name)
subparser = subparsers.add_parser(name, usage=usage, help=help,
description=description,
parents=[command_parser], add_help=False)
## enable autocomplete only for parent parser when argcomplete is
## imported and it is NOT disabled in constructor
if parents is None and ARGCOMPLETE_IMPORTED \
and not self.disable_argcomplete:
argcomplete.autocomplete(parser, always_complete_options=True)
return parser
# def foo(self, app, *args, **kwargs):
# print(args)
评论列表
文章目录