a
    Cgs                     @   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rd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#   d/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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                   @   sj   e Zd Zd dddZd dddZd dddZd ddd	Zd dd
dZe e	d d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)Zrun_after__lte)filterr   NEWr   r
   r   nowselfr#   r#   r$   ready2   s
    zDBTaskResultQuerySet.readyc                 C   s   | j tjdS Nr-   )r0   r   	SUCCEEDEDr3   r#   r#   r$   	succeeded:   s    zDBTaskResultQuerySet.succeededc                 C   s   | j tjdS r6   )r0   r   FAILEDr3   r#   r#   r$   failed=   s    zDBTaskResultQuerySet.failedc                 C   s   | j tjdS r6   )r0   r   RUNNINGr3   r#   r#   r$   running@   s    zDBTaskResultQuerySet.runningc                 C   s   |   |  B S r%   )r:   r8   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)Zskip_locked)Zselect_for_updatefirstr3   r#   r#   r$   
get_lockedF   s    zDBTaskResultQuerySet.get_lockedN)r    r!   r"   r5   r8   r:   r<   r=   r   r   r@   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&e'e(e)f dddZ*e&dddd Z+e&e,dd!d"Z-e.d#d$ddd%d&Z/e. e0dd'd(d)Z1e. e2dd*d+d,Z3dS )-r>   TF)Zprimary_keydefaulteditabler.   c                 c   s   | ]}t |V  qd S r%   )len).0valuer#   r#   r$   	<genexpr>U       zDBTaskResult.<genexpr>)choicesrA   
max_lengthzenqueued at)Zauto_now_addz
started at)nullzfinished atzargs kwargspriority)rA   z	task pathz
queue namezbackend namez	run afterzreturn valueN)rA   rJ   zexception class path	tracebackc                   @   st   e Zd Zed edjddgZedZedZe	j
dkrXeeeefdd	d
gZneeeefdd	dgZdS )zDBTaskResult.MetarK   r/   T)Z
nulls_lastzTask ResultzTask Results)   r   )Zpriority__rangeZpriority_range)	conditionname)checkrO   N)r    r!   r"   r	   descZorderingr'   Zverbose_nameZverbose_name_pluraldjangoVERSIONr   r
   r   r   constraintsr#   r#   r#   r$   Metan   s   
rU   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 ())rK   
queue_namer/   backend)r   	task_path
isinstancer   r   idZusingrK   rW   r/   backend_name)r4   taskr#   r#   r$   r]      s    

zDBTaskResult.taskzTaskResult[T]c                 C   s   ddl m} zt| j}W n ty0   d }Y n0 |t | | jt| jt	| j
 | j| j| j| jd | jd | jd
}t|d| t|d| jpd  t|d| j |S )	Nr   r   argskwargs)
Z	db_resultr]   r[   r.   enqueued_at
started_atfinished_atr^   r_   rX   Z_exception_classZ
_tracebackZ_return_value)rX   r   r   exception_class_pathImportErrorr   r]   r   r[   r   r.   r`   ra   rb   args_kwargsr\   object__setattr__rL   return_value)r4   r   Zexception_classtask_resultr#   r#   r$   ri      s*    
zDBTaskResult.task_resultc                 C   sP   z
| j jW S  ty   Y n0 z| jddd W S  tyJ   | j Y S 0 d S )N.r   )r]   rO   rd   rY   rsplit
IndexErrorr3   r#   r#   r$   	task_name   s    
zDBTaskResult.task_namer   )Zbackoff_delayc                 C   s&   t j| _t | _| jddgd dS )z*
        Mark as job as being run
        r.   ra   Zupdate_fieldsN)r   r;   r.   r   r2   ra   saver3   r#   r#   r$   claim   s    
zDBTaskResult.claim)rh   r,   c                 C   s8   t j| _t | _|| _d| _d| _| j	g dd d S )N r.   rh   rb   rc   rL   rn   )
r   r7   r.   r   r2   rb   rh   rc   rL   ro   )r4   rh   r#   r#   r$   set_succeeded   s    
zDBTaskResult.set_succeeded)excr,   c                 C   sD   t j| _t | _tt|| _t	|| _
d | _| jg dd d S )Nrr   rn   )r   r9   r.   r   r2   rb   r   typerc   r   rL   rh   ro   )r4   rt   r#   r#   r$   
set_failed   s    

zDBTaskResult.set_failed)4r    r!   r"   r   Z	UUIDFielduuiduuid4r[   Z	CharFieldr'   r   rH   r1   maxvaluesr.   ZDateTimeFieldr`   ra   rb   Z	JSONFieldre   ZIntegerFieldr   rK   Z	TextFieldrY   r   rW   r\   r/   rh   rc   rL   r*   Z
as_managerZobjectsrU   propertyr   r   r   r]   ri   strrm   r   rp   r   rs   BaseExceptionrv   r#   r#   r#   r$   r>   N   sB   r>   )3loggingrw   typingr   r   r   r   r   rR   Zdjango.core.exceptionsr   Z	django.dbr   Zdjango.db.modelsr	   r
   Zdjango.db.models.constraintsr   Zdjango.utilsr   Zdjango.utils.module_loadingr   Zdjango.utils.translationr   r'   Ztyping_extensionsr   Zdjango_tasks.taskr   r   r   r   r   r   Zdjango_tasks.utilsr   r   r   utilsr   	getLoggerloggerr   r   rX   r   r   ZQuerySetr*   ZModelr>   r#   r#   r#   r$   <module>   s.    
	