Skip to content

Commit f36746c

Browse files
committed
fix cyclic import
1 parent f77054b commit f36746c

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
)
1010
from ._models import RedisManagerDBConfig
1111
from ._project_lock import (
12-
PROJECT_REDIS_LOCK_KEY,
1312
get_project_locked_state,
1413
is_project_locked,
1514
with_project_locked,
@@ -24,7 +23,6 @@
2423
"handle_redis_returns_union_types",
2524
"is_project_locked",
2625
"LockLostError",
27-
"PROJECT_REDIS_LOCK_KEY",
2826
"ProjectLockError",
2927
"RedisClientSDK",
3028
"RedisClientsManager",

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
from models_library.projects_access import Owner
77
from models_library.projects_state import ProjectLocked, ProjectStatus
88

9-
from . import CouldNotAcquireLockError, RedisClientSDK, exclusive
10-
from ._errors import ProjectLockError
9+
from ._client import RedisClientSDK
10+
from ._decorators import exclusive
11+
from ._errors import CouldNotAcquireLockError, ProjectLockError
1112

12-
PROJECT_REDIS_LOCK_KEY: Final[str] = "project_lock:{}"
13+
_PROJECT_REDIS_LOCK_KEY: Final[str] = "project_lock:{}"
1314

1415

1516
P = ParamSpec("P")
@@ -25,14 +26,28 @@ def with_project_locked(
2526
) -> Callable[
2627
[Callable[P, Coroutine[Any, Any, R]]], Callable[P, Coroutine[Any, Any, R]]
2728
]:
29+
"""creates a distributed auto sustained Redis lock for project with project_uuid, keeping its status and owner in the lock data
30+
31+
Arguments:
32+
redis_client -- the client to use to access redis
33+
project_uuid -- the project UUID
34+
status -- the project status
35+
36+
Keyword Arguments:
37+
owner -- the owner of the lock (default: {None})
38+
39+
Returns:
40+
the decorated function return value
41+
"""
42+
2843
def _decorator(
2944
func: Callable[P, Coroutine[Any, Any, R]],
3045
) -> Callable[P, Coroutine[Any, Any, R]]:
3146
@functools.wraps(func)
3247
async def _wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
3348
@exclusive(
3449
redis_client,
35-
lock_key=PROJECT_REDIS_LOCK_KEY.format(project_uuid),
50+
lock_key=_PROJECT_REDIS_LOCK_KEY.format(project_uuid),
3651
lock_value=ProjectLocked(
3752
value=True,
3853
owner=owner,
@@ -55,7 +70,7 @@ async def _exclusive_func(*args, **kwargs) -> R:
5570
async def is_project_locked(
5671
redis_client: RedisClientSDK, project_uuid: str | ProjectID
5772
) -> bool:
58-
redis_lock = redis_client.create_lock(PROJECT_REDIS_LOCK_KEY.format(project_uuid))
73+
redis_lock = redis_client.create_lock(_PROJECT_REDIS_LOCK_KEY.format(project_uuid))
5974
return await redis_lock.locked()
6075

6176

@@ -68,7 +83,7 @@ async def get_project_locked_state(
6883
"""
6984
if await is_project_locked(redis_client, project_uuid=project_uuid) and (
7085
lock_value := await redis_client.redis.get(
71-
PROJECT_REDIS_LOCK_KEY.format(project_uuid)
86+
_PROJECT_REDIS_LOCK_KEY.format(project_uuid)
7287
)
7388
):
7489
return ProjectLocked.model_validate_json(lock_value)

packages/service-library/tests/redis/test_project_lock.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
from models_library.projects_state import ProjectLocked, ProjectStatus
1616
from servicelib.async_utils import cancel_wait_task
1717
from servicelib.redis import (
18-
PROJECT_REDIS_LOCK_KEY,
1918
ProjectLockError,
2019
RedisClientSDK,
2120
get_project_locked_state,
2221
is_project_locked,
2322
with_project_locked,
2423
)
24+
from servicelib.redis._project_lock import _PROJECT_REDIS_LOCK_KEY
2525

2626
pytest_simcore_core_services_selection = [
2727
"redis",
@@ -79,7 +79,7 @@ async def _locked_fct() -> None:
7979
)
8080
# check lock name formatting is correct
8181
redis_lock = await redis_client_sdk.redis.get(
82-
PROJECT_REDIS_LOCK_KEY.format(project_uuid)
82+
_PROJECT_REDIS_LOCK_KEY.format(project_uuid)
8383
)
8484
assert redis_lock
8585
assert ProjectLocked.model_validate_json(redis_lock) == ProjectLocked(

0 commit comments

Comments
 (0)