Skip to content

Commit e93491f

Browse files
add get
1 parent 733055a commit e93491f

File tree

1 file changed

+44
-1
lines changed

1 file changed

+44
-1
lines changed

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

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,60 @@
11
import logging
22

3+
import sqlalchemy as sa
4+
35
from aiohttp import web
46
from models_library.projects import ProjectID
5-
from models_library.projects_nodes import PartialNode
7+
from models_library.projects_nodes import Node, PartialNode
68
from models_library.projects_nodes_io import NodeID
79
from simcore_postgres_database.utils_repos import transaction_context
810
from simcore_postgres_database.webserver_models import projects_nodes
911
from sqlalchemy.ext.asyncio import AsyncConnection
1012

13+
from .exceptions import NodeNotFoundError
1114
from ..db.plugin import get_asyncpg_engine
1215

1316
_logger = logging.getLogger(__name__)
1417

1518

19+
_SELECTION_PROJECTS_NODES_DB_ARGS = [
20+
projects_nodes.c.id,
21+
projects_nodes.c.key,
22+
projects_nodes.c.version,
23+
projects_nodes.c.label,
24+
projects_nodes.c.thumbnail,
25+
projects_nodes.c.inputs,
26+
projects_nodes.c.outputs,
27+
]
28+
29+
30+
async def get(
31+
app: web.Application,
32+
connection: AsyncConnection | None = None,
33+
*,
34+
project_id: ProjectID,
35+
node_id: NodeID,
36+
) -> Node:
37+
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
38+
get_stmt = sa.select(
39+
*_SELECTION_PROJECTS_NODES_DB_ARGS
40+
).where(
41+
(projects_nodes.c.project_uuid == f"{project_id}")
42+
& (projects_nodes.c.node_id == f"{node_id}")
43+
)
44+
45+
result = await conn.stream(get_stmt)
46+
assert result # nosec
47+
48+
row = await result.first()
49+
if row is None:
50+
raise NodeNotFoundError(
51+
project_uuid=f"{project_id}",
52+
node_uuid=f"{node_id}"
53+
)
54+
assert row # nosec
55+
return Node.model_validate(row, from_attributes=True)
56+
57+
1658
async def update(
1759
app: web.Application,
1860
connection: AsyncConnection | None = None,
@@ -22,6 +64,7 @@ async def update(
2264
partial_node: PartialNode,
2365
) -> None:
2466
values = partial_node.model_dump(mode="json", exclude_unset=True)
67+
2568
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
2669
await conn.stream(
2770
projects_nodes.update()

0 commit comments

Comments
 (0)