Skip to content

Commit 0d26e0c

Browse files
fix: fake server Redis client's lifecycle
1 parent ab99e13 commit 0d26e0c

File tree

2 files changed

+38
-29
lines changed

2 files changed

+38
-29
lines changed

packages/celery-library/src/celery_library/common.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@
22
from typing import Any
33

44
from celery import Celery # type: ignore[import-untyped]
5-
from servicelib.redis import RedisClientSDK
65
from settings_library.celery import CelerySettings
76
from settings_library.redis import RedisDatabase
87

9-
from .backends._redis import RedisTaskInfoStore
10-
from .task_manager import CeleryTaskManager
11-
128

139
def _celery_configure(celery_settings: CelerySettings) -> dict[str, Any]:
1410
base_config = {
@@ -36,22 +32,3 @@ def create_app(settings: CelerySettings) -> Celery:
3632
),
3733
**_celery_configure(settings),
3834
)
39-
40-
41-
async def create_task_manager(
42-
app: Celery, settings: CelerySettings
43-
) -> CeleryTaskManager:
44-
redis_client_sdk = RedisClientSDK(
45-
settings.CELERY_REDIS_RESULT_BACKEND.build_redis_dsn(
46-
RedisDatabase.CELERY_TASKS
47-
),
48-
client_name="celery_tasks",
49-
)
50-
await redis_client_sdk.setup()
51-
# GCR please address https://github.com/ITISFoundation/osparc-simcore/issues/8159
52-
53-
return CeleryTaskManager(
54-
app,
55-
settings,
56-
RedisTaskInfoStore(redis_client_sdk),
57-
)

packages/celery-library/tests/conftest.py

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@
1212
from celery.contrib.testing.worker import TestWorkController, start_worker
1313
from celery.signals import worker_init, worker_shutdown
1414
from celery.worker.worker import WorkController
15-
from celery_library.common import create_task_manager
15+
from celery_library.backends._redis import RedisTaskInfoStore
1616
from celery_library.signals import on_worker_init, on_worker_shutdown
1717
from celery_library.task_manager import CeleryTaskManager
1818
from celery_library.types import register_celery_types
1919
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict
2020
from pytest_simcore.helpers.typing_env import EnvVarsDict
2121
from servicelib.celery.app_server import BaseAppServer
22+
from servicelib.redis import RedisClientSDK
2223
from settings_library.celery import CelerySettings
23-
from settings_library.redis import RedisSettings
24+
from settings_library.redis import RedisDatabase, RedisSettings
2425

2526
pytest_plugins = [
2627
"pytest_simcore.docker_compose",
@@ -34,10 +35,30 @@
3435

3536

3637
class FakeAppServer(BaseAppServer):
38+
def __init__(self, app: Celery, settings: CelerySettings):
39+
super().__init__(app)
40+
self._settings = settings
41+
3742
async def lifespan(self, startup_completed_event: threading.Event) -> None:
43+
redis_client_sdk = RedisClientSDK(
44+
self._settings.CELERY_REDIS_RESULT_BACKEND.build_redis_dsn(
45+
RedisDatabase.CELERY_TASKS
46+
),
47+
client_name="pytest_celery_tasks",
48+
)
49+
await redis_client_sdk.setup()
50+
51+
self.task_manager = CeleryTaskManager(
52+
self._app,
53+
self._settings,
54+
RedisTaskInfoStore(redis_client_sdk),
55+
)
56+
3857
startup_completed_event.set()
3958
await self.shutdown_event.wait() # wait for shutdown
4059

60+
await redis_client_sdk.shutdown()
61+
4162

4263
@pytest.fixture
4364
def register_celery_tasks() -> Callable[[Celery], None]:
@@ -74,8 +95,8 @@ def celery_settings(
7495

7596

7697
@pytest.fixture
77-
def app_server() -> BaseAppServer:
78-
return FakeAppServer(app=None)
98+
def app_server(celery_app: Celery, celery_settings: CelerySettings) -> BaseAppServer:
99+
return FakeAppServer(app=celery_app, settings=celery_settings)
79100

80101

81102
@pytest.fixture(scope="session")
@@ -125,10 +146,21 @@ async def celery_task_manager(
125146
celery_app: Celery,
126147
celery_settings: CelerySettings,
127148
with_celery_worker: TestWorkController,
128-
) -> CeleryTaskManager:
149+
) -> AsyncIterator[CeleryTaskManager]:
129150
register_celery_types()
130151

131-
return await create_task_manager(
152+
redis_client_sdk = RedisClientSDK(
153+
celery_settings.CELERY_REDIS_RESULT_BACKEND.build_redis_dsn(
154+
RedisDatabase.CELERY_TASKS
155+
),
156+
client_name="pytest_celery_tasks",
157+
)
158+
await redis_client_sdk.setup()
159+
160+
yield CeleryTaskManager(
132161
celery_app,
133162
celery_settings,
163+
RedisTaskInfoStore(redis_client_sdk),
134164
)
165+
166+
await redis_client_sdk.shutdown()

0 commit comments

Comments
 (0)