You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
# Copyright (C) 2022 CVAT.ai Corporation
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from time import sleep
|
|
from typing import TYPE_CHECKING
|
|
|
|
if TYPE_CHECKING:
|
|
from cvat_sdk.core.client import Client
|
|
|
|
|
|
def create_git_repo(
|
|
client: Client,
|
|
*,
|
|
task_id: int,
|
|
repo_url: str,
|
|
status_check_period: int = None,
|
|
use_lfs: bool = True,
|
|
):
|
|
if status_check_period is None:
|
|
status_check_period = client.config.status_check_period
|
|
|
|
common_headers = client.api_client.get_common_headers()
|
|
|
|
response = client.api_client.rest_client.POST(
|
|
client.api_map.git_create(task_id),
|
|
post_params={"path": repo_url, "lfs": use_lfs, "tid": task_id},
|
|
headers=common_headers,
|
|
)
|
|
response_json = json.loads(response.data)
|
|
rq_id = response_json["rq_id"]
|
|
client.logger.info(f"Create RQ ID: {rq_id}")
|
|
|
|
client.logger.debug("Awaiting a dataset repository to be created for the task %s...", task_id)
|
|
check_url = client.api_map.git_check(rq_id)
|
|
status = None
|
|
while status != "finished":
|
|
sleep(status_check_period)
|
|
response = client.api_client.rest_client.GET(check_url, headers=common_headers)
|
|
response_json = json.loads(response.data)
|
|
status = response_json["status"]
|
|
if status == "failed" or status == "unknown":
|
|
client.logger.error(
|
|
"Dataset repository creation request for task %s failed" "with status %s.",
|
|
task_id,
|
|
status,
|
|
)
|
|
break
|
|
|
|
client.logger.debug(
|
|
"Awaiting a dataset repository to be created for the task %s. Response status: %s",
|
|
task_id,
|
|
status,
|
|
)
|
|
|
|
client.logger.debug("Dataset repository creation completed with status: %s.", status)
|