Skip to content

Commit c84793a

Browse files
author
Andrei Neagu
committed
refacotred moved aorund modules
1 parent 8be4c42 commit c84793a

File tree

6 files changed

+99
-137
lines changed

6 files changed

+99
-137
lines changed

packages/postgres-database/src/simcore_postgres_database/utils_projects_extensions.py

Lines changed: 0 additions & 53 deletions
This file was deleted.

packages/postgres-database/tests/test_utils_projects_extensions.py

Lines changed: 0 additions & 75 deletions
This file was deleted.

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from models_library.workspaces import WorkspaceID
1515
from pydantic import NonNegativeInt, PositiveInt
1616
from simcore_postgres_database.models.projects import projects
17+
from simcore_postgres_database.models.projects_extensions import projects_extensions
1718
from simcore_postgres_database.models.users import users
1819
from simcore_postgres_database.utils_repos import (
1920
get_columns_from_db_model,
@@ -289,3 +290,52 @@ async def delete_project(
289290
if row is None:
290291
raise ProjectNotFoundError(project_uuid=project_uuid)
291292
return ProjectDBGet.model_validate(row)
293+
294+
295+
async def allows_guests_to_push_states_and_output_ports(
296+
app: web.Application,
297+
connection: AsyncConnection | None = None,
298+
*,
299+
project_uuid: str,
300+
) -> bool:
301+
async with pass_or_acquire_connection(get_asyncpg_engine(app), connection) as conn:
302+
result: bool | None = await conn.scalar(
303+
sa.select(
304+
projects_extensions.c.allow_guests_to_push_states_and_output_ports
305+
).where(projects_extensions.c.project_uuid == project_uuid)
306+
)
307+
return result if result is not None else False
308+
309+
310+
async def _set_allow_guests_to_push_states_and_output_ports(
311+
app: web.Application,
312+
connection: AsyncConnection | None = None,
313+
*,
314+
project_uuid: str,
315+
) -> None:
316+
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
317+
await conn.execute(
318+
sa.insert(projects_extensions).values(
319+
project_uuid=project_uuid,
320+
allow_guests_to_push_states_and_output_ports=True,
321+
)
322+
)
323+
324+
325+
async def copy_allow_guests_to_push_states_and_output_ports(
326+
app: web.Application,
327+
connection: AsyncConnection | None = None,
328+
*,
329+
from_project_uuid: str,
330+
to_project_uuid: str,
331+
) -> None:
332+
# get setting from template project
333+
allow_guests = await allows_guests_to_push_states_and_output_ports(
334+
app, connection, project_uuid=from_project_uuid
335+
)
336+
337+
# set same setting in new project if True
338+
if allow_guests:
339+
await _set_allow_guests_to_push_states_and_output_ports(
340+
app, connection, project_uuid=to_project_uuid
341+
)

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@
107107
from servicelib.rest_constants import RESPONSE_MODEL_POLICY
108108
from servicelib.utils import fire_and_forget_task, limited_gather, logged_gather
109109
from simcore_postgres_database.models.users import UserRole
110-
from simcore_postgres_database.utils_projects_extensions import ProjectsExtensionsRepo
111110
from simcore_postgres_database.utils_projects_nodes import (
112111
ProjectNodeCreate,
113112
ProjectNodesNodeNotFoundError,
@@ -117,7 +116,6 @@
117116
from ..application_settings import get_application_settings
118117
from ..catalog import catalog_service
119118
from ..constants import APP_FIRE_AND_FORGET_TASKS_KEY
120-
from ..db.plugin import get_asyncpg_engine
121119
from ..director_v2 import director_v2_service
122120
from ..dynamic_scheduler import api as dynamic_scheduler_service
123121
from ..models import ClientSessionID
@@ -821,8 +819,8 @@ async def _start_dynamic_service( # pylint: disable=too-many-statements # noqa
821819
)
822820
if (
823821
user_role == UserRole.GUEST
824-
and await ProjectsExtensionsRepo.allows_guests_to_push_states_and_output_ports(
825-
get_asyncpg_engine(request.app), project_uuid=f"{project_uuid}"
822+
and await _projects_repository.allows_guests_to_push_states_and_output_ports(
823+
request.app, project_uuid=f"{project_uuid}"
826824
)
827825
):
828826
save_state = True

services/web/server/src/simcore_service_webserver/studies_dispatcher/_studies_access.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@
2525
from models_library.projects import ProjectID
2626
from servicelib.aiohttp import status
2727
from servicelib.aiohttp.typing_extension import Handler
28-
from simcore_postgres_database.utils_projects_extensions import ProjectsExtensionsRepo
2928

3029
from ..constants import INDEX_RESOURCE_NAME
31-
from ..db.plugin import get_asyncpg_engine
3230
from ..director_v2 import director_v2_service
3331
from ..dynamic_scheduler import api as dynamic_scheduler_service
3432
from ..products import products_web
33+
from ..projects import _projects_repository
3534
from ..projects._groups_repository import get_project_group
3635
from ..projects._projects_repository_legacy import ProjectDBAPI
3736
from ..projects.api import check_user_project_permission
@@ -223,8 +222,8 @@ async def copy_study_to_account(
223222
request.app, project_id=ProjectID(project["uuid"])
224223
)
225224

226-
await ProjectsExtensionsRepo.copy_allow_guests_to_push_states_and_output_ports(
227-
get_asyncpg_engine(request.app),
225+
await _projects_repository.copy_allow_guests_to_push_states_and_output_ports(
226+
request.app,
228227
from_project_uuid=template_project["uuid"],
229228
to_project_uuid=project["uuid"],
230229
)

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

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
# pylint: disable=protected-access
12
# pylint: disable=redefined-outer-name
3+
# pylint: disable=too-many-arguments
24
# pylint: disable=unused-argument
35
# pylint: disable=unused-variable
4-
# pylint: disable=too-many-arguments
56

67
from datetime import datetime, timedelta
78
from uuid import UUID
89

910
import arrow
1011
import pytest
12+
from aiohttp import web
1113
from aiohttp.test_utils import TestClient
1214
from common_library.users_enums import UserRole
1315
from models_library.basic_types import IDStr
@@ -195,3 +197,44 @@ async def test_batch_get_trashed_by_primary_gid(
195197
None,
196198
logged_user["primary_gid"],
197199
]
200+
201+
202+
async def _assert_allows_to_psuh(
203+
app: web.Application, project_uuid: str, *, expected: bool
204+
) -> None:
205+
result = (
206+
await projects_service_repository.allows_guests_to_push_states_and_output_ports(
207+
app, project_uuid=project_uuid
208+
)
209+
)
210+
assert result is expected
211+
212+
213+
async def test_guest_allowed_to_push(
214+
client: TestClient, user_project: ProjectDict, shared_project: ProjectDict
215+
):
216+
assert client.app
217+
218+
source_uuid = user_project["uuid"]
219+
copy_uuid = shared_project["uuid"]
220+
221+
await _assert_allows_to_psuh(client.app, source_uuid, expected=False)
222+
223+
# add the entry in the table
224+
await projects_service_repository._set_allow_guests_to_push_states_and_output_ports( # noqa: SLF001
225+
client.app, project_uuid=source_uuid
226+
)
227+
228+
await _assert_allows_to_psuh(client.app, source_uuid, expected=True)
229+
230+
assert (
231+
await projects_service_repository.allows_guests_to_push_states_and_output_ports(
232+
client.app, project_uuid=copy_uuid
233+
)
234+
is False
235+
)
236+
await _assert_allows_to_psuh(client.app, copy_uuid, expected=False)
237+
await projects_service_repository.copy_allow_guests_to_push_states_and_output_ports(
238+
client.app, from_project_uuid=source_uuid, to_project_uuid=copy_uuid
239+
)
240+
await _assert_allows_to_psuh(client.app, copy_uuid, expected=True)

0 commit comments

Comments
 (0)