|
8 | 8 | from common_library.exclude import Unset, is_set |
9 | 9 | from models_library.basic_types import IDStr |
10 | 10 | from models_library.groups import GroupID |
| 11 | +from models_library.products import ProductName |
11 | 12 | from models_library.projects import ProjectID |
12 | 13 | from models_library.rest_ordering import OrderBy, OrderDirection |
13 | 14 | from models_library.rest_pagination import MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE |
14 | 15 | from models_library.workspaces import WorkspaceID |
15 | | -from pydantic import NonNegativeInt, PositiveInt |
| 16 | +from pydantic import NonNegativeInt, PositiveInt, TypeAdapter |
16 | 17 | from simcore_postgres_database.models.projects import projects |
| 18 | +from simcore_postgres_database.models.projects_to_products import projects_to_products |
17 | 19 | from simcore_postgres_database.models.users import users |
18 | 20 | from simcore_postgres_database.utils_projects_nodes import make_workbench_subquery |
19 | 21 | from simcore_postgres_database.utils_repos import ( |
@@ -108,14 +110,32 @@ async def get_project( |
108 | 110 | project_uuid: ProjectID, |
109 | 111 | ) -> ProjectDBGet: |
110 | 112 | 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 | + ) |
113 | 116 | row = result.one_or_none() |
114 | 117 | if row is None: |
115 | 118 | raise ProjectNotFoundError(project_uuid=project_uuid) |
116 | 119 | return ProjectDBGet.model_validate(row) |
117 | 120 |
|
118 | 121 |
|
| 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 | + |
119 | 139 | async def get_project_with_workbench( |
120 | 140 | app: web.Application, |
121 | 141 | connection: AsyncConnection | None = None, |
|
0 commit comments