def METHOD_NAME(self, args: List[str]) -> argparse.Namespace:
    """
    :param args: commandline arguments
    :return:
    """
    parent_parser = argparse.ArgumentParser(add_help=False)
    main_parser = argparse.ArgumentParser()
    subparsers = main_parser.add_subparsers(title="commands", dest="command")
    # spec
    subparsers.add_parser("spec", help="outputs the json configuration specification", parents=[parent_parser])
    # check
    check_parser = subparsers.add_parser("check", help="checks the config can be used to connect", parents=[parent_parser])
    required_check_parser = check_parser.add_argument_group("required named arguments")
    required_check_parser.add_argument("--config", type=str, required=True, help="path to the json configuration file")
    # write
    write_parser = subparsers.add_parser("write", help="Writes data to the destination", parents=[parent_parser])
    write_required = write_parser.add_argument_group("required named arguments")
    write_required.add_argument("--config", type=str, required=True, help="path to the JSON configuration file")
    write_required.add_argument("--catalog", type=str, required=True, help="path to the configured catalog JSON file")
    parsed_args = main_parser.METHOD_NAME(args)
    cmd = parsed_args.command
    if not cmd:
        raise Exception("No command entered. ")
    elif cmd not in ["spec", "check", "write"]:
        # This is technically dead code since parse_args() would fail if this was the case
        # But it's non-obvious enough to warrant placing it here anyways
        raise Exception(f"Unknown command entered: {cmd}")
    return parsed_args