Skip to content
7 changes: 5 additions & 2 deletions src/codeocean/capsule.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,16 @@ def list_computations(self, capsule_id: str) -> list[Computation]:

return [Computation.from_dict(c) for c in res.json()]

def attach_data_assets(self, capsule_id: str, attach_params: list[DataAssetAttachParams]) -> DataAssetAttachResults:
def attach_data_assets(
self,
capsule_id: str,
attach_params: list[DataAssetAttachParams]) -> list[DataAssetAttachResults]:
res = self.client.post(
f"capsules/{capsule_id}/data_assets",
json=[j.to_dict() for j in attach_params],
)

return DataAssetAttachResults.from_dict(res.json())
return [DataAssetAttachResults.from_dict(c) for c in res.json()]

def detach_data_assets(self, capsule_id: str, data_assets: list[str]):
self.client.delete(
Expand Down
15 changes: 15 additions & 0 deletions src/codeocean/data_asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from typing import Optional

from codeocean.components import SortOrder, SearchFilter, Permissions
from codeocean.computation import PipelineProcess, Param


class DataAssetType(StrEnum):
Expand Down Expand Up @@ -51,6 +52,19 @@ class AppParameter:
value: str


@dataclass_json
@dataclass(frozen=True)
class ResultsInfo:
capsule_id: Optional[str] = None
pipeline_id: Optional[str] = None
version: Optional[int] = None
commit: Optional[str] = None
run_script: Optional[str] = None
data_assets: Optional[list[str]] = None
parameters: Optional[list[Param]] = None
processes: Optional[list[PipelineProcess]] = None


@dataclass_json
@dataclass(frozen=True)
class DataAsset:
Expand Down Expand Up @@ -139,6 +153,7 @@ class DataAssetParams:
target: Optional[Target] = None
custom_metadata: Optional[dict] = None
data_asset_ids: Optional[list[str]] = None
results_info: Optional[ResultsInfo] = None


@dataclass_json
Expand Down