Skip to content

Commit 040d1f9

Browse files
committed
handle metadata and job inputs/outputs in studies api
1 parent f703002 commit 040d1f9

File tree

4 files changed

+74
-6
lines changed

4 files changed

+74
-6
lines changed

clients/python/src/osparc/_api_solvers_api.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,16 @@
44

55
import httpx
66
from osparc_client.api.solvers_api import SolversApi as _SolversApi
7-
from .models import JobInputs, OnePageSolverPort, SolverPort, JobOutputs, JobMetadata
7+
from .models import (
8+
JobInputs,
9+
OnePageSolverPort,
10+
SolverPort,
11+
JobOutputs,
12+
JobMetadata,
13+
JobMetadataUpdate,
14+
)
815
from osparc_client import JobInputs as _JobInputs
16+
from osparc_client import JobMetadataUpdate as _JobMetadataUpdate
917

1018
from ._api_client import ApiClient
1119
from ._settings import ParentProjectInfo
@@ -19,6 +27,7 @@
1927
import warnings
2028
from tempfile import NamedTemporaryFile
2129
from pathlib import Path
30+
from pydantic import validate_call
2231

2332

2433
class SolversApi(_SolversApi):
@@ -99,6 +108,7 @@ def jobs(self, solver_key: str, version: str, **kwargs) -> PaginationGenerator:
99108
)
100109
return self.iter_jobs(solver_key, version, **kwargs)
101110

111+
@validate_call
102112
def create_job(
103113
self, solver_key: str, version: str, job_inputs: JobInputs, **kwargs
104114
):
@@ -121,3 +131,20 @@ def get_job_outputs(self, *args, **kwargs) -> JobOutputs:
121131
def get_job_custom_metadata(self, *args, **kwargs) -> JobMetadata:
122132
metadata = super().get_job_custom_metadata(*args, **kwargs)
123133
return JobMetadata.model_validate_json(metadata.to_json())
134+
135+
@validate_call
136+
def replace_job_custom_metadata(
137+
self,
138+
solver_key: str,
139+
version: str,
140+
job_id: str,
141+
job_metadata_update: JobMetadataUpdate,
142+
) -> JobMetadata:
143+
_job_metadata_update = _JobMetadataUpdate.from_json(
144+
job_metadata_update.model_dump_json()
145+
)
146+
assert _job_metadata_update is not None
147+
_job_custom_metadata = super().replace_job_custom_metadata(
148+
solver_key, version, job_id, _job_metadata_update
149+
)
150+
return JobMetadata.model_validate_json(_job_custom_metadata.to_json())

clients/python/src/osparc/_api_studies_api.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,19 @@
77
from typing import Any, Optional
88

99
import httpx
10-
from .models import JobInputs, JobLogsMap, PageStudy
10+
from pydantic import StrictStr
11+
12+
from .models import (
13+
JobInputs,
14+
JobLogsMap,
15+
PageStudy,
16+
JobOutputs,
17+
JobMetadata,
18+
JobMetadataUpdate,
19+
)
1120
from osparc_client.api.studies_api import StudiesApi as _StudiesApi
1221
from osparc_client import JobInputs as _JobInputs
22+
from osparc_client import JobMetadataUpdate as _JobMetadataUpdate
1323
from tqdm.asyncio import tqdm_asyncio
1424

1525
from ._api_client import ApiClient
@@ -70,6 +80,10 @@ def create_study_job(self, study_id: str, job_inputs: JobInputs, **kwargs):
7080
kwargs = {**kwargs, **ParentProjectInfo().model_dump(exclude_none=True)}
7181
return super().create_study_job(study_id, _job_inputs, **kwargs)
7282

83+
def get_study_job_outputs(self, *args, **kwargs) -> JobOutputs:
84+
_job_outputs = super().get_study_job_outputs(*args, **kwargs)
85+
return JobOutputs.model_validate_json(_job_outputs.to_json())
86+
7387
def clone_study(self, study_id: str, **kwargs):
7488
kwargs = {**kwargs, **ParentProjectInfo().model_dump(exclude_none=True)}
7589
return super().clone_study(study_id, **kwargs)
@@ -149,3 +163,22 @@ async def _download(unique_node_name: str, download_link: str) -> None:
149163
)
150164

151165
return folder
166+
167+
def get_study_job_custom_metadata(self, study_id: str, job_id: str) -> JobMetadata:
168+
_job_metadata = super().get_study_job_custom_metadata(study_id, job_id)
169+
return JobMetadata.model_validate_json(_job_metadata.to_json())
170+
171+
def replace_study_job_custom_metadata(
172+
self,
173+
study_id: StrictStr,
174+
job_id: StrictStr,
175+
job_metadata_update: JobMetadataUpdate,
176+
) -> JobMetadata:
177+
_job_metadata_update = _JobMetadataUpdate.from_json(
178+
job_metadata_update.model_dump_json()
179+
)
180+
assert _job_metadata_update is not None
181+
_job_metadata = super().replace_study_job_custom_metadata(
182+
study_id, job_id, _job_metadata_update
183+
)
184+
return JobMetadata.model_validate_json(_job_metadata.to_json())

clients/python/src/osparc/_models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from osparc_client import JobInputs as _JobInputs
22
from osparc_client import JobOutputs as _JobOutputs
33
from osparc_client import JobMetadata as _JobMetadata
4+
from osparc_client import JobMetadataUpdate as _JobMetadataUpdate
45
from .models import File
56
from typing import Dict, Union, List
67
from pydantic import BaseModel, StrictStr, Field
@@ -33,3 +34,12 @@ class JobMetadata(BaseModel):
3334

3435

3536
assert set(_JobMetadata.model_fields.keys()) == set(JobMetadata.model_fields.keys())
37+
38+
39+
class JobMetadataUpdate(BaseModel):
40+
metadata: Dict[str, Union[bool, float, int, str, None]]
41+
42+
43+
assert set(_JobMetadataUpdate.model_fields.keys()) == set(
44+
JobMetadataUpdate.model_fields.keys()
45+
)

clients/python/src/osparc/models.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@
2929
)
3030
from osparc_client.models.job import Job as Job
3131
from osparc_client.models.job_logs_map import JobLogsMap as JobLogsMap
32-
from osparc_client.models.job_metadata import JobMetadata as JobMetadata
33-
from osparc_client.models.job_metadata_update import (
34-
JobMetadataUpdate as JobMetadataUpdate,
35-
)
3632
from osparc_client.models.values_value import ValuesValue as ValuesValue
3733
from osparc_client.models.job_status import JobStatus as JobStatus
3834
from osparc_client.models.links import Links as Links
@@ -74,6 +70,8 @@
7470

7571
from ._models import JobInputs as JobInputs
7672
from ._models import JobOutputs as JobOutputs
73+
from ._models import JobMetadata as JobMetadata
74+
from ._models import JobMetadataUpdate as JobMetadataUpdate
7775

7876
# renames
7977
TaskStates = _RunningState

0 commit comments

Comments
 (0)