o
    hH!                     @   s&  d dl mZmZmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZmZ d	d
lm Z  d	dl!m"Z"m#Z# e	rdd	dl$m%Z% dZ&dZ'dZ(dZ)d Z*h dZ+G dd deZ,edZ-edZ.eddG dd dee.e-f Z/edee.e-f de/e.e-f fddZ0ee*e'e&ddde1d e2d!e2d"ee3 deee.e-f ge/e.e-f f f
d#dZ0	d'e*e'e&dddeee.e-f  de1d e2d!e2d"ee3 dee/e.e-f eee.e-f ge/e.e-f f f fd$dZ0eddG d%d& d&ee- Z4dS )(    )	dataclassfieldreplace)datetime	timedelta)iscoroutinefunction)TYPE_CHECKINGAnyCallableDictGenericOptionalTypeTypeVarUnioncastoverload)async_to_syncsync_to_async)TextChoices)gettext_lazy)	ParamSpecSelf   )ResultDoesNotExist)get_module_pathjson_normalize)BaseTaskBackenddefaultid   >   status
_traceback
started_atenqueued_atfinished_at_return_value_exception_classc                   @   s<   e Zd ZdedfZdedfZdedfZdedfZd	S )
ResultStatusNEWNewRUNNINGRunningFAILEDFailed	SUCCEEDED	SucceededN)__name__
__module____qualname___r(   r*   r,   r.    r4   r4   Q/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/django_tasks/task.pyr'   1   s
    r'   TPT)frozenc                   @   sl  e Zd ZU eed< 	 eeef ed< 	 eed< 	 e	Z
eed< 	 dZee ed< 	 dZee ed< 	 d%d	d
ZedefddZddddddee dee deeeef  dee def
ddZdejdejddfddZdejdejddfddZdeddfddZdeddfddZdejdejdefddZdejdejdefddZd&d!d"Zedefd#d$Z dS )'Taskpriorityfuncbackend
queue_nameN	run_afterenqueue_on_commitreturnc                 C   s   |   |  d S N)get_backendvalidate_taskselfr4   r4   r5   __post_init__S   s   zTask.__post_init__c                 C   s   | j jS )z,
        An identifier for the task
        )r;   r0   rD   r4   r4   r5   nameV   s   z	Task.name)r:   r=   r>   r<   c                C   sT   i }|dur
||d< |dur||d< |dur||d< |dur"||d< t | fi |S )z:
        Create a new task with modified defaults
        Nr:   r=   r>   r<   )r   )rE   r:   r=   r>   r<   changesr4   r4   r5   using]   s   z
Task.usingargskwargszTaskResult[T]c                 O   s   |   | t|t|S )z2
        Queue up the task to be executed
        )rB   enqueuer   rE   rJ   rK   r4   r4   r5   rL   v   s   zTask.enqueuec                    s"   |   | t|t|I dH S )zH
        Queue up a task function (or coroutine) to be executed
        N)rB   aenqueuer   rM   r4   r4   r5   rN   ~   s   
zTask.aenqueue	result_idc                 C   s$   |   |}|jj| jkrt|S )
        Retrieve the result for a task of this type by its id (if one exists).
        If one doesn't, or is the wrong type, raises ResultDoesNotExist.
        )rB   
get_resulttaskr;   r   rE   rO   resultr4   r4   r5   rQ      s   zTask.get_resultc                    s,   |   |I dH }|jj| jkrt|S )rP   N)rB   aget_resultrR   r;   r   rS   r4   r4   r5   rU      s
   zTask.aget_resultc                 O   s.   t | jrt| j|i |S | j|i |S rA   )r   r;   r   rM   r4   r4   r5   call   s   
z	Task.callc                    s<   t | jr| j|i |I d H S t| j|i |I d H S rA   )r   r;   r   rM   r4   r4   r5   acall   s   
z
Task.acallr   c                 C   s   ddl m} || j S )Nr   tasks) rY   r<   )rE   rY   r4   r4   r5   rB      s   
zTask.get_backendc                 C   s
   t | jS rA   )r   r;   rD   r4   r4   r5   module_path   s   
zTask.module_pathr@   N)r@   r   )!r0   r1   r2   int__annotations__r
   r7   r6   strDEFAULT_QUEUE_NAMEr=   r>   r   r   r?   boolrF   propertyrG   r   r   r   rI   rJ   rK   rL   rN   rQ   rU   rV   rW   rB   r[   r4   r4   r4   r5   r9   <   sP   
 
	

r9   functionr@   c                C      d S rA   r4   )rc   r4   r4   r5   rR      s   rR   Nr:   r=   r<   r?   r:   r=   r<   r?   c                 C   rd   rA   r4   re   r4   r4   r5   rR      s   c                   sJ   ddl m dtttf dtttf f fdd}| r#|| S |S )z,
    A decorator used to create a task.
    r   rX   fr@   c                    s     j |  dS )N)r:   r;   r=   r<   r?   )
task_class)rf   r<   r?   r:   r=   rY   r4   r5   wrapper   s   ztask.<locals>.wrapper)rZ   rY   r
   r7   r6   r9   )rc   r:   r=   r<   r?   ri   r4   rh   r5   rR      s
   .	c                   @   s4  e Zd ZU eed< 	 eed< 	 eed< 	 ee ed< 	 ee ed< 	 ee ed< 	 e	ed< 	 e
eef ed< 	 eed	< 	 ed
ddZeee  ed< ed
ddZee ed< ed
ddZee ed< edee fddZedeee  fddZedee fddZedefddZdddZdddZdS )
TaskResultrR   idr    r#   r"   r$   rJ   rK   r<   FN)initr   r&   r!   r%   r@   c                 C   s   | j stdtt| jS )z
        Get the return value of the task.

        If the task didn't succeed, an exception is raised.
        This is to distinguish against the task returning None.
        Task has not finished yet)is_finished
ValueErrorr   r6   r%   rD   r4   r4   r5   return_value  s   zTaskResult.return_valuec                 C      | j std| jS )z)The exception raised by the task functionrm   )rn   ro   r&   rD   r4   r4   r5   exception_class     zTaskResult.exception_classc                 C   rq   )z1The traceback of the exception if the task failedrm   )rn   ro   r!   rD   r4   r4   r5   	traceback  rs   zTaskResult.tracebackc                 C   s   | j tjtjhv S )zHas the task finished?)r    r'   r,   r.   rD   r4   r4   r5   rn      s   zTaskResult.is_finishedc                 C   s4   | j  | j}tD ]}t| |t|| qdS zA
        Reload the cached task data from the task store
        N)rR   rB   rQ   rk   TASK_REFRESH_ATTRSobject__setattr__getattrrE   refreshed_taskattrr4   r4   r5   refresh%  s   zTaskResult.refreshc                    s<   | j  | jI dH }tD ]}t| |t|| qdS ru   )rR   rB   rU   rk   rv   rw   rx   ry   rz   r4   r4   r5   arefresh.  s
   zTaskResult.arefreshr\   )r0   r1   r2   r9   r^   r_   r'   r   r   listr   r	   r   r&   r   BaseExceptionr!   r%   r6   rb   rp   rr   rt   ra   rn   r}   r~   r4   r4   r4   r5   rj      s@   
 
	rj   rA   )5dataclassesr   r   r   r   r   inspectr   typingr   r	   r
   r   r   r   r   r   r   r   r   asgiref.syncr   r   django.db.models.enumsr   django.utils.translationr   r3   typing_extensionsr   r   
exceptionsr   utilsr   r   backends.baser   DEFAULT_TASK_BACKEND_ALIASr`   MIN_PRIORITYMAX_PRIORITYDEFAULT_PRIORITYrv   r'   r6   r7   r9   rR   r]   r_   ra   rj   r4   r4   r4   r5   <module>   s|    4w$,
