Skip to content

Commit 5e14001

Browse files
fix document creation
1 parent 725be27 commit 5e14001

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

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

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@
88
ProjectOutputGet,
99
)
1010
from models_library.basic_types import KeyIDStr
11-
from models_library.projects_nodes import Node
11+
from models_library.projects_nodes import PartialNode
1212
from models_library.projects_nodes_io import NodeID
13-
from models_library.utils.fastapi_encoders import jsonable_encoder
1413
from models_library.utils.services_io import JsonSchemaDict
1514
from pydantic import BaseModel, Field, TypeAdapter
1615
from servicelib.aiohttp.requests_validation import (
@@ -25,7 +24,7 @@
2524
from ...security.decorators import permission_required
2625
from ...utils_aiohttp import envelope_json_response
2726
from .. import _access_rights_service, _nodes_service, _ports_service
28-
from .._projects_repository_legacy import ProjectDBAPI
27+
from .._projects_service import _create_project_document_and_notify
2928
from ._rest_exceptions import handle_plugin_requests_exceptions
3029
from ._rest_schemas import AuthenticatedRequestContext, ProjectPathParams
3130

@@ -77,7 +76,6 @@ async def get_project_inputs(request: web.Request) -> web.Response:
7776
@permission_required("project.update")
7877
@handle_plugin_requests_exceptions
7978
async def update_project_inputs(request: web.Request) -> web.Response:
80-
db: ProjectDBAPI = ProjectDBAPI.get_from_app_context(request.app)
8179
req_ctx = AuthenticatedRequestContext.model_validate(request)
8280
path_params = parse_request_path_parameters_as(ProjectPathParams, request)
8381
inputs_updates = await parse_request_body_as(list[ProjectInputUpdate], request)
@@ -92,10 +90,12 @@ async def update_project_inputs(request: web.Request) -> web.Response:
9290
project_id=path_params.project_id,
9391
permission="write", # because we are updating inputs later
9492
)
95-
workbench = await _nodes_service.get_project_nodes_map(
93+
current_workbench = await _nodes_service.get_project_nodes_map(
9694
app=request.app, project_id=path_params.project_id
9795
)
98-
current_inputs: dict[NodeID, Any] = _ports_service.get_project_inputs(workbench)
96+
current_inputs: dict[NodeID, Any] = _ports_service.get_project_inputs(
97+
current_workbench
98+
)
9999

100100
# build workbench patch
101101
partial_workbench_data = {}
@@ -104,30 +104,34 @@ async def update_project_inputs(request: web.Request) -> web.Response:
104104
if node_id not in current_inputs:
105105
raise web.HTTPBadRequest(text=f"Invalid input key [{node_id}]")
106106

107-
workbench[node_id].outputs = {KeyIDStr("out_1"): input_update.value}
108-
partial_workbench_data[node_id] = workbench[node_id].model_dump(
107+
current_workbench[node_id].outputs = {KeyIDStr("out_1"): input_update.value}
108+
partial_workbench_data[node_id] = current_workbench[node_id].model_dump(
109109
include={"outputs"}, exclude_unset=True
110110
)
111111

112-
# patch workbench
113-
assert db # nosec
114-
updated_project, _ = await db.update_project_multiple_node_data(
112+
partial_nodes_map = TypeAdapter(dict[NodeID, PartialNode]).validate_python(
113+
partial_workbench_data
114+
)
115+
116+
updated_workbench = await _nodes_service.update_project_nodes_map(
117+
request.app,
118+
project_id=path_params.project_id,
119+
partial_nodes_map=partial_nodes_map,
120+
)
121+
122+
await _create_project_document_and_notify(
123+
request.app,
124+
project_id=path_params.project_id,
115125
user_id=req_ctx.user_id,
116-
project_uuid=path_params.project_id,
117-
product_name=req_ctx.product_name,
118-
partial_workbench_data=jsonable_encoder(partial_workbench_data),
119126
client_session_id=header_params.client_session_id,
120127
)
121128

122-
workbench = TypeAdapter(dict[NodeID, Node]).validate_python(
123-
updated_project["workbench"]
124-
)
125-
inputs: dict[NodeID, Any] = _ports_service.get_project_inputs(workbench)
129+
inputs: dict[NodeID, Any] = _ports_service.get_project_inputs(updated_workbench)
126130

127131
return envelope_json_response(
128132
{
129133
node_id: ProjectInputGet(
130-
key=node_id, label=workbench[node_id].label, value=value
134+
key=node_id, label=updated_workbench[node_id].label, value=value
131135
)
132136
for node_id, value in inputs.items()
133137
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1292,7 +1292,7 @@ async def patch_project_node(
12921292
return
12931293

12941294
await notify_project_node_update(
1295-
app, updated_project.model_dump(), node_id, errors=None
1295+
app, updated_project.model_dump(mode="json"), node_id, errors=None
12961296
)
12971297

12981298

0 commit comments

Comments
 (0)