Skip to content

Commit f1d5bd0

Browse files
committed
minor
1 parent 1b795fe commit f1d5bd0

File tree

5 files changed

+21
-18
lines changed

5 files changed

+21
-18
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
# mypy: disable-error-code=truthy-function
22
from typing import Annotated, Any, Literal, TypeAlias
33

4-
from models_library.groups import GroupID
5-
from models_library.projects import ProjectID
6-
from models_library.services_history import ServiceRelease
74
from pydantic import ConfigDict, Field
85

96
from ..access_rights import ExecutableAccessRights
@@ -13,8 +10,11 @@
1310
from ..projects_nodes_io import NodeID
1411
from ..services import ServiceKey, ServicePortKey, ServiceVersion
1512
from ..services_enums import ServiceState
13+
from ..services_history import ServiceRelease
1614
from ..services_resources import ServiceResourcesDict
1715
from ._base import InputSchemaWithoutCamelCase, OutputSchema
16+
from .groups import GroupID
17+
from .projects import ProjectID
1818

1919
assert ServiceResourcesDict # nosec
2020
__all__: tuple[str, ...] = ("ServiceResourcesDict",)

services/web/server/src/simcore_service_webserver/resource_manager/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def to_redis_hash_key(self) -> RedisHashKey:
2121

2222
@classmethod
2323
def from_redis_hash_key(cls, hash_key: RedisHashKey) -> Self:
24-
key = dict(x.split("=") for x in hash_key.split(":") if "=" in x)
24+
key = dict(x.split("=", 1) for x in hash_key.split(":") if "=" in x)
2525
return cls.model_validate(key)
2626

2727
@staticmethod

services/web/server/src/simcore_service_webserver/resource_manager/user_sessions.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from collections.abc import Iterator
33
from contextlib import contextmanager
44
from dataclasses import dataclass
5+
from functools import cached_property
56
from typing import Final
67

78
from aiohttp import web
@@ -62,7 +63,8 @@ class UserSessionResourcesRegistry:
6263
def _registry(self) -> RedisResourceRegistry:
6364
return get_registry(self.app)
6465

65-
def _resource_key(self) -> UserSession:
66+
@cached_property
67+
def resource_key(self) -> UserSession:
6668
return UserSession(
6769
user_id=self.user_id,
6870
client_session_id=self.client_session_id or "*",
@@ -78,14 +80,12 @@ async def set_socket_id(self, socket_id: str) -> None:
7880
)
7981

8082
await self._registry.set_resource(
81-
self._resource_key(), (_SOCKET_ID_FIELDNAME, socket_id)
83+
self.resource_key, (_SOCKET_ID_FIELDNAME, socket_id)
8284
)
8385
# NOTE: hearthbeat is not emulated in tests, make sure that with very small GC intervals
8486
# the resources do not expire; this value is usually in the order of minutes
8587
timeout = max(3, _get_service_deletion_timeout(self.app))
86-
await self._registry.set_key_alive(
87-
self._resource_key(), expiration_time=timeout
88-
)
88+
await self._registry.set_key_alive(self.resource_key, expiration_time=timeout)
8989

9090
async def get_socket_id(self) -> str | None:
9191
_logger.debug(
@@ -94,15 +94,15 @@ async def get_socket_id(self) -> str | None:
9494
self.client_session_id,
9595
)
9696

97-
resources = await self._registry.get_resources(self._resource_key())
97+
resources = await self._registry.get_resources(self.resource_key)
9898
key: str | None = resources.get("socket_id", None)
9999
return key
100100

101101
async def user_pressed_disconnect(self) -> None:
102102
"""When the user disconnects expire as soon as possible the alive key
103103
to ensure garbage collection will trigger in the next 2 cycles."""
104104

105-
await self._registry.set_key_alive(self._resource_key(), expiration_time=1)
105+
await self._registry.set_key_alive(self.resource_key, expiration_time=1)
106106

107107
async def remove_socket_id(self) -> None:
108108
_logger.debug(
@@ -112,17 +112,17 @@ async def remove_socket_id(self) -> None:
112112
extra=get_log_record_extra(user_id=self.user_id),
113113
)
114114

115-
await self._registry.remove_resource(self._resource_key(), _SOCKET_ID_FIELDNAME)
115+
await self._registry.remove_resource(self.resource_key, _SOCKET_ID_FIELDNAME)
116116
await self._registry.set_key_alive(
117-
self._resource_key(),
117+
self.resource_key,
118118
expiration_time=_get_service_deletion_timeout(self.app),
119119
)
120120

121121
async def set_heartbeat(self) -> None:
122122
"""Extends TTL to avoid expiration of all resources under this session"""
123123

124124
await self._registry.set_key_alive(
125-
self._resource_key(),
125+
self.resource_key,
126126
expiration_time=_get_service_deletion_timeout(self.app),
127127
)
128128

@@ -160,7 +160,7 @@ async def find(self, resource_name: str) -> list[str]:
160160
extra=get_log_record_extra(user_id=self.user_id),
161161
)
162162

163-
return await self._registry.find_resources(self._resource_key(), resource_name)
163+
return await self._registry.find_resources(self.resource_key, resource_name)
164164

165165
async def add(self, key: str, value: str) -> None:
166166
_logger.debug(
@@ -172,7 +172,7 @@ async def add(self, key: str, value: str) -> None:
172172
extra=get_log_record_extra(user_id=self.user_id),
173173
)
174174

175-
await self._registry.set_resource(self._resource_key(), (key, value))
175+
await self._registry.set_resource(self.resource_key, (key, value))
176176

177177
async def remove(self, key: str) -> None:
178178
_logger.debug(
@@ -183,7 +183,7 @@ async def remove(self, key: str) -> None:
183183
extra=get_log_record_extra(user_id=self.user_id),
184184
)
185185

186-
await self._registry.remove_resource(self._resource_key(), key)
186+
await self._registry.remove_resource(self.resource_key, key)
187187

188188
@staticmethod
189189
async def find_users_of_resource(

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,7 @@ async def test_open_template_project_for_edition(
657657
)
658658

659659
# Only create socketio connection for non-anonymous users
660+
client_id = None
660661
if expected != status.HTTP_401_UNAUTHORIZED:
661662
_, client_id, _ = await create_socketio_connection_with_handlers(client)
662663
url = client.app.router["open_project"].url_for(project_id=template_project["uuid"])
@@ -1158,6 +1159,7 @@ async def test_get_active_project(
11581159
mocked_notifications_plugin: dict[str, mock.Mock],
11591160
):
11601161
# login with socket using client session id
1162+
client_id1 = ""
11611163
try:
11621164
sio, client_id1 = await create_socketio_connection(None, client)
11631165
assert sio.sid
@@ -1203,6 +1205,7 @@ async def test_get_active_project(
12031205
mocked_notifications_plugin["subscribe"].assert_not_called()
12041206

12051207
# login with socket using client session id2
1208+
client_id2 = ""
12061209
try:
12071210
sio, client_id2 = await create_socketio_connection(None, client)
12081211
assert sio.sid

services/web/server/tests/unit/with_dbs/04/garbage_collector/test_resource_manager_user_sessions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ async def test_users_sessions_resources_registry(
275275
user_session_key = UserSession(
276276
user_id=user_id, client_session_id=client_session_id
277277
)
278-
assert rt._resource_key() == user_session_key # noqa: SLF001
278+
assert rt.resource_key() == user_session_key # noqa: SLF001
279279

280280
# set the socket id and check it is rightfully there
281281
await rt.set_socket_id(socket_id)

0 commit comments

Comments
 (0)