Skip to content

Commit 725be27

Browse files
update nodes
1 parent 9a7c654 commit 725be27

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

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

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1+
from typing import Any
2+
13
from aiohttp import web
24
from models_library.projects import ProjectID
3-
from models_library.projects_nodes import Node
5+
from models_library.projects_nodes import Node, PartialNode
46
from models_library.projects_nodes_io import NodeID
57
from models_library.services_types import ServiceKey, ServiceVersion
68
from pydantic import TypeAdapter
79
from simcore_postgres_database.utils_projects_nodes import ProjectNodesRepo
8-
from simcore_postgres_database.utils_repos import pass_or_acquire_connection
10+
from simcore_postgres_database.utils_repos import (
11+
pass_or_acquire_connection,
12+
transaction_context,
13+
)
914
from simcore_service_webserver.db.plugin import get_asyncpg_engine
1015

1116

@@ -35,3 +40,24 @@ async def get_project_nodes_map(
3540
for project_node in project_nodes
3641
}
3742
return TypeAdapter(dict[NodeID, Node]).validate_python(workbench)
43+
44+
45+
async def update_project_nodes_map(
46+
app: web.Application,
47+
*,
48+
project_id: ProjectID,
49+
partial_nodes_map: dict[NodeID, PartialNode],
50+
) -> dict[NodeID, Node]:
51+
repo = ProjectNodesRepo(project_uuid=project_id)
52+
53+
workbench: dict[NodeID, dict[str, Any]] = {}
54+
async with transaction_context(get_asyncpg_engine(app)) as conn:
55+
for node_id, node in partial_nodes_map.items():
56+
project_node = await repo.update(
57+
conn,
58+
node_id=node_id,
59+
node=node,
60+
)
61+
workbench[node_id] = project_node.model_dump_as_node()
62+
63+
return TypeAdapter(dict[NodeID, Node]).validate_python(workbench)

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from models_library.api_schemas_storage.storage_schemas import FileMetaDataGet
1111
from models_library.basic_types import KeyIDStr
1212
from models_library.projects import ProjectID
13-
from models_library.projects_nodes import Node
13+
from models_library.projects_nodes import Node, PartialNode
1414
from models_library.projects_nodes_io import NodeID, SimCoreFileLink
1515
from models_library.services_types import ServiceKey, ServiceVersion
1616
from models_library.users import UserID
@@ -90,6 +90,17 @@ async def get_project_nodes_map(
9090
return await _nodes_repository.get_project_nodes_map(app, project_id=project_id)
9191

9292

93+
async def update_project_nodes_map(
94+
app: web.Application,
95+
*,
96+
project_id: ProjectID,
97+
partial_nodes_map: dict[NodeID, PartialNode],
98+
) -> dict[NodeID, Node]:
99+
return await _nodes_repository.update_project_nodes_map(
100+
app, project_id=project_id, partial_nodes_map=partial_nodes_map
101+
)
102+
103+
93104
#
94105
# PREVIEWS
95106
#

0 commit comments

Comments
 (0)