Skip to content

Commit c621b50

Browse files
committed
šŸ›Fix: update import paths from comp_tasks to computations and changed descriptions
1 parent 7113a91 commit c621b50

File tree

16 files changed

+101
-109
lines changed

16 files changed

+101
-109
lines changed

ā€Žapi/specs/web-server/_computations.pyā€Ž

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from fastapi import APIRouter, status
2-
from models_library.api_schemas_directorv2.comp_tasks import ComputationGet
2+
from models_library.api_schemas_directorv2.computations import ComputationGet
33
from models_library.api_schemas_webserver.computations import ComputationStart
44
from models_library.generics import Envelope
55
from models_library.projects import ProjectID
@@ -19,8 +19,7 @@
1919
"/computations/{project_id}",
2020
response_model=Envelope[ComputationGet],
2121
)
22-
async def get_computation(project_id: ProjectID):
23-
...
22+
async def get_computation(project_id: ProjectID): ...
2423

2524

2625
@router.post(
@@ -39,13 +38,11 @@ async def get_computation(project_id: ProjectID):
3938
status.HTTP_503_SERVICE_UNAVAILABLE: {"description": "Service not available"},
4039
},
4140
)
42-
async def start_computation(project_id: ProjectID, _start: ComputationStart):
43-
...
41+
async def start_computation(project_id: ProjectID, _start: ComputationStart): ...
4442

4543

4644
@router.post(
4745
"/computations/{project_id}:stop",
4846
status_code=status.HTTP_204_NO_CONTENT,
4947
)
50-
async def stop_computation(project_id: ProjectID):
51-
...
48+
async def stop_computation(project_id: ProjectID): ...
Lines changed: 66 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import datetime
2+
from typing import TypeAlias
23
from uuid import UUID
34

45
import arrow
56
from pydantic import BaseModel, ConfigDict, Field, PositiveInt
7+
from pydantic.config import JsonDict
68

79
from .projects_nodes import NodeState
810
from .projects_nodes_io import NodeID
@@ -25,7 +27,7 @@ class PipelineDetails(BaseModel):
2527
)
2628

2729

28-
TaskID = UUID
30+
TaskID: TypeAlias = UUID
2931

3032

3133
class ComputationTask(BaseModel):
@@ -52,71 +54,77 @@ class ComputationTask(BaseModel):
5254
description="task last modification timestamp or None if the there is no task",
5355
)
5456

55-
model_config = ConfigDict(
56-
json_schema_extra={
57-
"examples": [
58-
{
59-
"id": "42838344-03de-4ce2-8d93-589a5dcdfd05",
60-
"state": "PUBLISHED",
61-
"pipeline_details": {
62-
"adjacency_list": {
63-
"2fb4808a-e403-4a46-b52c-892560d27862": [],
64-
"19a40c7b-0a40-458a-92df-c77a5df7c886": [
65-
"2fb4808a-e403-4a46-b52c-892560d27862"
66-
],
67-
},
68-
"node_states": {
69-
"2fb4808a-e403-4a46-b52c-892560d27862": {
70-
"modified": True,
71-
"dependencies": [],
72-
"progress": 0.0,
73-
},
74-
"19a40c7b-0a40-458a-92df-c77a5df7c886": {
75-
"modified": False,
76-
"dependencies": [
57+
@staticmethod
58+
def _update_json_schema_extra(schema: JsonDict) -> None:
59+
schema.update(
60+
{
61+
"examples": [
62+
{
63+
"id": "42838344-03de-4ce2-8d93-589a5dcdfd05",
64+
"state": "PUBLISHED",
65+
"pipeline_details": {
66+
"adjacency_list": {
67+
"2fb4808a-e403-4a46-b52c-892560d27862": [],
68+
"19a40c7b-0a40-458a-92df-c77a5df7c886": [
7769
"2fb4808a-e403-4a46-b52c-892560d27862"
7870
],
79-
"progress": 0.0,
8071
},
72+
"node_states": {
73+
"2fb4808a-e403-4a46-b52c-892560d27862": {
74+
"modified": True,
75+
"dependencies": [],
76+
"progress": 0.0,
77+
},
78+
"19a40c7b-0a40-458a-92df-c77a5df7c886": {
79+
"modified": False,
80+
"dependencies": [
81+
"2fb4808a-e403-4a46-b52c-892560d27862"
82+
],
83+
"progress": 0.0,
84+
},
85+
},
86+
"progress": 0.0,
8187
},
82-
"progress": 0.0,
88+
"iteration": None,
89+
"started": arrow.utcnow().shift(minutes=-50).datetime, # type: ignore[dict-item]
90+
"stopped": None,
91+
"submitted": arrow.utcnow().shift(hours=-1).datetime, # type: ignore[dict-item]
8392
},
84-
"iteration": None,
85-
"started": arrow.utcnow().shift(minutes=-50).datetime, # type: ignore[dict-item]
86-
"stopped": None,
87-
"submitted": arrow.utcnow().shift(hours=-1).datetime, # type: ignore[dict-item]
88-
},
89-
{
90-
"id": "f81d7994-9ccc-4c95-8c32-aa70d6bbb1b0",
91-
"state": "SUCCESS",
92-
"pipeline_details": {
93-
"adjacency_list": {
94-
"2fb4808a-e403-4a46-b52c-892560d27862": [],
95-
"19a40c7b-0a40-458a-92df-c77a5df7c886": [
96-
"2fb4808a-e403-4a46-b52c-892560d27862"
97-
],
98-
},
99-
"node_states": {
100-
"2fb4808a-e403-4a46-b52c-892560d27862": {
101-
"modified": False,
102-
"dependencies": [],
103-
"progress": 1.0,
104-
},
105-
"19a40c7b-0a40-458a-92df-c77a5df7c886": {
106-
"modified": False,
107-
"dependencies": [
93+
{
94+
"id": "f81d7994-9ccc-4c95-8c32-aa70d6bbb1b0",
95+
"state": "SUCCESS",
96+
"pipeline_details": {
97+
"adjacency_list": {
98+
"2fb4808a-e403-4a46-b52c-892560d27862": [],
99+
"19a40c7b-0a40-458a-92df-c77a5df7c886": [
108100
"2fb4808a-e403-4a46-b52c-892560d27862"
109101
],
110-
"progress": 1.0,
111102
},
103+
"node_states": {
104+
"2fb4808a-e403-4a46-b52c-892560d27862": {
105+
"modified": False,
106+
"dependencies": [],
107+
"progress": 1.0,
108+
},
109+
"19a40c7b-0a40-458a-92df-c77a5df7c886": {
110+
"modified": False,
111+
"dependencies": [
112+
"2fb4808a-e403-4a46-b52c-892560d27862"
113+
],
114+
"progress": 1.0,
115+
},
116+
},
117+
"progress": 1.0,
112118
},
113-
"progress": 1.0,
119+
"iteration": 2,
120+
"started": arrow.utcnow().shift(minutes=-50).datetime, # type: ignore[dict-item]
121+
"stopped": arrow.utcnow().shift(minutes=-20).datetime, # type: ignore[dict-item]
122+
"submitted": arrow.utcnow().shift(hours=-1).datetime, # type: ignore[dict-item]
114123
},
115-
"iteration": 2,
116-
"started": arrow.utcnow().shift(minutes=-50).datetime, # type: ignore[dict-item]
117-
"stopped": arrow.utcnow().shift(minutes=-20).datetime, # type: ignore[dict-item]
118-
"submitted": arrow.utcnow().shift(hours=-1).datetime, # type: ignore[dict-item]
119-
},
120-
]
121-
}
124+
]
125+
}
126+
)
127+
128+
model_config = ConfigDict(
129+
json_schema_extra=_update_json_schema_extra,
122130
)

ā€Žpackages/pytest-simcore/src/pytest_simcore/services_api_mocks_for_aiohttp_clients.pyā€Ž

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from aioresponses import aioresponses as AioResponsesMock
1212
from aioresponses.core import CallbackResult
1313
from faker import Faker
14-
from models_library.api_schemas_directorv2.comp_tasks import ComputationGet
14+
from models_library.api_schemas_directorv2.computations import ComputationGet
1515
from models_library.api_schemas_storage.storage_schemas import (
1616
FileMetaDataGet,
1717
FileUploadCompleteFutureResponse,
@@ -108,9 +108,7 @@ def create_computation_cb(url, **kwargs) -> CallbackResult:
108108

109109
json_schema = ComputationTask.model_json_schema()
110110
assert isinstance(json_schema["examples"], list)
111-
assert isinstance(
112-
json_schema["examples"][0], dict
113-
)
111+
assert isinstance(json_schema["examples"][0], dict)
114112
computation: dict[str, Any] = json_schema["examples"][0].copy()
115113
computation.update(
116114
{
@@ -123,9 +121,7 @@ def create_computation_cb(url, **kwargs) -> CallbackResult:
123121
},
124122
}
125123
)
126-
returned_computation = ComputationTask.model_validate(
127-
computation
128-
)
124+
returned_computation = ComputationTask.model_validate(computation)
129125

130126
return CallbackResult(
131127
status=201,
@@ -140,16 +136,10 @@ def get_computation_cb(url, **kwargs) -> CallbackResult:
140136
node_states = FULL_PROJECT_NODE_STATES
141137

142138
json_schema = ComputationGet.model_json_schema()
143-
assert isinstance(
144-
json_schema["examples"], list
145-
)
146-
assert isinstance(
147-
json_schema["examples"][0], dict
148-
)
139+
assert isinstance(json_schema["examples"], list)
140+
assert isinstance(json_schema["examples"][0], dict)
149141

150-
computation: dict[str, Any] = json_schema[
151-
"examples"
152-
][0].copy()
142+
computation: dict[str, Any] = json_schema["examples"][0].copy()
153143
computation.update(
154144
{
155145
"id": Path(url.path).name,
@@ -283,10 +273,8 @@ async def storage_v0_service_mock(
283273
r"^http://[a-z\-_]*storage:[0-9]+/v0/locations/[0-9]+/files/.+/metadata.+$"
284274
)
285275

286-
get_upload_link_pattern = (
287-
get_download_link_pattern
288-
) = delete_file_pattern = re.compile(
289-
r"^http://[a-z\-_]*storage:[0-9]+/v0/locations/[0-9]+/files.+$"
276+
get_upload_link_pattern = get_download_link_pattern = delete_file_pattern = (
277+
re.compile(r"^http://[a-z\-_]*storage:[0-9]+/v0/locations/[0-9]+/files.+$")
290278
)
291279

292280
get_locations_link_pattern = re.compile(

ā€Žservices/director-v2/src/simcore_service_director_v2/api/routes/computations.pyā€Ž

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import networkx as nx
2323
from fastapi import APIRouter, Depends, FastAPI, HTTPException
24-
from models_library.api_schemas_directorv2.comp_tasks import (
24+
from models_library.api_schemas_directorv2.computations import (
2525
ComputationCreate,
2626
ComputationDelete,
2727
ComputationGet,
@@ -245,7 +245,7 @@ async def _try_start_pipeline(
245245

246246
@router.post(
247247
"",
248-
summary="Create and optionally start a new computation",
248+
description="Create and optionally starts it",
249249
response_model=ComputationGet,
250250
status_code=status.HTTP_201_CREATED,
251251
responses={
@@ -417,7 +417,7 @@ async def create_computation( # noqa: PLR0913 # pylint: disable=too-many-positi
417417

418418
@router.get(
419419
"/{project_id}",
420-
summary="Returns a computation pipeline state",
420+
description="Returns a computation pipeline state",
421421
response_model=ComputationGet,
422422
status_code=status.HTTP_200_OK,
423423
)
@@ -496,7 +496,7 @@ async def get_computation(
496496

497497
@router.post(
498498
"/{project_id}:stop",
499-
summary="Stops a computation pipeline",
499+
description="Stops a computation pipeline",
500500
response_model=ComputationGet,
501501
status_code=status.HTTP_202_ACCEPTED,
502502
)
@@ -575,7 +575,7 @@ async def stop_computation(
575575

576576
@router.delete(
577577
"/{project_id}",
578-
summary="Deletes a computation pipeline",
578+
description="Deletes a computation pipeline",
579579
response_model=None,
580580
status_code=status.HTTP_204_NO_CONTENT,
581581
)
@@ -632,9 +632,9 @@ def return_last_value(retry_state: Any) -> Any:
632632
before_sleep=before_sleep_log(_logger, logging.INFO),
633633
)
634634
async def check_pipeline_stopped() -> bool:
635-
comp_tasks: list[
636-
CompTaskAtDB
637-
] = await comp_tasks_repo.list_computational_tasks(project_id)
635+
comp_tasks: list[CompTaskAtDB] = (
636+
await comp_tasks_repo.list_computational_tasks(project_id)
637+
)
638638
pipeline_state = utils.get_pipeline_state_from_task_states(
639639
comp_tasks,
640640
)

ā€Žservices/director-v2/src/simcore_service_director_v2/api/routes/computations_tasks.pyā€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
""" CRUD operations on a computation's tasks sub-resource
1+
"""CRUD operations on a computation's tasks sub-resource
22
33
A task is computation sub-resource that respresents a running computational service in the pipeline described above
44
Therefore,
@@ -11,7 +11,7 @@
1111

1212
import networkx as nx
1313
from fastapi import APIRouter, Depends, HTTPException
14-
from models_library.api_schemas_directorv2.comp_tasks import (
14+
from models_library.api_schemas_directorv2.computations import (
1515
TaskLogFileGet,
1616
TasksOutputs,
1717
TasksSelection,

ā€Žservices/director-v2/tests/helpers/shared_comp_utils.pyā€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from uuid import UUID
44

55
import httpx
6-
from models_library.api_schemas_directorv2.comp_tasks import ComputationGet
6+
from models_library.api_schemas_directorv2.computations import ComputationGet
77
from models_library.projects import ProjectAtDB
88
from models_library.projects_pipeline import PipelineDetails
99
from models_library.projects_state import RunningState

ā€Žservices/director-v2/tests/integration/01/test_computation_api.pyā€Ž

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
assert_and_wait_for_pipeline_status,
2121
assert_computation_task_out_obj,
2222
)
23-
from models_library.api_schemas_directorv2.comp_tasks import ComputationGet
23+
from models_library.api_schemas_directorv2.computations import ComputationGet
2424
from models_library.clusters import ClusterAuthentication
2525
from models_library.projects import ProjectAtDB
2626
from models_library.projects_nodes import NodeState
@@ -91,8 +91,7 @@ def minimal_configuration(
9191
redis_service: RedisSettings,
9292
simcore_services_ready: None,
9393
storage_service: URL,
94-
) -> None:
95-
...
94+
) -> None: ...
9695

9796

9897
@pytest.fixture(scope="session")

ā€Žservices/director-v2/tests/integration/02/test_dynamic_sidecar_nodeports_integration.pyā€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
assert_and_wait_for_pipeline_status,
2929
assert_computation_task_out_obj,
3030
)
31-
from models_library.api_schemas_directorv2.comp_tasks import ComputationGet
31+
from models_library.api_schemas_directorv2.computations import ComputationGet
3232
from models_library.clusters import ClusterAuthentication
3333
from models_library.projects import (
3434
Node,

ā€Žservices/director-v2/tests/integration/conftest.pyā€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import httpx
1010
import pytest
1111
import sqlalchemy as sa
12-
from models_library.api_schemas_directorv2.comp_tasks import ComputationGet
12+
from models_library.api_schemas_directorv2.computations import ComputationGet
1313
from models_library.projects import ProjectAtDB
1414
from models_library.users import UserID
1515
from pytest_mock import MockerFixture
@@ -130,7 +130,7 @@ def mock_projects_repository(mocker: MockerFixture) -> None:
130130

131131
@pytest.fixture
132132
async def wait_for_catalog_service(
133-
services_endpoint: dict[str, URL]
133+
services_endpoint: dict[str, URL],
134134
) -> Callable[[UserID, str], Awaitable[None]]:
135135
async def _waiter(user_id: UserID, product_name: str) -> None:
136136
catalog_endpoint = list(

0 commit comments

Comments
Ā (0)