From fd296fe7b21c62d430485de3fedfda51821aafad Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Tue, 31 Dec 2024 12:33:47 -0500 Subject: [PATCH 01/19] add next_token to SearchParams and SearchResults --- src/codeocean/data_asset.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 7b8e10c..839fe5c 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -204,6 +204,7 @@ class DataAssetSearchParams: archived: bool favorite: bool query: Optional[str] = None + next_token: Optional[str] = None sort_field: Optional[DataAssetSortBy] = None sort_order: Optional[SortOrder] = None type: Optional[DataAssetType] = None @@ -217,6 +218,7 @@ class DataAssetSearchParams: class DataAssetSearchResults: has_more: bool results: list[DataAsset] + next_token: Optional[str] = None @dataclass_json From f92ba17aa2aba26048c794c4b5f204e23dfb5122 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Tue, 31 Dec 2024 15:16:11 -0500 Subject: [PATCH 02/19] Make all DataAssetSearchParams optional --- src/codeocean/data_asset.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 839fe5c..f2b6530 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -199,10 +199,10 @@ class DataAssetSearchOrigin(StrEnum): @dataclass_json @dataclass(frozen=True) class DataAssetSearchParams: - limit: int - offset: int - archived: bool - favorite: bool + limit: Optional[int] = None + offset: Optional[int] = None + archived: Optional[bool] = None + favorite: Optional[bool] = None query: Optional[str] = None next_token: Optional[str] = None sort_field: Optional[DataAssetSortBy] = None From ebae2492b2fcb071cda07c5070e6307b9acea1e1 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Tue, 31 Dec 2024 15:31:08 -0500 Subject: [PATCH 03/19] add model as DataAssetType --- src/codeocean/data_asset.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index f2b6530..09a3054 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -15,6 +15,7 @@ class DataAssetType(StrEnum): Dataset = "dataset" Result = "result" Combined = "combined" + Model = "model" class DataAssetState(StrEnum): From d35f5aa467965fdd9dbbf4af8eb2406b55fbff02 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Tue, 31 Dec 2024 15:56:38 -0500 Subject: [PATCH 04/19] add search_capsules function, CapsuleSearchParams and CapsuleSearchResults classes --- src/codeocean/capsule.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/codeocean/capsule.py b/src/codeocean/capsule.py index 3d9b2d9..fea5883 100644 --- a/src/codeocean/capsule.py +++ b/src/codeocean/capsule.py @@ -49,6 +49,30 @@ class Capsule: versions: Optional[list[dict]] = None +@dataclass_json +@dataclass(frozen=True) +class CapsuleSearchParams: + query: Optional[str] = None + next_token: Optional[str] = None + offset: Optional[int] = None + limit: Optional[int] = None + sort_field: Optional[CapsuleSortBy] = None + sort_order: Optional[SortOrder] = None + ownership: Optional[CapsuleOwnership] = None + status: Optional[CapsuleStatus] = None + favorite: Optional[bool] = None + archived: Optional[bool] = None + filters: Optional[list[SearchFilter]] = None + + +@dataclass_json +@dataclass(frozen=True) +class CapsuleSearchResults: + has_more: bool + results: list[Capsule] + next_token: Optional[str] = None + + @dataclass class Capsules: @@ -80,3 +104,8 @@ def detach_data_assets(self, capsule_id: str, data_assets: list[str]): f"capsules/{capsule_id}/data_assets/", json=data_assets, ) + + def search_capsules(self, search_params: CapsuleSearchParams) -> CapsuleSearchResults: + res = self.client.post("capsules/search", json=search_params.to_dict()) + + return CapsuleSearchResults.from_dict(res.json()) From 2e0a3387edba6ed9eeae630ab8595c79d633cb34 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Tue, 31 Dec 2024 16:02:26 -0500 Subject: [PATCH 05/19] add CapsuleSortBy class --- src/codeocean/capsule.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/codeocean/capsule.py b/src/codeocean/capsule.py index fea5883..b89af0d 100644 --- a/src/codeocean/capsule.py +++ b/src/codeocean/capsule.py @@ -17,6 +17,10 @@ class CapsuleStatus(StrEnum): Published = "published" Verified = "verified" +class CapsuleSortBy(StrEnum): + Created = "created" + LastAccessed = "last_accessed" + Name = "name" @dataclass_json @dataclass(frozen=True) @@ -58,7 +62,7 @@ class CapsuleSearchParams: limit: Optional[int] = None sort_field: Optional[CapsuleSortBy] = None sort_order: Optional[SortOrder] = None - ownership: Optional[CapsuleOwnership] = None + ownership: Optional[Ownership] = None status: Optional[CapsuleStatus] = None favorite: Optional[bool] = None archived: Optional[bool] = None From 0392117b9cd548d2695bcfe8ecf9bc6a23fb5087 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Tue, 31 Dec 2024 16:32:47 -0500 Subject: [PATCH 06/19] add CapsuleOwnership class, import SortOrder, SearchFilter --- src/codeocean/capsule.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/codeocean/capsule.py b/src/codeocean/capsule.py index b89af0d..a9b48e0 100644 --- a/src/codeocean/capsule.py +++ b/src/codeocean/capsule.py @@ -5,6 +5,7 @@ from typing import Optional from requests_toolbelt.sessions import BaseUrlSession +from codeocean.components import SortOrder, SearchFilter from codeocean.computation import Computation from codeocean.data_asset import DataAssetAttachParams, DataAssetAttachResults from codeocean.enum import StrEnum @@ -17,11 +18,19 @@ class CapsuleStatus(StrEnum): Published = "published" Verified = "verified" + class CapsuleSortBy(StrEnum): Created = "created" LastAccessed = "last_accessed" Name = "name" + +class CapsuleOwnership(StrEnum): + Private = "private" + Shared = "shared" + Created = "created" + + @dataclass_json @dataclass(frozen=True) class OriginalCapsuleInfo: @@ -62,7 +71,7 @@ class CapsuleSearchParams: limit: Optional[int] = None sort_field: Optional[CapsuleSortBy] = None sort_order: Optional[SortOrder] = None - ownership: Optional[Ownership] = None + ownership: Optional[CapsuleOwnership] = None status: Optional[CapsuleStatus] = None favorite: Optional[bool] = None archived: Optional[bool] = None From 75d4b890cb65ac900f628d419ee24467ea00af0c Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Tue, 31 Dec 2024 16:45:35 -0500 Subject: [PATCH 07/19] update Capsule and CapsuleStatus fields according to 3.1 changes --- src/codeocean/capsule.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/codeocean/capsule.py b/src/codeocean/capsule.py index a9b48e0..47d3566 100644 --- a/src/codeocean/capsule.py +++ b/src/codeocean/capsule.py @@ -12,11 +12,8 @@ class CapsuleStatus(StrEnum): - NonPublished = "non-published" - Submitted = "submitted" - Publishing = "publishing" - Published = "published" - Verified = "verified" + NonRelease = "non_release" + Release = "release" class CapsuleSortBy(StrEnum): @@ -55,9 +52,9 @@ class Capsule: cloned_from_url: Optional[str] = None description: Optional[str] = None field: Optional[str] = None - keywords: Optional[list[str]] = None + tags: Optional[list[str]] = None original_capsule: Optional[OriginalCapsuleInfo] = None - published_capsule: Optional[str] = None + release_capsule: Optional[str] = None submission: Optional[dict] = None versions: Optional[list[dict]] = None From 51c033e9919b9c6cd3dba658c042d3bc2927bc00 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Tue, 31 Dec 2024 16:48:04 -0500 Subject: [PATCH 08/19] fix formatting issue --- src/codeocean/capsule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codeocean/capsule.py b/src/codeocean/capsule.py index 47d3566..e58e1dd 100644 --- a/src/codeocean/capsule.py +++ b/src/codeocean/capsule.py @@ -114,7 +114,7 @@ def detach_data_assets(self, capsule_id: str, data_assets: list[str]): f"capsules/{capsule_id}/data_assets/", json=data_assets, ) - + def search_capsules(self, search_params: CapsuleSearchParams) -> CapsuleSearchResults: res = self.client.post("capsules/search", json=search_params.to_dict()) From b012dba43744281e62cfa08507f13e29b40604a5 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 16:27:01 -0500 Subject: [PATCH 09/19] move ownership to components.py --- src/codeocean/capsule.py | 6 +++--- src/codeocean/components.py | 6 ++++++ src/codeocean/data_asset.py | 10 ++-------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/codeocean/capsule.py b/src/codeocean/capsule.py index e58e1dd..90b35bd 100644 --- a/src/codeocean/capsule.py +++ b/src/codeocean/capsule.py @@ -5,7 +5,7 @@ from typing import Optional from requests_toolbelt.sessions import BaseUrlSession -from codeocean.components import SortOrder, SearchFilter +from codeocean.components import Ownership, SortOrder, SearchFilter from codeocean.computation import Computation from codeocean.data_asset import DataAssetAttachParams, DataAssetAttachResults from codeocean.enum import StrEnum @@ -22,7 +22,7 @@ class CapsuleSortBy(StrEnum): Name = "name" -class CapsuleOwnership(StrEnum): +class Ownership(StrEnum): Private = "private" Shared = "shared" Created = "created" @@ -68,7 +68,7 @@ class CapsuleSearchParams: limit: Optional[int] = None sort_field: Optional[CapsuleSortBy] = None sort_order: Optional[SortOrder] = None - ownership: Optional[CapsuleOwnership] = None + ownership: Optional[Ownership] = None status: Optional[CapsuleStatus] = None favorite: Optional[bool] = None archived: Optional[bool] = None diff --git a/src/codeocean/components.py b/src/codeocean/components.py index 712b800..16b4641 100644 --- a/src/codeocean/components.py +++ b/src/codeocean/components.py @@ -69,3 +69,9 @@ class SearchFilter: values: Optional[list[str | float]] = None range: Optional[SearchFilterRange] = None exclude: Optional[bool] = None + + +class Ownership(StrEnum): + Private = "private" + Shared = "shared" + Created = "created" \ No newline at end of file diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 09a3054..01b59a2 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -6,7 +6,7 @@ from time import sleep, time from typing import Optional -from codeocean.components import SortOrder, SearchFilter, Permissions +from codeocean.components import Ownership, SortOrder, SearchFilter, Permissions from codeocean.computation import PipelineProcess, Param from codeocean.enum import StrEnum @@ -186,12 +186,6 @@ class DataAssetSortBy(StrEnum): Size = "size" -class DataAssetOwnership(StrEnum): - Private = "private" - Shared = "shared" - Created = "created" - - class DataAssetSearchOrigin(StrEnum): Internal = "internal" External = "external" @@ -209,7 +203,7 @@ class DataAssetSearchParams: sort_field: Optional[DataAssetSortBy] = None sort_order: Optional[SortOrder] = None type: Optional[DataAssetType] = None - ownership: Optional[DataAssetOwnership] = None + ownership: Optional[Ownership] = None origin: Optional[DataAssetSearchOrigin] = None filters: Optional[list[SearchFilter]] = None From 435abd9d732ee9e71259e339616140ea986fb07b Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 16:35:08 -0500 Subject: [PATCH 10/19] order DataAssetSearchParams according to open API spec --- src/codeocean/data_asset.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 01b59a2..0b0cd43 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -194,17 +194,17 @@ class DataAssetSearchOrigin(StrEnum): @dataclass_json @dataclass(frozen=True) class DataAssetSearchParams: - limit: Optional[int] = None - offset: Optional[int] = None - archived: Optional[bool] = None - favorite: Optional[bool] = None query: Optional[str] = None next_token: Optional[str] = None + offset: Optional[int] = None + limit: Optional[int] = None sort_field: Optional[DataAssetSortBy] = None sort_order: Optional[SortOrder] = None type: Optional[DataAssetType] = None ownership: Optional[Ownership] = None origin: Optional[DataAssetSearchOrigin] = None + favorite: Optional[bool] = None + archived: Optional[bool] = None filters: Optional[list[SearchFilter]] = None From 1a204b4c7cecd73e727df0e247943a64e3c72bd6 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 17:07:06 -0500 Subject: [PATCH 11/19] add exit_code to Computation class --- src/codeocean/computation.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/codeocean/computation.py b/src/codeocean/computation.py index 723834b..36a4aae 100644 --- a/src/codeocean/computation.py +++ b/src/codeocean/computation.py @@ -54,14 +54,15 @@ class Computation: id: str created: int name: str - state: ComputationState run_time: int + state: ComputationState cloud_workstation: Optional[bool] = None data_assets: Optional[list[InputDataAsset]] = None - end_status: Optional[ComputationEndStatus] = None - has_results: Optional[bool] = None parameters: Optional[list[Param]] = None processes: Optional[list[PipelineProcess]] = None + end_status: Optional[ComputationEndStatus] = None + exit_code: Optional[int] = None + has_results: Optional[bool] = None @dataclass_json From 1441e128821a20a3693a04cf69e65da5617d915e Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 17:34:02 -0500 Subject: [PATCH 12/19] move folder and url functionality from computation.py to folder.py --- src/codeocean/computation.py | 28 +--------------------------- src/codeocean/folder.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 27 deletions(-) create mode 100644 src/codeocean/folder.py diff --git a/src/codeocean/computation.py b/src/codeocean/computation.py index 36a4aae..976e66e 100644 --- a/src/codeocean/computation.py +++ b/src/codeocean/computation.py @@ -7,6 +7,7 @@ from time import sleep, time from codeocean.enum import StrEnum +from codeocean.folder import Folder, DownloadFileURL class ComputationState(StrEnum): @@ -100,33 +101,6 @@ class RunParams: processes: Optional[list[PipelineProcessParams]] = None -@dataclass_json -@dataclass(frozen=True) -class FolderItem: - name: str - path: str - type: str - size: Optional[int] = None - - -@dataclass_json -@dataclass(frozen=True) -class Folder: - items: list[FolderItem] - - -@dataclass_json -@dataclass(frozen=True) -class ListFolderParams: - path: str - - -@dataclass_json -@dataclass(frozen=True) -class DownloadFileURL: - url: str - - @dataclass class Computations: diff --git a/src/codeocean/folder.py b/src/codeocean/folder.py new file mode 100644 index 0000000..234155e --- /dev/null +++ b/src/codeocean/folder.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +from dataclasses_json import dataclass_json +from dataclasses import dataclass +from typing import Optional + + +@dataclass_json +@dataclass(frozen=True) +class FolderItem: + name: str + path: str + type: str + size: Optional[int] = None + + +@dataclass_json +@dataclass(frozen=True) +class Folder: + items: list[FolderItem] + + +@dataclass_json +@dataclass(frozen=True) +class ListFolderParams: + path: str + + +@dataclass_json +@dataclass(frozen=True) +class DownloadFileURL: + url: str \ No newline at end of file From bebcfb3191bd3a95df860980321caa2971f308e1 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 17:48:22 -0500 Subject: [PATCH 13/19] add list data asset file and download functionality to data_asset.py --- src/codeocean/data_asset.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 0b0cd43..2d03486 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -9,6 +9,7 @@ from codeocean.components import Ownership, SortOrder, SearchFilter, Permissions from codeocean.computation import PipelineProcess, Param from codeocean.enum import StrEnum +from codeocean.folder import Folder, DownloadFileURL class DataAssetType(StrEnum): @@ -298,3 +299,20 @@ def search_data_assets(self, search_params: DataAssetSearchParams) -> DataAssetS res = self.client.post("data_assets/search", json=search_params.to_dict()) return DataAssetSearchResults.from_dict(res.json()) + + def list_data_asset_files(self, data_asset_id: str, path: str = "") -> Folder: + data = { + "path": path, + } + + res = self.client.post(f"data_assets/{data_asset_id}/files", json=data) + + return Folder.from_dict(res.json()) + + def get_data_asset_file_download_url(self, data_asset_id: str, path: str) -> DownloadFileURL: + res = self.client.get( + f"data_assets/{data_asset_id}/files/download_url", + params={"path": path}, + ) + + return DownloadFileURL.from_dict(res.json()) From 10535ced76e638ce457fe3acff59291fc70230a4 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 18:01:18 -0500 Subject: [PATCH 14/19] make all provenance fields optional in line with open API spec --- src/codeocean/data_asset.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 2d03486..559e02a 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -28,10 +28,10 @@ class DataAssetState(StrEnum): @dataclass_json @dataclass(frozen=True) class Provenance: - commit: str - run_script: str - docker_image: str - capsule: str + commit: Optional[str] = None + run_script: Optional[str] = None + docker_image: Optional[str] = None + capsule: Optional[str] = None data_assets: Optional[list[str]] = None From 112aa1518582df16979ad7668f6b8d6abddd4b6a Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 18:06:21 -0500 Subject: [PATCH 15/19] fix formatting issues --- src/codeocean/capsule.py | 6 ------ src/codeocean/components.py | 3 ++- src/codeocean/data_asset.py | 2 +- src/codeocean/folder.py | 3 ++- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/codeocean/capsule.py b/src/codeocean/capsule.py index 90b35bd..e8ff516 100644 --- a/src/codeocean/capsule.py +++ b/src/codeocean/capsule.py @@ -22,12 +22,6 @@ class CapsuleSortBy(StrEnum): Name = "name" -class Ownership(StrEnum): - Private = "private" - Shared = "shared" - Created = "created" - - @dataclass_json @dataclass(frozen=True) class OriginalCapsuleInfo: diff --git a/src/codeocean/components.py b/src/codeocean/components.py index 16b4641..af7bac9 100644 --- a/src/codeocean/components.py +++ b/src/codeocean/components.py @@ -74,4 +74,5 @@ class SearchFilter: class Ownership(StrEnum): Private = "private" Shared = "shared" - Created = "created" \ No newline at end of file + Created = "created" + \ No newline at end of file diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 559e02a..014c8f7 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -299,7 +299,7 @@ def search_data_assets(self, search_params: DataAssetSearchParams) -> DataAssetS res = self.client.post("data_assets/search", json=search_params.to_dict()) return DataAssetSearchResults.from_dict(res.json()) - + def list_data_asset_files(self, data_asset_id: str, path: str = "") -> Folder: data = { "path": path, diff --git a/src/codeocean/folder.py b/src/codeocean/folder.py index 234155e..c5217d3 100644 --- a/src/codeocean/folder.py +++ b/src/codeocean/folder.py @@ -29,4 +29,5 @@ class ListFolderParams: @dataclass_json @dataclass(frozen=True) class DownloadFileURL: - url: str \ No newline at end of file + url: str + \ No newline at end of file From f499b92463605103cf7f10d99a470a49c6f5a02f Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 18:07:21 -0500 Subject: [PATCH 16/19] fix formatting issues --- src/codeocean/components.py | 1 - src/codeocean/folder.py | 1 - 2 files changed, 2 deletions(-) diff --git a/src/codeocean/components.py b/src/codeocean/components.py index af7bac9..de80325 100644 --- a/src/codeocean/components.py +++ b/src/codeocean/components.py @@ -75,4 +75,3 @@ class Ownership(StrEnum): Private = "private" Shared = "shared" Created = "created" - \ No newline at end of file diff --git a/src/codeocean/folder.py b/src/codeocean/folder.py index c5217d3..43cac89 100644 --- a/src/codeocean/folder.py +++ b/src/codeocean/folder.py @@ -30,4 +30,3 @@ class ListFolderParams: @dataclass(frozen=True) class DownloadFileURL: url: str - \ No newline at end of file From 36ee0bb2995a57beb08482cc79d40ffa19a4c440 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Thu, 2 Jan 2025 20:02:24 -0500 Subject: [PATCH 17/19] reorder DataAsset fields, add transfer_error and last_transferred --- src/codeocean/data_asset.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 014c8f7..4656b9a 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -80,16 +80,18 @@ class DataAsset: state: DataAssetState type: DataAssetType last_used: int - app_parameters: Optional[list[AppParameter]] = None - custom_metadata: Optional[dict] = None - description: Optional[str] = None - failure_reason: Optional[str] = None files: Optional[int] = None - provenance: Optional[Provenance] = None size: Optional[int] = None - source_bucket: Optional[SourceBucket] = None + description: Optional[str] = None tags: Optional[list[str]] = None + provenance: Optional[Provenance] = None + source_bucket: Optional[SourceBucket] = None + custom_metadata: Optional[dict] = None + app_parameters: Optional[list[AppParameter]] = None contained_data_assets: Optional[list[ContainedDataAsset]] = None + last_transferred: Optional[int] = None + transfer_error: Optional[str] = None + failure_reason: Optional[str] = None @dataclass_json @@ -225,6 +227,13 @@ class ContainedDataAsset: size: Optional[int] = None +@dataclass_json +@dataclass(frozen=True) +class TransferDataParams: + target: Target + force: Optional[bool] = None + + @dataclass class DataAssets: From a585de24303604e09a8522b2e801aec9bd1264d5 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Fri, 3 Jan 2025 10:17:04 -0500 Subject: [PATCH 18/19] add transfer data asset API --- src/codeocean/data_asset.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 4656b9a..4a02a5d 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -325,3 +325,9 @@ def get_data_asset_file_download_url(self, data_asset_id: str, path: str) -> Dow ) return DownloadFileURL.from_dict(res.json()) + + def transfer_data_asset(self, data_asset_id: str, transfer_params: TransferDataParams): + self.client.post( + f"data_assets/{data_asset_id}/transfer", + json=transfer_params.to_dict() + ) From 5e940e56b0e3563306b88a07776447de30bcbbb7 Mon Sep 17 00:00:00 2001 From: jake-valsamis Date: Fri, 3 Jan 2025 10:19:26 -0500 Subject: [PATCH 19/19] fix formatting issues --- src/codeocean/data_asset.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/codeocean/data_asset.py b/src/codeocean/data_asset.py index 4a02a5d..5fe07a3 100644 --- a/src/codeocean/data_asset.py +++ b/src/codeocean/data_asset.py @@ -325,9 +325,9 @@ def get_data_asset_file_download_url(self, data_asset_id: str, path: str) -> Dow ) return DownloadFileURL.from_dict(res.json()) - + def transfer_data_asset(self, data_asset_id: str, transfer_params: TransferDataParams): self.client.post( - f"data_assets/{data_asset_id}/transfer", + f"data_assets/{data_asset_id}/transfer", json=transfer_params.to_dict() )