Skip to content

Commit a797222

Browse files
fix: delete project_node
1 parent d95331f commit a797222

File tree

3 files changed

+49
-18
lines changed

3 files changed

+49
-18
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,22 @@
4343
]
4444

4545

46+
async def delete(
47+
app: web.Application,
48+
connection: AsyncConnection | None = None,
49+
*,
50+
project_id: ProjectID,
51+
node_id: NodeID,
52+
) -> None:
53+
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
54+
await conn.execute(
55+
projects_nodes.delete().where(
56+
(projects_nodes.c.project_uuid == f"{project_id}")
57+
& (projects_nodes.c.node_id == f"{node_id}")
58+
)
59+
)
60+
61+
4662
async def get(
4763
app: web.Application,
4864
connection: AsyncConnection | None = None,

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

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -998,16 +998,14 @@ async def start_project_node(
998998
project_id: ProjectID,
999999
node_id: NodeID,
10001000
):
1001-
project = await get_project_for_user(request.app, f"{project_id}", user_id)
1002-
workbench = project.get("workbench", {})
1003-
if not workbench.get(f"{node_id}"):
1004-
raise NodeNotFoundError(project_uuid=f"{project_id}", node_uuid=f"{node_id}")
1005-
node_details = Node.model_construct(**workbench[f"{node_id}"])
1001+
node = await _projects_nodes_repository.get(
1002+
request.app, project_id=project_id, node_id=node_id
1003+
)
10061004

10071005
await _start_dynamic_service(
10081006
request,
1009-
service_key=node_details.key,
1010-
service_version=node_details.version,
1007+
service_key=node.key,
1008+
service_version=node.version,
10111009
product_name=product_name,
10121010
product_api_base_url=product_api_base_url,
10131011
user_id=user_id,
@@ -1090,12 +1088,12 @@ async def delete_project_node(
10901088
fire_and_forget_tasks_collection=request.app[APP_FIRE_AND_FORGET_TASKS_KEY],
10911089
)
10921090

1093-
# remove the node from the db
1094-
db_legacy: ProjectDBAPI = request.app[APP_PROJECT_DBAPI]
1095-
assert db_legacy # nosec
1096-
await db_legacy.remove_project_node(
1097-
user_id, project_uuid, NodeID(node_uuid), client_session_id=client_session_id
1091+
await _projects_nodes_repository.delete(
1092+
request.app,
1093+
project_id=project_uuid,
1094+
node_id=NodeID(node_uuid),
10981095
)
1096+
10991097
# also ensure the project is updated by director-v2 since services
11001098
product_name = products_web.get_product_name(request)
11011099
await director_v2_service.create_or_update_pipeline(
@@ -1105,6 +1103,24 @@ async def delete_project_node(
11051103
request.app, project_id=project_uuid
11061104
)
11071105

1106+
(
1107+
project_document,
1108+
document_version,
1109+
) = await create_project_document_and_increment_version(request.app, project_uuid)
1110+
1111+
user_primary_gid = await users_service.get_user_primary_group_id(
1112+
request.app, user_id
1113+
)
1114+
1115+
await notify_project_document_updated(
1116+
app=request.app,
1117+
project_id=project_uuid,
1118+
user_primary_gid=user_primary_gid,
1119+
client_session_id=client_session_id,
1120+
version=document_version,
1121+
document=project_document,
1122+
)
1123+
11081124

11091125
async def update_project_linked_product(
11101126
app: web.Application, project_id: ProjectID, product_name: str

services/web/server/tests/unit/with_dbs/02/test_projects_nodes_handler.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
from servicelib.common_headers import UNDEFINED_DEFAULT_SIMCORE_USER_AGENT_VALUE
5050
from settings_library.redis import RedisSettings
5151
from simcore_postgres_database.models.projects import projects as projects_db_model
52+
from simcore_postgres_database.models.projects_nodes import projects_nodes
5253
from simcore_service_webserver.db.models import UserRole
5354
from simcore_service_webserver.projects._controller.nodes_rest import (
5455
_ProjectNodePreview,
@@ -756,13 +757,11 @@ async def test_delete_node(
756757
# ensure the node is gone
757758
with postgres_db.connect() as conn:
758759
result = conn.execute(
759-
sa.select(projects_db_model.c.workbench).where(
760-
projects_db_model.c.uuid == user_project["uuid"]
761-
)
760+
sa.select(sa.literal(1))
761+
.where(projects_nodes.c.node_id == node_id)
762+
.limit(1)
762763
)
763-
assert result
764-
workbench = result.one()[projects_db_model.c.workbench]
765-
assert node_id not in workbench
764+
assert result.scalar() is None
766765

767766

768767
@pytest.mark.parametrize(*standard_role_response(), ids=str)

0 commit comments

Comments
 (0)