-
Notifications
You must be signed in to change notification settings - Fork 18
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update SDK to use new workflows API (#783)
The only thing remaining now is the frontend. Once the frontend swaps to the new experiments and workflows API, we can remove the old experiments endpoint and all related code that was only needed for that route. --------- Signed-off-by: Nathan Brake <[email protected]> Co-authored-by: Peter Wilson <[email protected]>
- Loading branch information
Showing
7 changed files
with
302 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,65 +1,50 @@ | ||
from http import HTTPMethod | ||
from json import dumps | ||
from uuid import UUID | ||
|
||
from lumigator_schemas.experiments import ( | ||
ExperimentCreate, | ||
ExperimentIdCreate, | ||
ExperimentIdResponse, | ||
ExperimentResponse, | ||
ExperimentResultDownloadResponse, | ||
ExperimentResultResponse, | ||
GetExperimentResponse, | ||
) | ||
from lumigator_schemas.extras import ListingResponse | ||
|
||
from lumigator_sdk.client import ApiClient | ||
from lumigator_sdk.strict_schemas import ExperimentCreate as ExperimentCreateStrict | ||
from lumigator_sdk.strict_schemas import ExperimentIdCreate as ExperimentIdCreateStrict | ||
|
||
|
||
class Experiments: | ||
EXPERIMENTS_ROUTE = "experiments" | ||
EXPERIMENTS_ROUTE = "experiments/new" | ||
|
||
def __init__(self, c: ApiClient): | ||
self.__client = c | ||
|
||
def create_experiment(self, experiment: ExperimentCreate) -> ExperimentResponse: | ||
def create_experiment(self, experiment: ExperimentIdCreate) -> ExperimentIdResponse: | ||
"""Creates a new experiment.""" | ||
ExperimentCreateStrict.model_validate(ExperimentCreate.model_dump(experiment)) | ||
ExperimentIdCreateStrict.model_validate(ExperimentIdCreate.model_dump(experiment)) | ||
response = self.__client.get_response( | ||
self.EXPERIMENTS_ROUTE, HTTPMethod.POST, dumps(experiment) | ||
self.EXPERIMENTS_ROUTE, HTTPMethod.POST, experiment.model_dump_json() | ||
) | ||
|
||
data = response.json() | ||
return ExperimentResponse(**data) | ||
return ExperimentIdResponse(**data) | ||
|
||
def get_experiment(self, experiment_id: UUID) -> ExperimentResponse | None: | ||
def get_experiment(self, experiment_id: str) -> GetExperimentResponse | None: | ||
"""Returns information on the experiment for the specified ID.""" | ||
response = self.__client.get_response(f"{self.EXPERIMENTS_ROUTE}/{experiment_id}") | ||
|
||
data = response.json() | ||
return ExperimentResponse(**data) | ||
return GetExperimentResponse(**data) | ||
|
||
def get_experiments( | ||
self, skip: int = 0, limit: int = 100 | ||
) -> ListingResponse[ExperimentResponse]: | ||
"""Returns information on all experiments.""" | ||
response = self.__client.get_response(self.EXPERIMENTS_ROUTE) | ||
response = self.__client.get_response(f"{self.EXPERIMENTS_ROUTE}/all") | ||
|
||
data = response.json() | ||
return ListingResponse[ExperimentResponse](**data) | ||
|
||
def get_experiment_result(self, experiment_id: UUID) -> ExperimentResultResponse | None: | ||
"""Returns the result of the experiment for the specified ID.""" | ||
response = self.__client.get_response(f"{self.EXPERIMENTS_ROUTE}/{experiment_id}/result") | ||
|
||
data = response.json() | ||
return ExperimentResultResponse(**data) | ||
|
||
def get_experiment_result_download( | ||
self, experiment_id: UUID | ||
) -> ExperimentResultDownloadResponse | None: | ||
"""Returns the result of the experiment for the specified ID.""" | ||
response = self.__client.get_response( | ||
f"{self.EXPERIMENTS_ROUTE}/{experiment_id}/result/download" | ||
) | ||
|
||
data = response.json() | ||
return ExperimentResultDownloadResponse(**data) | ||
def delete_experiment(self, experiment_id: str) -> None: | ||
"""Deletes the experiment for the specified ID.""" | ||
self.__client.get_response(f"{self.EXPERIMENTS_ROUTE}/{experiment_id}", HTTPMethod.DELETE) | ||
return None |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
from http import HTTPMethod | ||
|
||
from lumigator_schemas.jobs import JobLogsResponse | ||
from lumigator_schemas.workflows import ( | ||
WorkflowCreateRequest, | ||
WorkflowDetailsResponse, | ||
WorkflowResponse, | ||
) | ||
|
||
from lumigator_sdk.client import ApiClient | ||
from lumigator_sdk.strict_schemas import WorkflowCreateRequest as WorkflowCreateRequestStrict | ||
|
||
|
||
class Workflows: | ||
WORKFLOWS_ROUTE = "workflows" | ||
|
||
def __init__(self, c: ApiClient): | ||
self.__client = c | ||
|
||
def create_workflow(self, workflow: WorkflowCreateRequest) -> WorkflowResponse: | ||
"""Creates a new experiment.""" | ||
WorkflowCreateRequestStrict.model_validate(WorkflowCreateRequest.model_dump(workflow)) | ||
response = self.__client.get_response( | ||
self.WORKFLOWS_ROUTE, HTTPMethod.POST, workflow.model_dump_json() | ||
) | ||
|
||
data = response.json() | ||
return WorkflowResponse(**data) | ||
|
||
def get_workflow(self, workflow_id: str) -> WorkflowDetailsResponse | None: | ||
"""Returns information on the experiment for the specified ID.""" | ||
response = self.__client.get_response(f"{self.WORKFLOWS_ROUTE}/{workflow_id}") | ||
|
||
data = response.json() | ||
return WorkflowDetailsResponse(**data) | ||
|
||
def get_workflow_logs(self, workflow_id: str) -> JobLogsResponse | None: | ||
"""Returns information on the experiment for the specified ID.""" | ||
response = self.__client.get_response(f"{self.WORKFLOWS_ROUTE}/{workflow_id}/logs") | ||
|
||
data = response.json() | ||
return JobLogsResponse(**data) | ||
|
||
def delete_workflow(self, workflow_id: str) -> None: | ||
"""Deletes the experiment for the specified ID.""" | ||
self.__client.get_response(f"{self.WORKFLOWS_ROUTE}/{workflow_id}", HTTPMethod.DELETE) | ||
return None |
Oops, something went wrong.