
    @i
                     h    d Z ddlmZmZmZmZmZ ddlmZ erddl	m
Z
  G d d      Z G d d      Zy	)
z3
Task registry for managing registered cron tasks.
    )DictTypeListOptionalTYPE_CHECKING)TaskNotFoundError)CronTaskc                        e Zd ZdZdZdZdZdZy)ExecutionPatternz"Execution patterns for cron tasks.standardalwaysrerun_on_failurerate_limitedN)__name__
__module____qualname____doc__STANDARDALWAYSRERUN_ON_FAILURERATE_LIMITED     Q/home/cursorai/projects/django-cronjob-utils/src/django_cronjob_utils/registry.pyr   r      s    ,HF)!Lr   r   c                      e Zd ZU dZi Zeeed   f   ed<   i Z	eeef   ed<   i Z
eeef   ed<   edededed   fd	       Zeded
ed   fd       Zeded
ed   fd       Zed
ee   fd       Zeded
efd       Zeded
efd       Zy)TaskRegistryz$Centralized registry for cron tasks.r	   _tasks_codes_configsnamecode
task_classc                    || j                   v rt        d| d      || j                  v rt        d| d      || j                   |<   || j                  |<   || j                  |<   ||_        ||_        |j                  dt        j                        |_	        |j                  dd      |_
        |j                  dd      |_        |j                  d	d
      |_        |j                  d      |_        y)zRegister a task.Task 'z' is already registeredTask code 'execution_patternretry_on_failureFmax_retriesr   retry_delayi,  timeoutN)r   
ValueErrorr   r   	task_name	task_codegetr   r   r&   r'   r(   r)   r*   )clsr    r!   r"   configs        r   registerzTaskRegistry.register   s     3::vdV+BCDD3::{4&0GHII%

4

4#T  $
#
'-zz2EGWG`G`'a
$&,jj1CU&K
#!'M1!=
!'M3!?
#ZZ	2
r   returnc           	          || j                   vr8t        d| ddj                  | j                   j                                      | j                   |   S )zGet task class by name.r$   z' not found. Available tasks: z, )r   r   joinkeysr/   r    s     r   get_taskzTaskRegistry.get_task1   sU     szz!#fTF2PQUQZQZ[^[e[e[j[j[lQmPn$oppzz$r   c                 |    || j                   vrt        d| d      | j                   |   }| j                  |      S )zGet task class by code.r%   z' not found)r   r   r7   )r/   r!   r    s      r   get_task_by_codezTaskRegistry.get_task_by_code8   sA     szz!#k${$CDDzz$||D!!r   c                 H    t        | j                  j                               S )zList all registered task names.)listr   r5   )r/   s    r   
list_taskszTaskRegistry.list_tasks@   s     CJJOO%&&r   c                 :    | j                   j                  |i       S )zGet configuration for a task.)r   r.   r6   s     r   
get_configzTaskRegistry.get_configE   s     ||b))r   c                     || j                   v S )zCheck if a task is registered.)r   r6   s     r   is_registeredzTaskRegistry.is_registeredJ   s     szz!!r   N)r   r   r   r   r   r   strr   __annotations__r   r   dictclassmethodr1   r7   r9   r   r<   r>   boolr@   r   r   r   r   r      s   .*,FDd:&&',FDcN "Hd39o"3C 3s 3Z8H 3 3(  C  D$4     "C "D,< " " '49 ' ' *c *d * * " " " "r   r   N)r   typingr   r   r   r   r   django_cronjob_utils.exceptionsr   django_cronjob_utils.baser	   r   r   r   r   r   <module>rI      s/    = < =2" "8" 8"r   