From 7f0ea8db03ee5e78a79cabf246da854d5f3d1eb2 Mon Sep 17 00:00:00 2001 From: Ravindu Weerakoon Date: Mon, 17 Feb 2025 21:29:23 +0530 Subject: [PATCH 1/5] Fixing SDK task.upload_data() to accept resources of the Path type --- cvat-sdk/cvat_sdk/core/proxies/tasks.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cvat-sdk/cvat_sdk/core/proxies/tasks.py b/cvat-sdk/cvat_sdk/core/proxies/tasks.py index 3322913aa494..ccb21225bda4 100644 --- a/cvat-sdk/cvat_sdk/core/proxies/tasks.py +++ b/cvat-sdk/cvat_sdk/core/proxies/tasks.py @@ -109,9 +109,12 @@ def upload_data( data["frame_filter"] = f"step={params.get('frame_step')}" if resource_type in [ResourceType.REMOTE, ResourceType.SHARE]: - for resource in resources: - if not isinstance(resource, str): - raise TypeError(f"resources: expected instances of str, got {type(resource)}") + for i in range(len(resources)): + if not isinstance(resources[i], str): + try: + resources[i] = str(resources[i]) + except: + raise TypeError(f"resources: expected instances of str or a type convertible to string, got {type(resources[i])}") if resource_type is ResourceType.REMOTE: data["remote_files"] = resources From 17615d84d7c70049fc02d5310705e9a77fdd10b8 Mon Sep 17 00:00:00 2001 From: Ravindu Weerakoon Date: Tue, 18 Feb 2025 23:45:48 +0530 Subject: [PATCH 2/5] task.upload_data() support for path like objects via fspath --- cvat-sdk/cvat_sdk/core/proxies/tasks.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/cvat-sdk/cvat_sdk/core/proxies/tasks.py b/cvat-sdk/cvat_sdk/core/proxies/tasks.py index ccb21225bda4..8e25b1a2c390 100644 --- a/cvat-sdk/cvat_sdk/core/proxies/tasks.py +++ b/cvat-sdk/cvat_sdk/core/proxies/tasks.py @@ -13,7 +13,7 @@ from pathlib import Path from time import sleep from typing import TYPE_CHECKING, Any, Optional - +import os from PIL import Image from cvat_sdk.api_client import apis, exceptions, models @@ -109,17 +109,15 @@ def upload_data( data["frame_filter"] = f"step={params.get('frame_step')}" if resource_type in [ResourceType.REMOTE, ResourceType.SHARE]: - for i in range(len(resources)): - if not isinstance(resources[i], str): - try: - resources[i] = str(resources[i]) - except: - raise TypeError(f"resources: expected instances of str or a type convertible to string, got {type(resources[i])}") + str_resources = [] + + for resource in resources: + str_resources.append(os.fspath(resource)) if resource_type is ResourceType.REMOTE: - data["remote_files"] = resources + data["remote_files"] = str_resources elif resource_type is ResourceType.SHARE: - data["server_files"] = resources + data["server_files"] = str_resources result, _ = self.api.create_data( self.id, From 2de5af3339a44310576e6bda6aa5f25397c31d5c Mon Sep 17 00:00:00 2001 From: Ravindu Weerakoon Date: Thu, 20 Feb 2025 00:44:42 +0530 Subject: [PATCH 3/5] adding the changelog --- changelog.d/20250220_003314_ravinduwe_resource_path_fix.md | 4 ++++ cvat-sdk/cvat_sdk/core/proxies/tasks.py | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 changelog.d/20250220_003314_ravinduwe_resource_path_fix.md diff --git a/changelog.d/20250220_003314_ravinduwe_resource_path_fix.md b/changelog.d/20250220_003314_ravinduwe_resource_path_fix.md new file mode 100644 index 000000000000..bf2b5ceda580 --- /dev/null +++ b/changelog.d/20250220_003314_ravinduwe_resource_path_fix.md @@ -0,0 +1,4 @@ +### Changed + +- SDK `task.upload_data()` can accept resources of the Path type + () diff --git a/cvat-sdk/cvat_sdk/core/proxies/tasks.py b/cvat-sdk/cvat_sdk/core/proxies/tasks.py index 8e25b1a2c390..d1e1c5b90412 100644 --- a/cvat-sdk/cvat_sdk/core/proxies/tasks.py +++ b/cvat-sdk/cvat_sdk/core/proxies/tasks.py @@ -7,13 +7,14 @@ import io import json import mimetypes +import os import shutil from collections.abc import Sequence from enum import Enum from pathlib import Path from time import sleep from typing import TYPE_CHECKING, Any, Optional -import os + from PIL import Image from cvat_sdk.api_client import apis, exceptions, models @@ -111,8 +112,7 @@ def upload_data( if resource_type in [ResourceType.REMOTE, ResourceType.SHARE]: str_resources = [] - for resource in resources: - str_resources.append(os.fspath(resource)) + str_resources = list(map(os.fspath, resources)) if resource_type is ResourceType.REMOTE: data["remote_files"] = str_resources From b66d287064e7ce554bccf87042071351d357ee18 Mon Sep 17 00:00:00 2001 From: Ravindu Weerakoon <81863859+RavinduWeerakoon@users.noreply.github.com> Date: Thu, 20 Feb 2025 21:39:15 +0530 Subject: [PATCH 4/5] Update changelog.d/20250220_003314_ravinduwe_resource_path_fix.md Co-authored-by: Roman Donchenko --- changelog.d/20250220_003314_ravinduwe_resource_path_fix.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog.d/20250220_003314_ravinduwe_resource_path_fix.md b/changelog.d/20250220_003314_ravinduwe_resource_path_fix.md index bf2b5ceda580..76f94830afbc 100644 --- a/changelog.d/20250220_003314_ravinduwe_resource_path_fix.md +++ b/changelog.d/20250220_003314_ravinduwe_resource_path_fix.md @@ -1,4 +1,5 @@ ### Changed -- SDK `task.upload_data()` can accept resources of the Path type +- SDK `task.upload_data()` can accept resources of the `Path` type + when `resource_type` is `REMOTE` or `SHARE` () From 70ca3ca77788eaf87baa01375b5a2b09a70527c2 Mon Sep 17 00:00:00 2001 From: Ravindu Weerakoon Date: Thu, 20 Feb 2025 21:44:55 +0530 Subject: [PATCH 5/5] Removing the unnecessary assignment --- cvat-sdk/cvat_sdk/core/proxies/tasks.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cvat-sdk/cvat_sdk/core/proxies/tasks.py b/cvat-sdk/cvat_sdk/core/proxies/tasks.py index d1e1c5b90412..9069dad430e3 100644 --- a/cvat-sdk/cvat_sdk/core/proxies/tasks.py +++ b/cvat-sdk/cvat_sdk/core/proxies/tasks.py @@ -110,7 +110,6 @@ def upload_data( data["frame_filter"] = f"step={params.get('frame_step')}" if resource_type in [ResourceType.REMOTE, ResourceType.SHARE]: - str_resources = [] str_resources = list(map(os.fspath, resources))