def _init_parser(self, **kwargs):
_def = self._def
num_groups = len(_def.groups)
if num_groups == 0:
raise RuntimeError("At least one command should be defined.")
formatter_class = argparse.HelpFormatter
if 'formatter_class' in kwargs:
formatter_class = kwargs['formatter_class']
parser = ArgumentParser(**kwargs)
for name, value in _def.common_cmd_args.items():
parser.add_argument(*value.args, **value.kwargs)
if num_groups == 1:
"""register arguments as common"""
group = _def.groups[0]
for name, value in _def.grouped_cmd_args[group].items():
parser.add_argument(*value.args, **value.kwargs)
else:
"""register arguments as groups"""
subparsers = parser.add_subparsers(
title='commands', help='available commands', dest='command')
subparsers.required = True
for group in _def.groups:
subparser = subparsers.add_parser(
group, **_def.group_descriptions[group],
formatter_class=formatter_class)
for name, value in _def.grouped_cmd_args[group].items():
subparser.add_argument(*value.args, **value.kwargs)
return parser
评论列表
文章目录