88 ProjectOutputGet ,
99)
1010from models_library .basic_types import KeyIDStr
11- from models_library .projects_nodes import Node
11+ from models_library .projects_nodes import PartialNode
1212from models_library .projects_nodes_io import NodeID
13- from models_library .utils .fastapi_encoders import jsonable_encoder
1413from models_library .utils .services_io import JsonSchemaDict
1514from pydantic import BaseModel , Field , TypeAdapter
1615from servicelib .aiohttp .requests_validation import (
2524from ...security .decorators import permission_required
2625from ...utils_aiohttp import envelope_json_response
2726from .. 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
2928from ._rest_exceptions import handle_plugin_requests_exceptions
3029from ._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
7978async 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 }
0 commit comments