Skip to content

Commit 3ba956d

Browse files
committed
✨ Implement Redis client lifespan management and integrate into application lifecycle
1 parent 428f6a6 commit 3ba956d

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from collections.abc import AsyncIterator
2+
from typing import cast
3+
4+
from fastapi import FastAPI
5+
from fastapi_lifespan_manager import LifespanManager, State
6+
from servicelib.fastapi.redis_lifespan import (
7+
redis_database_lifespan,
8+
)
9+
from servicelib.redis import RedisClientSDK
10+
11+
redis_client_lifespan = LifespanManager()
12+
redis_client_lifespan.add(redis_database_lifespan)
13+
14+
15+
@redis_client_lifespan.add
16+
async def _redis_client_sdk_lifespan(
17+
app: FastAPI, state: State
18+
) -> AsyncIterator[State]:
19+
app.state.redis_client_sdk = state["REDIS_CLIENT_SDK"]
20+
yield {}
21+
del app.state.redis_client_sdk
22+
23+
24+
def get_redis_client(app: FastAPI) -> RedisClientSDK:
25+
return cast(RedisClientSDK, app.state.redis_client_sdk)

services/catalog/src/simcore_service_catalog/core/events.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
)
1313
from servicelib.fastapi.redis_lifespan import (
1414
RedisLifespanState,
15-
redis_database_lifespan,
1615
)
1716
from settings_library.redis import RedisDatabase
1817

1918
from .._meta import APP_FINISHED_BANNER_MSG, APP_NAME, APP_STARTED_BANNER_MSG
2019
from ..api.rpc.events import rpc_api_lifespan
2120
from ..clients.director import director_lifespan
2221
from ..clients.rabbitmq import rabbitmq_lifespan
22+
from ..clients.redis import redis_client_lifespan
2323
from ..repository.events import repository_lifespan_manager
2424
from ..service.function_services import function_services_lifespan
2525
from .background_tasks import background_task_lifespan
@@ -81,8 +81,9 @@ def create_app_lifespan() -> LifespanManager:
8181
app_lifespan.add(function_services_lifespan)
8282

8383
# - redis
84+
app_lifespan.include(redis_client_lifespan)
85+
8486
# - background task
85-
app_lifespan.add(redis_database_lifespan)
8687
app_lifespan.add(background_task_lifespan)
8788

8889
# - prometheus instrumentation

services/catalog/tests/unit/conftest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,17 +227,17 @@ def repository_lifespan_disabled(mocker: MockerFixture):
227227

228228

229229
@pytest.fixture
230-
def redis_lifespan_disabled(mocker: MockerFixture):
230+
def redis_client_lifespan(mocker: MockerFixture):
231231
mocker.patch.object(
232232
simcore_service_catalog.core.events,
233-
"redis_database_lifespan",
233+
"redis_client_lifespan",
234234
autospec=True,
235235
)
236236

237237

238238
@pytest.fixture
239239
def background_task_lifespan_disabled(
240-
mocker: MockerFixture, redis_lifespan_disabled: None
240+
mocker: MockerFixture, redis_client_lifespan: None
241241
) -> None:
242242
class MockedBackgroundTaskContextManager:
243243
async def __aenter__(self):

0 commit comments

Comments
 (0)