11import contextlib
22import logging
3+ from dataclasses import dataclass
34from datetime import timedelta
45from typing import TYPE_CHECKING , Final
56
1011 ExecutionMetadata ,
1112 OwnerMetadata ,
1213 Task ,
13- TaskInfoStore ,
1414 TaskKey ,
15+ TaskStore ,
1516)
1617from servicelib .redis import RedisClientSDK , handle_redis_returns_union_types
1718
18- _CELERY_TASK_INFO_PREFIX : Final [str ] = "celery-task-info -"
19+ _CELERY_TASK_PREFIX : Final [str ] = "celery-task-"
1920_CELERY_TASK_ID_KEY_ENCODING = "utf-8"
2021_CELERY_TASK_SCAN_COUNT_PER_BATCH : Final [int ] = 1000
2122_CELERY_TASK_METADATA_KEY : Final [str ] = "metadata"
2223_CELERY_TASK_PROGRESS_KEY : Final [str ] = "progress"
2324
25+
2426_logger = logging .getLogger (__name__ )
2527
2628
27- def _build_key (task_key : TaskKey ) -> str :
28- return _CELERY_TASK_INFO_PREFIX + task_key
29+ def _build_redis_task_key (task_key : TaskKey ) -> str :
30+ return _CELERY_TASK_PREFIX + task_key
2931
3032
31- class RedisTaskInfoStore :
32- def __init__ ( self , redis_client_sdk : RedisClientSDK ) -> None :
33- self . _redis_client_sdk = redis_client_sdk
33+ @ dataclass ( frozen = True )
34+ class RedisTaskStore :
35+ _redis_client_sdk : RedisClientSDK
3436
3537 async def create_task (
3638 self ,
3739 task_key : TaskKey ,
3840 execution_metadata : ExecutionMetadata ,
3941 expiry : timedelta ,
4042 ) -> None :
41- redis_key = _build_key (task_key )
43+ redis_key = _build_redis_task_key (task_key )
4244 await handle_redis_returns_union_types (
4345 self ._redis_client_sdk .redis .hset (
4446 name = redis_key ,
@@ -54,7 +56,8 @@ async def create_task(
5456 async def get_task_metadata (self , task_key : TaskKey ) -> ExecutionMetadata | None :
5557 raw_result = await handle_redis_returns_union_types (
5658 self ._redis_client_sdk .redis .hget (
57- _build_key (task_key ), _CELERY_TASK_METADATA_KEY
59+ _build_redis_task_key (task_key ),
60+ _CELERY_TASK_METADATA_KEY ,
5861 )
5962 )
6063 if not raw_result :
@@ -73,7 +76,8 @@ async def get_task_metadata(self, task_key: TaskKey) -> ExecutionMetadata | None
7376 async def get_task_progress (self , task_key : TaskKey ) -> ProgressReport | None :
7477 raw_result = await handle_redis_returns_union_types (
7578 self ._redis_client_sdk .redis .hget (
76- _build_key (task_key ), _CELERY_TASK_PROGRESS_KEY
79+ _build_redis_task_key (task_key ),
80+ _CELERY_TASK_PROGRESS_KEY ,
7781 )
7882 )
7983 if not raw_result :
@@ -90,7 +94,7 @@ async def get_task_progress(self, task_key: TaskKey) -> ProgressReport | None:
9094 return None
9195
9296 async def list_tasks (self , owner_metadata : OwnerMetadata ) -> list [Task ]:
93- search_key = _CELERY_TASK_INFO_PREFIX + owner_metadata .model_dump_task_key (
97+ search_key = _CELERY_TASK_PREFIX + owner_metadata .model_dump_task_key (
9498 task_uuid = WILDCARD
9599 )
96100
@@ -127,24 +131,28 @@ async def list_tasks(self, owner_metadata: OwnerMetadata) -> list[Task]:
127131 return tasks
128132
129133 async def remove_task (self , task_key : TaskKey ) -> None :
130- await self ._redis_client_sdk .redis .delete (_build_key (task_key ))
134+ await self ._redis_client_sdk .redis .delete (
135+ _build_redis_task_key (task_key ),
136+ )
131137
132138 async def set_task_progress (
133139 self , task_key : TaskKey , report : ProgressReport
134140 ) -> None :
135141 await handle_redis_returns_union_types (
136142 self ._redis_client_sdk .redis .hset (
137- name = _build_key (task_key ),
143+ name = _build_redis_task_key (task_key ),
138144 key = _CELERY_TASK_PROGRESS_KEY ,
139145 value = report .model_dump_json (),
140146 )
141147 )
142148
143149 async def task_exists (self , task_key : TaskKey ) -> bool :
144- n = await self ._redis_client_sdk .redis .exists (_build_key (task_key ))
150+ n = await self ._redis_client_sdk .redis .exists (
151+ _build_redis_task_key (task_key ),
152+ )
145153 assert isinstance (n , int ) # nosec
146154 return n > 0
147155
148156
149157if TYPE_CHECKING :
150- _ : type [TaskInfoStore ] = RedisTaskInfoStore
158+ _ : type [TaskStore ] = RedisTaskStore
0 commit comments