| | """CVAT API annotation methods.""" |
| |
|
| | from typing import TYPE_CHECKING |
| |
|
| | from metrics_evaluation.schema.cvat import CvatApiJobList, CvatApiTaskList |
| |
|
| | from .retry import retry_with_backoff |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | if TYPE_CHECKING: |
| | from .client import CvatApiClient |
| |
|
| |
|
| | class AnnotationsMethods: |
| | """Annotation GET/PUT operations for CVAT API.""" |
| |
|
| | def __init__(self, client: "CvatApiClient"): |
| | """Initialize annotation methods with client reference. |
| | |
| | Args: |
| | client: Parent CvatApiClient instance |
| | """ |
| | self.client = client |
| |
|
| | @retry_with_backoff(max_retries=3, initial_delay=1.0) |
| | def get_job_annotations( |
| | self, job_id: int, token: str | None = None |
| | ) -> CvatApiJobList: |
| | """Fetch annotations for a job. |
| | |
| | Args: |
| | job_id: The ID of the job |
| | token: Authentication token (optional) |
| | |
| | Returns: |
| | Job annotations object with tags, shapes, and tracks |
| | """ |
| | headers = self.client._get_headers(token) |
| | url = f"{self.client.cvat_host}/api/jobs/{job_id}/annotations" |
| |
|
| | return self.client._make_request( |
| | method="GET", |
| | url=url, |
| | headers=headers, |
| | resource_name="job annotations", |
| | resource_id=job_id, |
| | response_model=CvatApiJobList, |
| | ) |
| |
|
| | @retry_with_backoff(max_retries=3, initial_delay=1.0) |
| | def get_task_annotations( |
| | self, task_id: int, token: str | None = None |
| | ) -> CvatApiTaskList: |
| | """Fetch annotations for a task. |
| | |
| | Args: |
| | task_id: The ID of the task |
| | token: Authentication token (optional) |
| | |
| | Returns: |
| | Task annotations object with tags, shapes, and tracks |
| | """ |
| | headers = self.client._get_headers(token) |
| | url = f"{self.client.cvat_host}/api/tasks/{task_id}/annotations" |
| |
|
| | return self.client._make_request( |
| | method="GET", |
| | url=url, |
| | headers=headers, |
| | resource_name="task annotations", |
| | resource_id=task_id, |
| | response_model=CvatApiTaskList, |
| | ) |
| |
|
| | def put_job_annotations( |
| | self, job_id: int, annotations: CvatApiJobList, token: str | None = None |
| | ) -> CvatApiJobList: |
| | """Update annotations for a job. |
| | |
| | Args: |
| | job_id: The ID of the job |
| | annotations: Job annotations to upload |
| | token: Authentication token (optional) |
| | |
| | Returns: |
| | Updated job annotations |
| | """ |
| | headers = self.client._get_headers(token) |
| | url = f"{self.client.cvat_host}/api/jobs/{job_id}/annotations" |
| |
|
| | return self.client._make_request( |
| | method="PUT", |
| | url=url, |
| | headers=headers, |
| | json_data=annotations.model_dump(), |
| | resource_name="job annotations", |
| | resource_id=job_id, |
| | response_model=CvatApiJobList, |
| | ) |
| |
|
| | def put_task_annotations( |
| | self, task_id: int, annotations: CvatApiTaskList, token: str | None = None |
| | ) -> CvatApiTaskList: |
| | """Update annotations for a task. |
| | |
| | Args: |
| | task_id: The ID of the task |
| | annotations: Task annotations to upload |
| | token: Authentication token (optional) |
| | |
| | Returns: |
| | Updated task annotations |
| | """ |
| | headers = self.client._get_headers(token) |
| | url = f"{self.client.cvat_host}/api/tasks/{task_id}/annotations" |
| |
|
| | return self.client._make_request( |
| | method="PUT", |
| | url=url, |
| | headers=headers, |
| | json_data=annotations.model_dump(), |
| | resource_name="task annotations", |
| | resource_id=task_id, |
| | response_model=CvatApiTaskList, |
| | ) |
| |
|