Skip to content

Commit 4761474

Browse files
add workbench subquery
1 parent 29f80b2 commit 4761474

File tree

1 file changed

+41
-1
lines changed
  • services/web/server/src/simcore_service_webserver/projects

1 file changed

+41
-1
lines changed

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

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from models_library.utils.change_case import camel_to_snake, snake_to_camel
1717
from pydantic import ValidationError
1818
from simcore_postgres_database.models.project_to_groups import project_to_groups
19+
from simcore_postgres_database.models.projects_nodes import projects_nodes
1920
from simcore_postgres_database.models.projects_to_products import projects_to_products
2021
from simcore_postgres_database.webserver_models import ProjectType, projects
2122
from sqlalchemy.dialects.postgresql import insert as pg_insert
@@ -51,6 +52,45 @@ class ProjectAccessRights(Enum):
5152
VIEWER = {"read": True, "write": False, "delete": False}
5253

5354

55+
def _build_workbench_subquery():
56+
return (
57+
sa.select(
58+
projects_nodes.c.project_uuid,
59+
sa.func.jsonb_object_agg(
60+
projects_nodes.c.node_id,
61+
sa.func.jsonb_build_object(
62+
"key",
63+
projects_nodes.c.key,
64+
"version",
65+
projects_nodes.c.version,
66+
"label",
67+
projects_nodes.c.label,
68+
"input_access",
69+
projects_nodes.c.input_access,
70+
"input_nodes",
71+
projects_nodes.c.input_nodes,
72+
"inputs",
73+
projects_nodes.c.inputs,
74+
"inputs_required",
75+
projects_nodes.c.inputs_required,
76+
"output_nodes",
77+
projects_nodes.c.output_nodes,
78+
"outputs",
79+
projects_nodes.c.outputs,
80+
"run_hash",
81+
projects_nodes.c.run_hash,
82+
"state",
83+
projects_nodes.c.state,
84+
"parent",
85+
projects_nodes.c.parent,
86+
"boot_options",
87+
projects_nodes.c.boot_options,
88+
),
89+
).label("workbench"),
90+
).group_by(projects_nodes.c.project_uuid)
91+
).subquery("workbench_subquery")
92+
93+
5494
def create_project_access_rights(
5595
gid: int, access: ProjectAccessRights
5696
) -> dict[str, dict[str, bool]]:
@@ -278,7 +318,7 @@ async def _get_project(
278318
query = (
279319
sa.select(
280320
*PROJECT_DB_COLS,
281-
projects.c.workbench,
321+
_build_workbench_subquery().c.workbench,
282322
users.c.primary_gid.label("trashed_by_primary_gid"),
283323
access_rights_subquery.c.access_rights,
284324
)

0 commit comments

Comments
 (0)