def main()

in mapillary_tools/commands/__main__.py [0:0]


def main():
    parser = argparse.ArgumentParser(
        "mapillary_tool",
    )
    parser.add_argument(
        "--version",
        help="show the version of mapillary tools and exit",
        action="version",
        version=f"mapillary_tools version {VERSION}",
    )
    parser.add_argument(
        "--verbose",
        help="show verbose",
        action="store_true",
        default=False,
        required=False,
    )
    parser.set_defaults(func=lambda _: parser.print_help())

    all_commands = [module.Command() for module in mapillary_tools_commands]

    subparsers = parser.add_subparsers(
        description="please choose one of the available subcommands",
    )
    for command in all_commands:
        cmd_parser = subparsers.add_parser(
            command.name, help=command.help, conflict_handler="resolve"
        )
        add_general_arguments(cmd_parser, command.name)
        command.add_basic_arguments(cmd_parser)
        cmd_parser.set_defaults(func=command.run)

    args = parser.parse_args()

    log_level = logging.DEBUG if args.verbose else logging.INFO
    configure_logger(LOG, sys.stderr)
    LOG.setLevel(log_level)

    argvars = vars(args)
    params = {k: v for k, v in argvars.items() if v is not None and not callable(v)}
    for k, v in params.items():
        LOG.debug(f"CLI param: {k}: {v}")

    try:
        args.func(argvars)
    except exceptions.MapillaryUserError as exc:
        LOG.error(f"{exc.__class__.__name__}: {exc}")
        sys.exit(exc.exit_code)