66from models_library .progress_bar import ProgressReport
77from servicelib .redis ._client import RedisClientSDK
88
9- from ..models import TaskContext , TaskID , TaskMetadata , TaskUUID , build_task_id_prefix
9+ from ..models import (
10+ TaskContext ,
11+ TaskID ,
12+ TaskMetadata ,
13+ TaskUUID ,
14+ build_task_id ,
15+ build_task_id_prefix ,
16+ )
1017
1118_CELERY_TASK_INFO_PREFIX : Final [str ] = "celery-task-info-"
1219_CELERY_TASK_ID_KEY_ENCODING = "utf-8"
@@ -26,17 +33,39 @@ class RedisTaskInfoStore:
2633 def __init__ (self , redis_client_sdk : RedisClientSDK ) -> None :
2734 self ._redis_client_sdk = redis_client_sdk
2835
29- async def exists (self , task_id : TaskID ) -> bool :
30- n = await self ._redis_client_sdk .redis .exists (_build_key (task_id ))
36+ async def create (
37+ self ,
38+ task_context : TaskContext ,
39+ task_uuid : TaskUUID ,
40+ task_metadata : TaskMetadata ,
41+ expiry : timedelta ,
42+ ) -> None :
43+ task_key = _build_key (build_task_id (task_context , task_uuid ))
44+ await self ._redis_client_sdk .redis .hset (
45+ name = task_key ,
46+ key = _CELERY_TASK_METADATA_KEY ,
47+ value = task_metadata .model_dump_json (),
48+ ) # type: ignore
49+ await self ._redis_client_sdk .redis .expire (
50+ task_key ,
51+ expiry ,
52+ )
53+
54+ async def exists (self , task_context : TaskContext , task_uuid : TaskUUID ) -> bool :
55+ n = await self ._redis_client_sdk .redis .exists (_build_key (build_task_id (task_context , task_uuid ))) # type: ignore
3156 assert isinstance (n , int ) # nosec
3257 return n > 0
3358
34- async def get_metadata (self , task_id : TaskID ) -> TaskMetadata | None :
35- result = await self ._redis_client_sdk .redis .hget (_build_key (task_id ), _CELERY_TASK_METADATA_KEY ) # type: ignore
59+ async def get_metadata (
60+ self , task_context : TaskContext , task_uuid : TaskUUID
61+ ) -> TaskMetadata | None :
62+ result = await self ._redis_client_sdk .redis .hget (_build_key (build_task_id (task_context , task_uuid )), _CELERY_TASK_METADATA_KEY ) # type: ignore
3663 return TaskMetadata .model_validate_json (result ) if result else None
3764
38- async def get_progress (self , task_id : TaskID ) -> ProgressReport | None :
39- result = await self ._redis_client_sdk .redis .hget (_build_key (task_id ), _CELERY_TASK_PROGRESS_KEY ) # type: ignore
65+ async def get_progress (
66+ self , task_context : TaskContext , task_uuid : TaskUUID
67+ ) -> ProgressReport | None :
68+ result = await self ._redis_client_sdk .redis .hget (_build_key (build_task_id (task_context , task_uuid )), _CELERY_TASK_PROGRESS_KEY ) # type: ignore
4069 return ProgressReport .model_validate_json (result ) if result else None
4170
4271 async def get_uuids (self , task_context : TaskContext ) -> set [TaskUUID ]:
@@ -62,19 +91,6 @@ async def remove(self, task_id: TaskID) -> None:
6291 await self ._redis_client_sdk .redis .delete (_build_key (task_id ))
6392 AsyncResult (task_id ).forget ()
6493
65- async def set_metadata (
66- self , task_id : TaskID , task_metadata : TaskMetadata , expiry : timedelta
67- ) -> None :
68- await self ._redis_client_sdk .redis .hset (
69- name = _build_key (task_id ),
70- key = _CELERY_TASK_METADATA_KEY ,
71- value = task_metadata .model_dump_json (),
72- ) # type: ignore
73- await self ._redis_client_sdk .redis .expire (
74- _build_key (task_id ),
75- expiry ,
76- )
77-
7894 async def set_progress (self , task_id : TaskID , report : ProgressReport ) -> None :
7995 await self ._redis_client_sdk .redis .hset (
8096 name = _build_key (task_id ),
0 commit comments