def main()

in utils/local_remote_settings/__main__.py [0:0]


def main() -> None:
    parser = argparse.ArgumentParser(
        description=__doc__,
        # Preserves whitespace in the help text.
        formatter_class=argparse.RawTextHelpFormatter,
    )

    parser.add_argument(
        "--sync_remote_settings",
        action="store_true",
        help="Mirror the production Remote Settings models",
    )
    parser.add_argument(
        "--taskgroup_ids",
        type=str,
        help="Task groups that contain an export- task, or train actions.",
        nargs="*",
    )
    parser.add_argument(
        "--export_task_id",
        type=str,
        help="The export-{src}-{trg} task id to use for models",
        nargs="*",
    )

    args = parser.parse_args()
    taskgroup_ids: list[str] = args.taskgroup_ids or []
    export_task_ids: list[str] = args.export_task_id or []
    sync_remote_settings: bool = args.sync_remote_settings

    if not sync_remote_settings and not export_task_ids and not taskgroup_ids:
        # Print the help when nothing is provided.
        print("--sync_remote_settings, --export_task_ids, or --taskgroup_ids must be provided\n")
        parser.print_help()
        sys.exit(0)

    if sync_remote_settings and (export_task_ids or taskgroup_ids):
        print("--sync_remote_settings can not be used with --export_task_ids or --taskgroup_ids")
        sys.exit(1)

    docker = DockerContainerManager(
        container_name="translations-remote-settings",
        image="mozilla/remote-settings",
        volumes={
            str(attachments_path): "/tmp/attachments",
            str(mount_path): "/app/mount",
        },
        env_vars={"KINTO_INI": "mount/translations.ini"},
        ports={8888: 8888},
    )

    logger.info("Starting remote settings")
    docker.start()

    # Initialize Remote Settings.
    wait_for_remote_settings()
    remote_settings = Client(server_url="http://localhost:8888/v1")
    create_remote_settings_environment(remote_settings)

    # The Wasm will be used from the production Remote Settings.
    sync_records(remote_settings, wasm_collection, WasmResponse, WasmRecord)

    if taskgroup_ids or export_task_ids:
        # Pull specific models from Taskcluster.
        queue = taskcluster.Queue({"rootUrl": "https://firefox-ci-tc.services.mozilla.com"})

        for taskgroup_id in taskgroup_ids:
            add_model_from_taskgroup_id(queue, remote_settings, taskgroup_id)

        for task_id in export_task_ids:
            add_model_from_export_task_id(queue, remote_settings, task_id)
    else:
        # Sync records from the production Remote Settings.
        sync_records(remote_settings, models_collection, ModelsResponse, ModelRecord)

    log_records(remote_settings)

    docker.wait()