o
    hs                     @   s\  d dl Z d dlZd dlmZmZmZmZmZ d dl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 d dlmZ d d	lmZ d d
lmZ d dlmZmZmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z% ddl&m'Z' e (dZ)edZ*edZ+erddl,m-Z- G dd dee+e*f Z.nG dd dZ.G dd dej/Z0G dd de.e+e*f ej1Z2dS )    N)TYPE_CHECKINGAnyGenericOptionalTypeVar)SuspiciousOperation)models)FQ)CheckConstraint)timezone)import_string)gettext_lazy)	ParamSpec)DEFAULT_PRIORITYDEFAULT_QUEUE_NAMEMAX_PRIORITYMIN_PRIORITYResultStatusTask)get_exception_tracebackget_module_pathretry   )normalize_uuidzdjango_tasks.backends.databaseTP
TaskResultc                   @   s   e Zd ZdS )GenericBaseN)__name__
__module____qualname__ r#   r#   e/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/django_tasks/backends/database/models.pyr   #   s    r   c                   @   s   e Zd ZdZdd ZdS )r   z=
        https://code.djangoproject.com/ticket/33174
        c                 C   s   | S Nr#   )cls_r#   r#   r$   __class_getitem__-   s   zGenericBase.__class_getitem__N)r    r!   r"   __doc__r(   r#   r#   r#   r$   r   (   s    c                   @   sV   e Zd ZdddZdddZdddZddd	Zdd
dZe de	d fddZ
dS )DBTaskResultQuerySetreturnc                 C   s,   | j tjd tjddtjt dB S )z?
        Return tasks which are ready to be processed.
        statusN)	run_after)run_after__lte)filterr   NEWr   r
   r   nowselfr#   r#   r$   ready2   s
   zDBTaskResultQuerySet.readyc                 C      | j tjdS Nr,   )r0   r   	SUCCEEDEDr3   r#   r#   r$   	succeeded:      zDBTaskResultQuerySet.succeededc                 C   r6   r7   )r0   r   FAILEDr3   r#   r#   r$   failed=   r:   zDBTaskResultQuerySet.failedc                 C   r6   r7   )r0   r   RUNNINGr3   r#   r#   r$   running@   r:   zDBTaskResultQuerySet.runningc                 C   s   |   |  B S r%   )r<   r9   r3   r#   r#   r$   finishedC   s   zDBTaskResultQuerySet.finishedDBTaskResultc                 C   s   | j dd S )zJ
        Get a job, locking the row and accounting for deadlocks.
        T)skip_locked)select_for_updatefirstr3   r#   r#   r$   
get_lockedF   s   zDBTaskResultQuerySet.get_lockedN)r+   r*   )r    r!   r"   r5   r9   r<   r>   r?   r   r   rD   r#   r#   r#   r$   r*   1   s    




r*   c                   @   s  e Zd ZejdejddZeje	de
je
jedd e
jD dZeje	ddd	Zeje	d
ddZeje	dddZee	dZeje	dedZee	dZeje	dedZee	dZeje	dddZeje	ddddZee	dZ ee	dZ!e"# Z$G dd dZ%e&de'e(e)f fddZ*e&d-dd Z+e&de,fd!d"Z-e.d#d$d.d%d&Z/e. d'e0ddfd(d)Z1e. d*e2ddfd+d,Z3dS )/r@   TF)primary_keydefaulteditabler-   c                 c   s    | ]}t |V  qd S r%   )len).0valuer#   r#   r$   	<genexpr>U   s    zDBTaskResult.<genexpr>)choicesrF   
max_lengthzenqueued at)auto_now_addz
started at)nullzfinished atzargs kwargspriority)rF   z	task pathz
queue namezbackend namez	run afterzreturn valueN)rF   rO   zexception class path	tracebackc                   @   sv   e Zd Zed edjddgZedZedZe	j
dkr-eeeefdd	d
gZdS eeeefdd	dgZdS )zDBTaskResult.MetarP   r.   T)
nulls_lastzTask ResultzTask Results)   r   )priority__rangepriority_range)	conditionname)checkrW   N)r    r!   r"   r	   descorderingr'   verbose_nameverbose_name_pluraldjangoVERSIONr   r
   r   r   constraintsr#   r#   r#   r$   Metan   s    
r`   r+   c                 C   sH   t | j}t|tstd| j d| j d|j| j| j| j	| j
dS )NzTask z does not point to a Task ())rP   
queue_namer.   backend)r   	task_path
isinstancer   r   idusingrP   rb   r.   backend_name)r4   taskr#   r#   r$   ri      s   

zDBTaskResult.taskTaskResult[T]c                 C   s   ddl m} zt| j}W n ty   d }Y nw |t | | jt| jt	| j
 | j| j| j| jd | jd | jd
}t|d| t|d| jpId  t|d| j |S )	Nr   r   argskwargs)
	db_resultri   rf   r-   enqueued_at
started_atfinished_atrk   rl   rc   _exception_class
_traceback_return_value)rc   r   r   exception_class_pathImportErrorr   ri   r   rf   r   r-   rn   ro   rp   args_kwargsrh   object__setattr__rQ   return_value)r4   r   exception_classtask_resultr#   r#   r$   r{      s,   zDBTaskResult.task_resultc                 C   sL   z| j jW S  ty   Y nw z
| jddd W S  ty%   | j Y S w )N.r   )ri   rW   ru   rd   rsplit
IndexErrorr3   r#   r#   r$   	task_name   s   

zDBTaskResult.task_namer   )backoff_delayc                 C   s&   t j| _t | _| jddgd dS )z*
        Mark as job as being run
        r-   ro   update_fieldsN)r   r=   r-   r   r2   ro   saver3   r#   r#   r$   claim   s   
zDBTaskResult.claimry   c                 C   s8   t j| _t | _|| _d| _d| _| j	g dd d S )N r-   ry   rp   rt   rQ   r   )
r   r8   r-   r   r2   rp   ry   rt   rQ   r   )r4   ry   r#   r#   r$   set_succeeded   s   

zDBTaskResult.set_succeededexcc                 C   sD   t j| _t | _tt|| _t	|| _
d | _| jg dd d S )Nr   r   )r   r;   r-   r   r2   rp   r   typert   r   rQ   ry   r   )r4   r   r#   r#   r$   
set_failed   s   


zDBTaskResult.set_failed)r+   rj   )r+   N)4r    r!   r"   r   	UUIDFielduuiduuid4rf   	CharFieldr'   r   rL   r1   maxvaluesr-   DateTimeFieldrn   ro   rp   	JSONFieldrv   IntegerFieldr   rP   	TextFieldrd   r   rb   rh   r.   ry   rt   rQ   r*   
as_managerobjectsr`   propertyr   r   r   ri   r{   strr   r   r   r   r   BaseExceptionr   r#   r#   r#   r$   r@   N   sD    r@   )3loggingr   typingr   r   r   r   r   r]   django.core.exceptionsr   	django.dbr   django.db.modelsr	   r
   django.db.models.constraintsr   django.utilsr   django.utils.module_loadingr   django.utils.translationr   r'   typing_extensionsr   django_tasks.taskr   r   r   r   r   r   django_tasks.utilsr   r   r   utilsr   	getLoggerloggerr   r   rc   r   r   QuerySetr*   Modelr@   r#   r#   r#   r$   <module>   s0     
	 