Skip to content

Commit 6a51b9a

Browse files
fix: more efficient get product
1 parent ee01c01 commit 6a51b9a

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

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

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
from common_library.exclude import Unset, is_set
99
from models_library.basic_types import IDStr
1010
from models_library.groups import GroupID
11+
from models_library.products import ProductName
1112
from models_library.projects import ProjectID
1213
from models_library.rest_ordering import OrderBy, OrderDirection
1314
from models_library.rest_pagination import MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE
1415
from models_library.workspaces import WorkspaceID
15-
from pydantic import NonNegativeInt, PositiveInt
16+
from pydantic import NonNegativeInt, PositiveInt, TypeAdapter
1617
from simcore_postgres_database.models.projects import projects
18+
from simcore_postgres_database.models.projects_to_products import projects_to_products
1719
from simcore_postgres_database.models.users import users
1820
from simcore_postgres_database.utils_projects_nodes import make_workbench_subquery
1921
from simcore_postgres_database.utils_repos import (
@@ -108,14 +110,32 @@ async def get_project(
108110
project_uuid: ProjectID,
109111
) -> ProjectDBGet:
110112
async with pass_or_acquire_connection(get_asyncpg_engine(app), connection) as conn:
111-
query = sql.select(*PROJECT_DB_COLS).where(projects.c.uuid == f"{project_uuid}")
112-
result = await conn.execute(query)
113+
result = await conn.execute(
114+
sa.select(*PROJECT_DB_COLS).where(projects.c.uuid == f"{project_uuid}")
115+
)
113116
row = result.one_or_none()
114117
if row is None:
115118
raise ProjectNotFoundError(project_uuid=project_uuid)
116119
return ProjectDBGet.model_validate(row)
117120

118121

122+
async def get_project_product(
123+
app,
124+
connection: AsyncConnection | None = None,
125+
*,
126+
project_uuid: ProjectID,
127+
) -> ProductName:
128+
async with pass_or_acquire_connection(get_asyncpg_engine(app), connection) as conn:
129+
result = await conn.scalar(
130+
sa.select(projects_to_products.c.product_name).where(
131+
projects_to_products.c.project_uuid == f"{project_uuid}"
132+
)
133+
)
134+
if result is None:
135+
raise ProjectNotFoundError(project_uuid=project_uuid)
136+
return TypeAdapter(ProductName).validate_python(result)
137+
138+
119139
async def get_project_with_workbench(
120140
app: web.Application,
121141
connection: AsyncConnection | None = None,

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,8 +1161,9 @@ async def update_project_node_state(
11611161
user_id,
11621162
)
11631163

1164-
db_legacy: ProjectDBAPI = app[APP_PROJECT_DBAPI]
1165-
product_name = await db_legacy.get_project_product(project_id)
1164+
product_name = await _projects_repository.get_project_product(
1165+
app, project_uuid=project_id
1166+
)
11661167
await check_user_project_permission(
11671168
app,
11681169
project_id=project_id,
@@ -1319,8 +1320,9 @@ async def update_project_node_outputs(
13191320
)
13201321
new_outputs = new_outputs or {}
13211322

1322-
db_legacy: ProjectDBAPI = app[APP_PROJECT_DBAPI]
1323-
product_name = await db_legacy.get_project_product(project_id)
1323+
product_name = await _projects_repository.get_project_product(
1324+
app, project_uuid=project_id
1325+
)
13241326
await check_user_project_permission(
13251327
app,
13261328
project_id=project_id,

0 commit comments

Comments
 (0)