def _build_parser()

in client/python/cli/options/parser.py [0:0]


    def _build_parser() -> argparse.ArgumentParser:
        parser = TreeHelpParser(description='Polaris CLI')

        for arg in Parser._ROOT_ARGUMENTS:
            if arg.default is not None:
                parser.add_argument(arg.get_flag_name(), type=arg.type, help=arg.hint, default=arg.default)
            else:
                parser.add_argument(arg.get_flag_name(), type=arg.type, help=arg.hint)

        # Add everything from the option tree to the parser:
        def add_arguments(parser, args: List[Argument]):
            for arg in args:
                kwargs = {'help': arg.hint, 'type': arg.type}
                if arg.choices:
                    kwargs['choices'] = arg.choices
                if arg.lower:
                    kwargs['type'] = kwargs['type'].lower
                if arg.default:
                    kwargs['default'] = arg.default

                if arg.type == bool:
                    del kwargs['type']
                    parser.add_argument(arg.get_flag_name(), **kwargs, action='store_true')
                elif arg.allow_repeats:
                    parser.add_argument(arg.get_flag_name(), **kwargs, action='append')
                else:
                    parser.add_argument(arg.get_flag_name(), **kwargs)

        def recurse_options(subparser, options: List[Option]):
            for option in options:
                option_parser = subparser.add_parser(option.name, help=option.hint or option.name)
                add_arguments(option_parser, option.args)
                if option.input_name:
                    option_parser.add_argument(option.input_name, type=str,
                                               help=option.input_name.replace('_', ' '), default=None)
                if option.children:
                    children_subparser = option_parser.add_subparsers(dest=f'{option.name}_subcommand', required=False)
                    recurse_options(children_subparser, option.children)

        subparser = parser.add_subparsers(dest='command', required=False)
        recurse_options(subparser, OptionTree.get_tree())
        return parser