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