def build_parser()

in src/main.py [0:0]


def build_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(
        description='Custodian configuration cli entering point'
    )
    # -- top level sub-parser
    sub_parsers = parser.add_subparsers(
        dest=ACTION_DEST, required=True, help='Available actions'
    )
    _ = sub_parsers.add_parser(
        CREATE_INDEXES_ACTION, help='Re-create MongoDB indexes'
    )
    _ = sub_parsers.add_parser(
        INIT_VAULT_ACTION,
        help='Enables secret engine and crated a necessary token in Vault',
    )
    set_meta_parser = sub_parsers.add_parser(
        SET_META_REPOS_ACTION,
        help='Sets rules metadata gitlab repositories to vault',
    )

    class MetaAccessType:
        def __call__(self, item: str) -> tuple[str, str]:
            res = item.strip().split(':', maxsplit=1)
            if len(res) != 2:
                raise ValueError('Invalid value. Must be <project>:<secret>')
            return res[0], res[1]

    set_meta_parser.add_argument(
        '--repositories',
        nargs='+',
        required=True,
        type=MetaAccessType(),
        help='List of repositories to set for meta: '
        '--repositories <project1>:<secret> <project2>:<secret>',
    )
    _ = sub_parsers.add_parser(
        CREATE_BUCKETS_ACTION, help='Creates necessary buckets in Minio'
    )
    _ = sub_parsers.add_parser(
        UPDATE_API_GATEWAY_MODELS_ACTION,
        help='Regenerates API Gateway models from existing pydantic validators',
    )
    _ = sub_parsers.add_parser(
        SHOW_PERMISSIONS_ACTION,
        help='Dumps existing permissions to stdout. '
        'By default, dumps only user permission. '
        'Use flags to dump admin permissions as well ',
    )
    _ = sub_parsers.add_parser(
        INIT_ACTION, help='Creates system user and sets up some base settings'
    )
    _ = sub_parsers.add_parser(
        GENERATE_OPENAPI_ACTION,
        help='Generates Open API spec for Rule Engine API',
    )
    parser_run = sub_parsers.add_parser(RUN_ACTION, help='Run on-prem server')
    parser_run.add_argument(
        '-g',
        '--gunicorn',
        action='store_true',
        default=False,
        help='Specify the flag is you want to run the server via Gunicorn',
    )
    parser_run.add_argument(
        '-nw',
        '--workers',
        type=int,
        required=False,
        help='Number of gunicorn workers. Must be specified only '
        'if --gunicorn flag is set',
    )
    parser_run.add_argument(
        '--host',
        default=DEFAULT_HOST,
        type=str,
        help='IP address where to run the server',
    )
    parser_run.add_argument(
        '--port',
        default=DEFAULT_PORT,
        type=int,
        help='IP Port to run the server on',
    )
    return parser