import itertools from functools import partial from importlib import import_module import argparse from trains_agent.definitions import PROGRAM_NAME from .base import Parser, base_arguments, add_service, OnlyPluralChoicesHelpFormatter SERVICES = [ 'worker', ] def get_parser(): top_parser = Parser( prog=PROGRAM_NAME, add_help=False, formatter_class=partial( OnlyPluralChoicesHelpFormatter, max_help_position=120, width=120, ), ) base_arguments(top_parser) from .worker import COMMANDS subparsers = top_parser.add_subparsers(dest='command') for c in COMMANDS: parser = subparsers.add_parser(name=c, help=COMMANDS[c]["help"]) groups = itertools.groupby( sorted( COMMANDS[c].get("args", {}).items(), key=lambda x: x[1].get("group", "") ), key=lambda x: x[1].pop("group", ""), ) for group_name, group in groups: p = parser if not group_name else parser.add_argument_group(group_name) for key, value in group: aliases = value.pop("aliases", []) p.add_argument(key, *aliases, **value) return top_parser