Skip to content

Commit a0f1443

Browse files
committed
cleanup
1 parent 77ac6cd commit a0f1443

File tree

7 files changed

+26
-55
lines changed

7 files changed

+26
-55
lines changed

packages/service-library/src/servicelib/redis/_project_lock.py

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ def with_project_locked(
2222
*,
2323
project_uuid: str | ProjectID,
2424
status: ProjectStatus,
25-
owner: Owner | None = None,
25+
owner: Owner | None,
26+
notification_cb: Callable[[], Awaitable[None]] | None,
2627
) -> Callable[
2728
[Callable[P, Coroutine[Any, Any, R]]], Callable[P, Coroutine[Any, Any, R]]
2829
]:
@@ -32,9 +33,8 @@ def with_project_locked(
3233
redis_client -- the client to use to access redis
3334
project_uuid -- the project UUID
3435
status -- the project status
35-
36-
Keyword Arguments:
3736
owner -- the owner of the lock (default: {None})
37+
notification_cb -- a notification callback that will be called AFTER the project is locked and AFTER it was unlocked
3838
3939
Returns:
4040
the decorated function return value
@@ -55,49 +55,18 @@ async def _wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
5555
).model_dump_json(),
5656
)
5757
async def _exclusive_func(*args, **kwargs) -> R:
58+
if notification_cb is not None:
59+
await notification_cb()
5860
return await func(*args, **kwargs)
5961

6062
try:
61-
return await _exclusive_func(*args, **kwargs)
62-
except CouldNotAcquireLockError as e:
63-
raise ProjectLockError from e
64-
65-
return _wrapper
66-
67-
return _decorator
68-
69-
70-
def with_project_locked_and_notify(
71-
redis_client: RedisClientSDK | Callable[..., RedisClientSDK],
72-
*,
73-
project_uuid: str,
74-
status: ProjectStatus,
75-
owner: Owner,
76-
notification_cb: Callable[[], Awaitable[None]] | None,
77-
) -> Callable[
78-
[Callable[P, Coroutine[Any, Any, R]]], Callable[P, Coroutine[Any, Any, R]]
79-
]:
80-
def _decorator(
81-
func: Callable[P, Coroutine[Any, Any, R]],
82-
) -> Callable[P, Coroutine[Any, Any, R]]:
83-
@functools.wraps(func)
84-
async def _wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
85-
@with_project_locked(
86-
redis_client,
87-
project_uuid=project_uuid,
88-
status=status,
89-
owner=owner,
90-
)
91-
async def _locked_func() -> R:
63+
result = await _exclusive_func(*args, **kwargs)
64+
# we are now unlocked
9265
if notification_cb is not None:
9366
await notification_cb()
94-
95-
return await func(*args, **kwargs)
96-
97-
result = await _locked_func()
98-
if notification_cb is not None:
99-
await notification_cb()
100-
return result
67+
return result
68+
except CouldNotAcquireLockError as e:
69+
raise ProjectLockError from e
10170

10271
return _wrapper
10372

services/clusters-keeper/src/simcore_service_clusters_keeper/rpc/clusters.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
from models_library.users import UserID
88
from models_library.wallets import WalletID
99
from servicelib.rabbitmq import RPCRouter
10-
from servicelib.redis._client import RedisClientSDK
11-
from servicelib.redis._decorators import exclusive
10+
from servicelib.redis import RedisClientSDK, exclusive
1211

1312
from ..core.settings import get_application_settings
1413
from ..modules import clusters

services/efs-guardian/src/simcore_service_efs_guardian/services/process_messages.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from servicelib.rabbitmq.rpc_interfaces.dynamic_sidecar.disk_usage import (
1010
update_disk_usage,
1111
)
12-
from servicelib.redis._decorators import exclusive
12+
from servicelib.redis import exclusive
1313
from servicelib.utils import fire_and_forget_task
1414

1515
from ..core.settings import get_application_settings

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
from aiohttp import web
99
from models_library.projects_access import Owner
1010
from models_library.projects_state import ProjectStatus
11+
from servicelib.redis import with_project_locked
1112
from servicelib.request_keys import RQT_USERID_KEY
1213

1314
from .._constants import RQ_PRODUCT_KEY
1415
from .._meta import API_VTAG
1516
from ..login.decorators import login_required
16-
from ..projects.api import with_project_locked_and_notify
1717
from ..projects.projects_api import retrieve_and_notify_project_locked_state
1818
from ..redis import get_redis_lock_manager_client_sdk
1919
from ..security.decorators import permission_required
@@ -46,7 +46,7 @@ async def export_project(request: web.Request):
4646
project_uuid = request.match_info.get("project_id")
4747
assert project_uuid # nosec
4848

49-
@with_project_locked_and_notify(
49+
@with_project_locked(
5050
get_redis_lock_manager_client_sdk(request.app),
5151
project_uuid=project_uuid,
5252
status=ProjectStatus.EXPORTING,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from pydantic import TypeAdapter
1919
from servicelib.aiohttp.long_running_tasks.server import TaskProgress
2020
from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON
21-
from servicelib.redis._project_lock import with_project_locked_and_notify
21+
from servicelib.redis import with_project_locked
2222
from simcore_postgres_database.utils_projects_nodes import (
2323
ProjectNode,
2424
ProjectNodeCreate,
@@ -189,7 +189,7 @@ async def _notification_cb() -> None:
189189
user_id, source_project["uuid"], app
190190
)
191191

192-
await with_project_locked_and_notify(
192+
await with_project_locked(
193193
get_redis_lock_manager_client_sdk(app),
194194
project_uuid=source_project["uuid"],
195195
status=ProjectStatus.CLONING,

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,12 @@
8080
ServiceWaitingForManualInterventionError,
8181
ServiceWasNotFoundError,
8282
)
83-
from servicelib.redis import get_project_locked_state, is_project_locked
84-
from servicelib.redis._decorators import exclusive
85-
from servicelib.redis._project_lock import with_project_locked_and_notify
83+
from servicelib.redis import (
84+
exclusive,
85+
get_project_locked_state,
86+
is_project_locked,
87+
with_project_locked,
88+
)
8689
from servicelib.utils import fire_and_forget_task, logged_gather
8790
from simcore_postgres_database.models.users import UserRole
8891
from simcore_postgres_database.utils_projects_nodes import (
@@ -1257,7 +1260,7 @@ async def try_open_project_for_user(
12571260
"""
12581261
try:
12591262

1260-
@with_project_locked_and_notify(
1263+
@with_project_locked(
12611264
get_redis_lock_manager_client_sdk(app),
12621265
project_uuid=project_uuid,
12631266
status=ProjectStatus.OPENING,
@@ -1756,7 +1759,7 @@ async def remove_project_dynamic_services(
17561759
save_state = False
17571760
# -------------------
17581761

1759-
@with_project_locked_and_notify(
1762+
@with_project_locked(
17601763
get_redis_lock_manager_client_sdk(app),
17611764
project_uuid=project_uuid,
17621765
status=ProjectStatus.CLOSING,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@
3131
)
3232
from servicelib.aiohttp import status
3333
from servicelib.common_headers import UNDEFINED_DEFAULT_SIMCORE_USER_AGENT_VALUE
34+
from servicelib.redis import with_project_locked
3435
from simcore_postgres_database.models.products import products
3536
from simcore_postgres_database.models.projects_to_products import projects_to_products
3637
from simcore_service_webserver._meta import api_version_prefix
3738
from simcore_service_webserver.db.models import UserRole
38-
from simcore_service_webserver.exporter._handlers import with_project_locked_and_notify
3939
from simcore_service_webserver.projects import _crud_api_delete
4040
from simcore_service_webserver.projects.models import ProjectDict
4141
from socketio.exceptions import ConnectionError as SocketConnectionError
@@ -230,7 +230,7 @@ async def test_delete_project_while_it_is_locked_raises_error(
230230

231231
project_uuid = user_project["uuid"]
232232
user_id = logged_user["id"]
233-
await with_project_locked_and_notify(
233+
await with_project_locked(
234234
app=client.app,
235235
project_uuid=project_uuid,
236236
status=ProjectStatus.CLOSING,

0 commit comments

Comments
 (0)