Skip to content

Commit 641a5b0

Browse files
fix workbench access
1 parent 34279d1 commit 641a5b0

File tree

3 files changed

+48
-13
lines changed

3 files changed

+48
-13
lines changed

packages/models-library/src/models_library/projects_nodes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class Node(BaseModel):
165165
] = DEFAULT_FACTORY
166166

167167
inputs_required: Annotated[
168-
list[InputID],
168+
list[InputID] | None,
169169
Field(
170170
default_factory=list,
171171
description="Defines inputs that are required in order to run the service",

packages/pytest-simcore/src/pytest_simcore/helpers/webserver_projects.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,7 @@ async def create_project(
8282
required_resources=ServiceResourcesDictHelpers.model_config[
8383
"json_schema_extra"
8484
]["examples"][0],
85-
key=node_info.get("key"),
86-
version=node_info.get("version"),
87-
label=node_info.get("label"),
85+
**node_info,
8886
)
8987
for node_id, node_info in project_data.get("workbench", {}).items()
9088
},

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

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,45 @@
112112
# NOTE: https://github.com/ITISFoundation/osparc-simcore/issues/3516
113113

114114

115+
def _make_workbench_subquery():
116+
return (
117+
sa.select(
118+
projects_nodes.c.project_uuid,
119+
sa.func.jsonb_object_agg(
120+
projects_nodes.c.node_id,
121+
sa.func.jsonb_build_object(
122+
"key",
123+
projects_nodes.c.key,
124+
"version",
125+
projects_nodes.c.version,
126+
"label",
127+
projects_nodes.c.label,
128+
"input_access",
129+
projects_nodes.c.input_access,
130+
"input_nodes",
131+
projects_nodes.c.input_nodes,
132+
"inputs",
133+
projects_nodes.c.inputs,
134+
"inputs_required",
135+
projects_nodes.c.inputs_required,
136+
"output_nodes",
137+
projects_nodes.c.output_nodes,
138+
"outputs",
139+
projects_nodes.c.outputs,
140+
"run_hash",
141+
projects_nodes.c.run_hash,
142+
"state",
143+
projects_nodes.c.state,
144+
"parent",
145+
projects_nodes.c.parent,
146+
"boot_options",
147+
projects_nodes.c.boot_options,
148+
),
149+
).label("workbench"),
150+
).group_by(projects_nodes.c.project_uuid)
151+
).subquery("workbench_subquery")
152+
153+
115154
class ProjectDBAPI(BaseProjectDB):
116155
def __init__(self, app: web.Application) -> None:
117156
self._app = app
@@ -167,6 +206,7 @@ def _reraise_if_not_unique_uuid_error(err: UniqueViolation):
167206
project_index = None
168207
project_uuid = ProjectID(f"{insert_values['uuid']}")
169208

209+
workbench = insert_values.pop("workbench")
170210
try:
171211
result: ResultProxy = await conn.execute(
172212
projects.insert()
@@ -183,6 +223,7 @@ def _reraise_if_not_unique_uuid_error(err: UniqueViolation):
183223
assert row # nosec
184224

185225
selected_values = ProjectDict(row.items())
226+
selected_values["workbench"] = workbench
186227
project_index = selected_values.pop("id")
187228

188229
except UniqueViolation as err:
@@ -222,9 +263,7 @@ def _reraise_if_not_unique_uuid_error(err: UniqueViolation):
222263
NodeID(node_id): ProjectNodeCreate(
223264
node_id=NodeID(node_id),
224265
required_resources={},
225-
key=node_info.get("key"),
226-
version=node_info.get("version"),
227-
label=node_info.get("label"),
266+
**node_info,
228267
)
229268
for node_id, node_info in selected_values[
230269
"workbench"
@@ -237,9 +276,7 @@ def _reraise_if_not_unique_uuid_error(err: UniqueViolation):
237276
ProjectNodeCreate(
238277
node_id=NodeID(node_id),
239278
required_resources={},
240-
key=node_info.get("key"),
241-
version=node_info.get("version"),
242-
label=node_info.get("label"),
279+
**node_info,
243280
),
244281
)
245282
for node_id, node_info in selected_values[
@@ -390,7 +427,7 @@ def _create_private_workspace_query(
390427
private_workspace_query = (
391428
sa.select(
392429
*PROJECT_DB_COLS,
393-
projects.c.workbench,
430+
_make_workbench_subquery().c.workbench,
394431
access_rights_subquery.c.access_rights,
395432
projects_to_products.c.product_name,
396433
projects_to_folders.c.folder_id,
@@ -472,7 +509,7 @@ def _create_shared_workspace_query(
472509
shared_workspace_query = (
473510
sa.select(
474511
*PROJECT_DB_COLS,
475-
projects.c.workbench,
512+
_make_workbench_subquery().c.workbench,
476513
workspace_access_rights_subquery.c.access_rights,
477514
projects_to_products.c.product_name,
478515
projects_to_folders.c.folder_id,
@@ -770,7 +807,7 @@ async def get_project_db(self, project_uuid: ProjectID) -> ProjectDB:
770807
result = await conn.execute(
771808
sa.select(
772809
*PROJECT_DB_COLS,
773-
projects.c.workbench,
810+
# projects.c.workbench, TODO GCR
774811
).where(projects.c.uuid == f"{project_uuid}")
775812
)
776813
row = await result.fetchone()

0 commit comments

Comments
 (0)