Skip to content

Commit b2e40a5

Browse files
committed
refactor
1 parent 62526e4 commit b2e40a5

File tree

4 files changed

+24
-22
lines changed

4 files changed

+24
-22
lines changed

services/web/server/src/simcore_service_webserver/exporter/_handlers.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from aiofiles.tempfile import TemporaryDirectory as AioTemporaryDirectory
88
from aiohttp import web
9+
from models_library.projects import ProjectID
910
from models_library.projects_access import Owner
1011
from models_library.projects_state import ProjectStatus
1112
from servicelib.redis import with_project_locked
@@ -14,7 +15,7 @@
1415
from .._constants import RQ_PRODUCT_KEY
1516
from .._meta import API_VTAG
1617
from ..login.decorators import login_required
17-
from ..projects.projects_api import retrieve_and_notify_project_locked_state
18+
from ..projects.projects_api import create_user_notification_cb
1819
from ..redis import get_redis_lock_manager_client_sdk
1920
from ..security.decorators import permission_required
2021
from ..users.api import get_user_fullname
@@ -53,8 +54,8 @@ async def export_project(request: web.Request):
5354
owner=Owner(
5455
user_id=user_id, **await get_user_fullname(request.app, user_id=user_id)
5556
),
56-
notification_cb=retrieve_and_notify_project_locked_state(
57-
user_id, project_uuid, request.app
57+
notification_cb=create_user_notification_cb(
58+
user_id, ProjectID(f"{project_uuid}"), request.app
5859
),
5960
)
6061
async def _() -> tuple[Callable[[], Coroutine[Any, Any, None]], Path]:

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -183,20 +183,16 @@ async def _copy() -> None:
183183
await long_running_task.result()
184184

185185
if needs_lock_source_project:
186-
187-
async def _notification_cb() -> None:
188-
await projects_api.retrieve_and_notify_project_locked_state(
189-
user_id, source_project["uuid"], app
190-
)
191-
192186
await with_project_locked(
193187
get_redis_lock_manager_client_sdk(app),
194188
project_uuid=source_project["uuid"],
195189
status=ProjectStatus.CLONING,
196190
owner=Owner(
197191
user_id=user_id, **await get_user_fullname(app, user_id=user_id)
198192
),
199-
notification_cb=_notification_cb,
193+
notification_cb=projects_api.create_user_notification_cb(
194+
user_id, ProjectID(f"{source_project['uuid']}"), app
195+
),
200196
)(_copy)()
201197
else:
202198
await _copy()

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
""" handlers for project states
2-
3-
"""
1+
"""handlers for project states"""
42

53
import contextlib
64
import functools
@@ -144,7 +142,7 @@ async def open_project(request: web.Request) -> web.Response:
144142

145143
if not await projects_api.try_open_project_for_user(
146144
req_ctx.user_id,
147-
project_uuid=f"{path_params.project_id}",
145+
project_uuid=path_params.project_id,
148146
client_session_id=client_session_id,
149147
app=request.app,
150148
max_number_of_studies_per_user=product.max_open_studies_per_user,

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,9 +1244,18 @@ async def _clean_user_disconnected_clients(
12441244
await user_session.remove(PROJECT_ID_KEY)
12451245

12461246

1247+
def create_user_notification_cb(
1248+
user_id: UserID, project_uuid: ProjectID, app: web.Application
1249+
):
1250+
async def _notification_cb() -> None:
1251+
await retrieve_and_notify_project_locked_state(user_id, f"{project_uuid}", app)
1252+
1253+
return _notification_cb
1254+
1255+
12471256
async def try_open_project_for_user(
12481257
user_id: UserID,
1249-
project_uuid: str,
1258+
project_uuid: ProjectID,
12501259
client_session_id: str,
12511260
app: web.Application,
12521261
max_number_of_studies_per_user: int | None,
@@ -1267,9 +1276,7 @@ async def try_open_project_for_user(
12671276
owner=Owner(
12681277
user_id=user_id, **await get_user_fullname(app, user_id=user_id)
12691278
),
1270-
notification_cb=retrieve_and_notify_project_locked_state(
1271-
user_id, project_uuid, app
1272-
),
1279+
notification_cb=create_user_notification_cb(user_id, project_uuid, app),
12731280
)
12741281
async def _open_project() -> bool:
12751282
with managed_resource(user_id, client_session_id, app) as user_session:
@@ -1296,11 +1303,11 @@ async def _open_project() -> bool:
12961303
sessions_with_project: list[
12971304
UserSessionID
12981305
] = await user_session.find_users_of_resource(
1299-
app, PROJECT_ID_KEY, project_uuid
1306+
app, PROJECT_ID_KEY, f"{project_uuid}"
13001307
)
13011308
if not sessions_with_project:
13021309
# no one has the project so we assign it
1303-
await user_session.add(PROJECT_ID_KEY, project_uuid)
1310+
await user_session.add(PROJECT_ID_KEY, f"{project_uuid}")
13041311
return True
13051312

13061313
# Otherwise if this is the only user (NOTE: a session = user_id + client_seesion_id !)
@@ -1316,7 +1323,7 @@ async def _open_project() -> bool:
13161323
app,
13171324
):
13181325
# steal the project
1319-
await user_session.add(PROJECT_ID_KEY, project_uuid)
1326+
await user_session.add(PROJECT_ID_KEY, f"{project_uuid}")
13201327
await _clean_user_disconnected_clients(
13211328
sessions_with_project, app
13221329
)
@@ -1765,7 +1772,7 @@ async def remove_project_dynamic_services(
17651772
status=ProjectStatus.CLOSING,
17661773
owner=Owner(user_id=user_id, **user_name_data),
17671774
notification_cb=(
1768-
retrieve_and_notify_project_locked_state(user_id, project_uuid, app)
1775+
create_user_notification_cb(user_id, ProjectID(project_uuid), app)
17691776
if notify_users
17701777
else None
17711778
),

0 commit comments

Comments
 (0)