Skip to content

Commit b2a5b91

Browse files
committed
✨ [Projects] Enhance project job models and RPCs to include workbench structure
1 parent 1295cff commit b2a5b91

File tree

5 files changed

+49
-8
lines changed

5 files changed

+49
-8
lines changed

services/web/server/src/simcore_service_webserver/projects/_controller/projects_rpc.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
from models_library.products import ProductName
44
from models_library.projects import ProjectID
55
from models_library.rest_pagination import PageLimitInt, PageOffsetInt
6-
from models_library.rpc.webserver.projects import PageRpcProjectRpcGet, ProjectRpcGet
6+
from models_library.rpc.webserver.projects import (
7+
PageRpcProjectJobRpcGet,
8+
ProjectJobRpcGet,
9+
)
710
from models_library.users import UserID
811
from pydantic import ValidationError, validate_call
912
from servicelib.rabbitmq import RPCRouter
@@ -64,7 +67,7 @@ async def list_projects_marked_as_jobs(
6467
limit: PageLimitInt,
6568
# filters
6669
job_parent_resource_name_filter: str | None,
67-
) -> PageRpcProjectRpcGet:
70+
) -> PageRpcProjectJobRpcGet:
6871

6972
total, projects = await _jobs_service.list_my_projects_marked_as_jobs(
7073
app,
@@ -76,17 +79,19 @@ async def list_projects_marked_as_jobs(
7679
)
7780

7881
job_projects = [
79-
ProjectRpcGet(
82+
ProjectJobRpcGet(
8083
uuid=project.uuid,
8184
name=project.name,
8285
description=project.description,
86+
workbench={}, # FIXME: this should be extracted
8387
creation_date=project.creation_date,
8488
last_change_date=project.last_change_date,
89+
job_parent_resource_name=project.job_parent_resource_name,
8590
)
8691
for project in projects
8792
]
8893

89-
page: PageRpcProjectRpcGet = PageRpcProjectRpcGet.create(
94+
page: PageRpcProjectJobRpcGet = PageRpcProjectJobRpcGet.create(
9095
job_projects,
9196
total=total,
9297
limit=limit,

services/web/server/src/simcore_service_webserver/projects/_jobs_repository.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ async def list_projects_marked_as_jobs(
113113
list_query = (
114114
sa.select(
115115
*_PROJECT_DB_COLS,
116+
projects.c.workbench,
116117
base_query.c.job_parent_resource_name,
117118
)
118119
.select_from(

services/web/server/src/simcore_service_webserver/projects/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from models_library.api_schemas_webserver.projects_ui import StudyUI
99
from models_library.folders import FolderID
1010
from models_library.groups import GroupID
11-
from models_library.projects import ClassifierID, ProjectID
11+
from models_library.projects import ClassifierID, NodesDict, ProjectID
1212
from models_library.users import UserID
1313
from models_library.utils.common_validators import (
1414
empty_str_to_none_pre_validator,
@@ -72,6 +72,8 @@ class ProjectDBGet(BaseModel):
7272

7373

7474
class ProjectJobDBGet(ProjectDBGet):
75+
workbench: NodesDict
76+
7577
job_parent_resource_name: str
7678

7779

services/web/server/tests/unit/with_dbs/02/test_projects__jobs_service.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ async def test_user_can_see_marked_project(
8181
client: TestClient,
8282
osparc_product_name: ProductName,
8383
project_job_fixture: ProjectJobFixture,
84+
user_project: ProjectDict,
8485
):
8586
assert client.app
8687
total_count, result = await list_my_projects_marked_as_jobs(
@@ -97,6 +98,34 @@ async def test_user_can_see_marked_project(
9798
project.job_parent_resource_name == project_job_fixture.job_parent_resource_name
9899
)
99100

101+
# Verify workbench structure is maintained
102+
assert project.workbench is not None
103+
assert isinstance(project.workbench, dict)
104+
105+
# Compare with original user_project
106+
assert len(project.workbench) == len(user_project["workbench"])
107+
108+
# Check that all node IDs from original project are present
109+
for node_id in user_project["workbench"]:
110+
assert node_id in project.workbench
111+
112+
# Check some properties of the nodes
113+
original_node = user_project["workbench"][node_id]
114+
project_node = project.workbench[node_id]
115+
116+
assert project_node.key == original_node["key"]
117+
assert project_node.version == original_node["version"]
118+
assert project_node.label == original_node["label"]
119+
120+
# Check inputs/outputs if they exist
121+
if "inputs" in original_node:
122+
assert project_node.inputs is not None
123+
assert len(project_node.inputs) == len(original_node["inputs"])
124+
125+
if "outputs" in original_node:
126+
assert project_node.outputs is not None
127+
assert len(project_node.outputs) == len(original_node["outputs"])
128+
100129

101130
async def test_other_user_cannot_see_marked_project(
102131
client: TestClient,

services/web/server/tests/unit/with_dbs/02/test_projects_rpc.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
from common_library.users_enums import UserRole
1313
from models_library.products import ProductName
1414
from models_library.projects import ProjectID
15-
from models_library.rpc.webserver.projects import PageRpcProjectRpcGet, ProjectRpcGet
15+
from models_library.rpc.webserver.projects import (
16+
PageRpcProjectJobRpcGet,
17+
ProjectJobRpcGet,
18+
)
1619
from pydantic import ValidationError
1720
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict
1821
from pytest_simcore.helpers.typing_env import EnvVarsDict
@@ -107,7 +110,7 @@ async def test_rpc_client_list_my_projects_marked_as_jobs(
107110
)
108111

109112
# List projects marked as jobs
110-
page: PageRpcProjectRpcGet = await projects_rpc.list_projects_marked_as_jobs(
113+
page: PageRpcProjectJobRpcGet = await projects_rpc.list_projects_marked_as_jobs(
111114
rpc_client=rpc_client,
112115
product_name=product_name,
113116
user_id=user_id,
@@ -116,8 +119,9 @@ async def test_rpc_client_list_my_projects_marked_as_jobs(
116119

117120
assert page.meta.total == 1
118121
assert page.meta.offset == 0
119-
assert isinstance(page.data[0], ProjectRpcGet)
122+
assert isinstance(page.data[0], ProjectJobRpcGet)
120123
assert page.data[0].uuid == project_uuid
124+
assert len(page.data[0].workbench) == len(user_project["workbench"])
121125

122126

123127
@pytest.fixture

0 commit comments

Comments
 (0)