Skip to content

Commit 30b2b7f

Browse files
committed
using insert_and_get_row
1 parent d52d3e7 commit 30b2b7f

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

packages/pytest-simcore/src/pytest_simcore/simcore_storage_data_models.py

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# pylint: disable=unused-argument
33
# pylint: disable=unused-variable
44

5+
import contextlib
56
from collections.abc import AsyncIterator, Awaitable, Callable
67
from contextlib import asynccontextmanager
78
from typing import Any
@@ -20,6 +21,7 @@
2021
from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine
2122

2223
from .helpers.faker_factories import DEFAULT_FAKER, random_project
24+
from .helpers.postgres_tools import insert_and_get_row_lifespan
2325
from .helpers.postgres_users import insert_and_get_user_and_secrets_lifespan
2426

2527

@@ -215,28 +217,38 @@ async def _() -> None:
215217
@pytest.fixture
216218
async def create_project_node(
217219
user_id: UserID, sqlalchemy_async_engine: AsyncEngine, faker: Faker
218-
) -> Callable[..., Awaitable[tuple[NodeID, dict[str, Any]]]]:
219-
async def _creator(
220-
project_id: ProjectID, node_id: NodeID | None = None, **kwargs
221-
) -> tuple[NodeID, dict[str, Any]]:
222-
async with sqlalchemy_async_engine.begin() as conn:
220+
) -> AsyncIterator[Callable[..., Awaitable[tuple[NodeID, dict[str, Any]]]]]:
221+
created_node_entries: list[tuple[NodeID, ProjectID]] = []
222+
223+
async with contextlib.AsyncExitStack() as stack:
224+
225+
async def _creator(
226+
project_id: ProjectID, node_id: NodeID | None = None, **kwargs
227+
) -> tuple[NodeID, dict[str, Any]]:
223228
new_node_id = node_id or NodeID(faker.uuid4())
224229
node_values = {
230+
"node_id": f"{new_node_id}",
231+
"project_uuid": f"{project_id}",
225232
"key": "simcore/services/frontend/file-picker",
226233
"version": "1.0.0",
227234
"label": "pytest_fake_node",
235+
**kwargs,
228236
}
229-
node_values.update(**kwargs)
230-
result = await conn.execute(
231-
projects_nodes.insert()
232-
.values(
233-
node_id=f"{new_node_id}",
234-
project_uuid=f"{project_id}",
235-
**node_values,
237+
238+
node_row = await stack.enter_async_context(
239+
insert_and_get_row_lifespan(
240+
sqlalchemy_async_engine,
241+
table=projects_nodes,
242+
values=node_values,
243+
pk_col=projects_nodes.c.node_id,
244+
pk_value=f"{new_node_id}",
236245
)
237-
.returning(sa.literal_column("*"))
238246
)
239-
row = result.one()
240-
return new_node_id, row._asdict()
241247

242-
return _creator
248+
created_node_entries.append((new_node_id, project_id))
249+
return new_node_id, node_row
250+
251+
yield _creator
252+
253+
# Cleanup is handled automatically by insert_and_get_row_lifespan
254+
print("Deleting ", created_node_entries)

0 commit comments

Comments
 (0)