o
    ÈMV4  ã                   @   sð  d dl mZmZ d dlmZ 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 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 ddlmZ ddlmZ ddlm Z m!Z! ddl"m#Z# e$ej%ej%ƒZ&dd„ Z'e#G dd„ dej(ƒƒZ)e#G dd„ dej(ƒƒZ*dedƒfdedƒfdedƒfdedƒfd ed!ƒffZ+e#G d"d#„ d#ej(ƒƒZ,e#G d$d%„ d%ej(ƒƒZ-G d&d'„ d'ej(ƒZ.e#G d(d)„ d)ej(ƒƒZ/ej0j1e.j2e/d*� ej3j1e.j2e/d*� G d+d,„ d,ej(ƒZ4e#G d-d.„ d.ej(ƒƒZ5d/S )0é    )Úabsolute_importÚunicode_literals)Ú	timedelta)ÚtimeÚmktimeÚgmtime)ÚMultipleObjectsReturnedÚValidationError)Úmodels)Úsignals)Úugettext_lazy)Úsettings)Ú	schedules)Ústates)Úheartbeat_expires)Útimedelta_secondsé   )Úmanagers)ÚPickledObjectField)ÚfromtimestampÚnow)Úpython_2_unicode_compatiblec                 C   s   | r
t | ƒ dd¡pdS )Nú Ú Ú*)ÚstrÚreplace)Úfield© r   úA/var/www/html/env/lib/python3.10/site-packages/djcelery/models.pyÚcronexp   s   r    c                   @   s¶   e Zd ZdZejedƒddd�Zejedƒdej	e
d�Zedd	d
d�Zejedƒdd�Zejedƒddd�Zejd
d
dd�Zeddd	d
d�Ze ¡ ZG dd„ dƒZdd„ Zdd„ Zd	S )ÚTaskMetazTask result/status.ztask idéÿ   T©Ú
max_lengthÚuniqueÚstateé2   )r$   ÚdefaultÚchoicesNF)Únullr(   Úeditablezdone at©Úauto_nowÚ	traceback©Úblankr*   ©r+   r(   Údb_index)Úcompressr*   r(   r+   c                   @   s    e Zd ZedƒZedƒZdZdS )zTaskMeta.Metaz
task stateztask statesÚcelery_taskmetaN)Ú__name__Ú
__module__Ú__qualname__Ú_Úverbose_nameÚverbose_name_pluralÚdb_tabler   r   r   r   ÚMeta1   s    r<   c                 C   s(   | j | j| j| j| j| jpi  d¡dœS )NÚchildren)Útask_idÚstatusÚresultÚ	date_doner.   r=   )r>   r?   r@   rA   r.   ÚmetaÚget©Úselfr   r   r   Úto_dict6   s   ûzTaskMeta.to_dictc                 C   ó
   d  | ¡S )Nz$<Task: {0.task_id} state={0.status}>©ÚformatrD   r   r   r   Ú__str__>   ó   
zTaskMeta.__str__)r5   r6   r7   Ú__doc__r
   Ú	CharFieldr8   r>   r   ÚPENDINGÚTASK_STATE_CHOICESr?   r   r@   ÚDateTimeFieldrA   Ú	TextFieldr.   ÚBooleanFieldÚhiddenrB   r   ÚTaskManagerÚobjectsr<   rF   rJ   r   r   r   r   r!      s$    þÿr!   c                   @   sr   e Zd ZdZejedƒddd�Zeƒ Z	ej
edƒdd�Zejdddd	�Ze ¡ ZG d
d„ dƒZdd„ Zdd„ ZdS )ÚTaskSetMetazTaskSet resultzgroup idr"   Tr#   z
created atr,   Fr1   c                   @   s$   e Zd ZdZedƒZedƒZdZdS )zTaskSetMeta.MetaúModel meta-data.zsaved group resultzsaved group resultsÚcelery_tasksetmetaN)r5   r6   r7   rL   r8   r9   r:   r;   r   r   r   r   r<   L   s
    r<   c                 C   s   | j | j| jdœS )N©Ú
taskset_idr@   rA   rY   rD   r   r   r   rF   R   s   þzTaskSetMeta.to_dictc                 C   rG   )Nz<TaskSet: {0.taskset_id}>rH   rD   r   r   r   rJ   W   rK   zTaskSetMeta.__str__N)r5   r6   r7   rL   r
   rM   r8   rZ   r   r@   rP   rA   rR   rS   r   ÚTaskSetManagerrU   r<   rF   rJ   r   r   r   r   rV   B   s    rV   ÚdaysÚDaysÚhoursÚHoursÚminutesÚMinutesÚsecondsÚSecondsÚmicrosecondsÚMicrosecondsc                   @   sn   e Zd Zejedƒdd�Zejedƒded�Z	G dd„ dƒZ
ed	d
„ ƒZeddd„ƒZdd„ Zedd„ ƒZdS )ÚIntervalScheduleÚeveryF©r*   Úperiodé   )r$   r)   c                   @   s$   e Zd ZedƒZedƒZddgZdS )zIntervalSchedule.MetaÚintervalÚ	intervalsri   rg   N©r5   r6   r7   r8   r9   r:   Úorderingr   r   r   r   r<   i   ó    r<   c                 C   s   t  tdi | j| ji¤Ž¡S )Nr   )r   Úscheduler   ri   rg   rD   r   r   r   rp   n   s   zIntervalSchedule.schedulerb   c                 C   sn   t |jƒ}z	| jj||d�W S  | jy   | ||d� Y S  ty6   | jj||d� ¡  | ||d� Y S w )N)rg   ri   )r   Ú	run_everyrU   rC   ÚDoesNotExistr   ÚfilterÚdelete)Úclsrp   ri   rg   r   r   r   Úfrom_scheduler   s   
þzIntervalSchedule.from_schedulec                 C   s&   | j dkrtdƒ | ¡S tdƒ | ¡S )Nr   zevery {0.period_singular}zevery {0.every:d} {0.period})rg   r8   rI   rD   r   r   r   rJ   }   s   
zIntervalSchedule.__str__c                 C   s   | j d d… S )Néÿÿÿÿ)ri   rD   r   r   r   Úperiod_singular‚   ó   z IntervalSchedule.period_singularN)rb   )r5   r6   r7   r
   ÚIntegerFieldr8   rg   rM   ÚPERIOD_CHOICESri   r<   Úpropertyrp   Úclassmethodrv   rJ   rx   r   r   r   r   rf   b   s    
ÿ

rf   c                   @   sž   e Zd Zejedƒddd�Zejedƒddd�Zejedƒddd�Zejedƒddd�Z	ejedƒddd�Z
G d	d
„ d
ƒZdd„ Zedd„ ƒZedd„ ƒZdS )ÚCrontabScheduleÚminuteé@   r   )r$   r(   Úhourzday of weekzday of monthzmonth of yearc                   @   s$   e Zd ZedƒZedƒZg d¢ZdS )zCrontabSchedule.MetaÚcrontabÚcrontabs)Úmonth_of_yearÚday_of_monthÚday_of_weekr�   r   Nrm   r   r   r   r   r<   •   ro   r<   c                 C   s0   d  t| jƒt| jƒt| jƒt| jƒt| jƒ¡S )Nz!{0} {1} {2} {3} {4} (m/h/d/dM/MY))rI   r    r   r�   r†   r…   r„   rD   r   r   r   rJ   ›   s   ûzCrontabSchedule.__str__c                 C   s   t j| j| j| j| j| jd�S )N©r   r�   r†   r…   r„   )r   r‚   r   r�   r†   r…   r„   rD   r   r   r   rp   ¤   s   üzCrontabSchedule.schedulec                 C   s†   |j |j|j|j|jdœ}z
| jjdi |¤ŽW S  | jy(   | di |¤Ž Y S  tyB   | jj	di |¤Ž 
¡  | di |¤Ž Y S w )Nr‡   r   )Ú_orig_minuteÚ
_orig_hourÚ_orig_day_of_weekÚ_orig_day_of_monthÚ_orig_month_of_yearrU   rC   rr   r   rs   rt   )ru   rp   Úspecr   r   r   rv   ¬   s   üþzCrontabSchedule.from_scheduleN)r5   r6   r7   r
   rM   r8   r   r�   r†   r…   r„   r<   rJ   r|   rp   r}   rv   r   r   r   r   r~   ‡   s$    
ÿ
ÿ
ÿ	
r~   c                   @   sH   e Zd Zejdddd�Zejdd�Ze 	¡ Z
edd„ ƒZedd	„ ƒZd
S )ÚPeriodicTasksr   T)r(   Úprimary_keyr%   Frh   c                 K   s$   |j s| jjddtƒ id� d S d S )Nr   Úlast_update)ÚidentÚdefaults)Ú
no_changesrU   Úupdate_or_creater   )ru   ÚinstanceÚkwargsr   r   r   ÚchangedÂ   s
   
ÿÿzPeriodicTasks.changedc                 C   s*   z	| j jdd�jW S  | jy   Y d S w )Nr   )r‘   )rU   rC   r�   rr   )ru   r   r   r   Úlast_changeÈ   s
   ÿzPeriodicTasks.last_changeN)r5   r6   r7   r
   ÚSmallIntegerFieldr‘   rP   r�   r   ÚExtendedManagerrU   r}   r—   r˜   r   r   r   r   rŽ   ¼   s    
rŽ   c                       sœ  e Zd Zejedƒddedƒd�Zejedƒdd�Zeje	ddedƒd	�Z
ejedded
ƒedƒd�Zejedƒddedƒd�Zejedƒddedƒd�Zejedƒddddedƒd�Zejedƒddddd�Zejedƒddddd�Zejedƒddd�Zejedƒdd�Zejdddddd �Zejd!dd"�Zejdd#�Zejed$ƒdd%�Ze ¡ ZdZG d&d'„ d'ƒZ ‡ fd(d)„Z!‡ fd*d+„Z"d,d-„ Z#e$d.d/„ ƒZ%‡  Z&S )0ÚPeriodicTaskÚnameéÈ   TzUseful description)r$   r%   Ú	help_textz	task name)r$   rk   )r*   r0   r9   r‚   zUse one of interval/crontab)r*   r0   r9   rž   Ú	Argumentsz[]z!JSON encoded positional arguments)r0   r(   rž   úKeyword argumentsz{}zJSON encoded keyword argumentsÚqueueNzQueue defined in CELERY_QUEUES)r$   r0   r*   r(   rž   Úexchange)r$   r0   r*   r(   zrouting keyÚexpiresr/   Úenabled©r(   F)r-   Úauto_now_addr+   r0   r*   r   )r(   r+   r,   Údescription)r0   c                   @   s   e Zd ZedƒZedƒZdS )zPeriodicTask.Metazperiodic taskzperiodic tasksN)r5   r6   r7   r8   r9   r:   r   r   r   r   r<     s    r<   c                    sR   t t| ƒj|i |¤Ž | js| jstddgiƒ‚| jr%| jr'tddgiƒ‚d S d S )Nrk   z'One of interval or crontab must be set.r‚   z+Only one of interval or crontab must be set)Úsuperr›   Úvalidate_uniquerk   r‚   r	   ©rE   Úargsr–   ©Ú	__class__r   r   r©     s   ÿÿÿzPeriodicTask.validate_uniquec                    sJ   | j pd | _ | jp
d | _| jpd | _| jsd | _tt| ƒj|i |¤Ž d S ©N)r¢   Úrouting_keyr¡   r¤   Úlast_run_atr¨   r›   Úsaverª   r¬   r   r   r±     s   zPeriodicTask.savec                 C   s"   d}| j rd}| jrd}| | ¡S )Nz{0.name}: {{no schedule}}z{0.name}: {0.interval}z{0.name}: {0.crontab})rk   r‚   rI   )rE   Úfmtr   r   r   rJ     s   
zPeriodicTask.__str__c                 C   s    | j r| j jS | jr| jjS d S r®   )rk   rp   r‚   rD   r   r   r   rp   !  s
   ÿzPeriodicTask.schedule)'r5   r6   r7   r
   rM   r8   rœ   ÚtaskÚ
ForeignKeyrf   rk   r~   r‚   rQ   r«   r–   r¡   r¢   r¯   rP   r£   rR   r¤   r°   ÚPositiveIntegerFieldÚtotal_run_countÚdate_changedr§   r   ÚPeriodicTaskManagerrU   r“   r<   r©   r±   rJ   r|   rp   Ú__classcell__r   r   r¬   r   r›   Ð   sn    
þ
þþ
þ
þþÿÿ
ÿÿþÿ	r›   )Úsenderc                   @   sn   e Zd Zejedƒddd�Zejedƒddd�Ze	 
¡ ZG dd„ dƒZd	d
„ Zdd„ Zdd„ Zedd„ ƒZdS )ÚWorkerStateÚhostnamer"   Tr#   zlast heartbeat)r*   r2   c                   @   ó*   e Zd ZdZedƒZedƒZdZdgZdS )zWorkerState.MetarW   ÚworkerÚworkersÚlast_heartbeatz-last_heartbeatN©	r5   r6   r7   rL   r8   r9   r:   Úget_latest_byrn   r   r   r   r   r<   3  ó    
r<   c                 C   s   | j S r®   )r¼   rD   r   r   r   rJ   :  s   zWorkerState.__str__c                 C   rG   )Nz<WorkerState: {0.hostname}>rH   rD   r   r   r   Ú__repr__=  rK   zWorkerState.__repr__c                 C   s.   | j rtjrttƒ ƒntƒ }|t| jƒk S dS )NF)rÀ   r   ÚUSE_TZr   r   r   r   Úheartbeat_timestamp)rE   Ú	timestampr   r   r   Úis_alive@  s   zWorkerState.is_alivec                 C   s   t | j ¡ ƒS r®   )r   rÀ   Ú	timetuplerD   r   r   r   rÆ   G  ry   zWorkerState.heartbeat_timestampN)r5   r6   r7   r
   rM   r8   r¼   rP   rÀ   r   rš   rU   r<   rJ   rÄ   rÈ   r|   rÆ   r   r   r   r   r»   ,  s    ÿr»   c                       sN  e Zd Zejedƒdedd�Zejedƒddd�Zejedƒd	d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j
edƒ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jedƒdedƒd�Zejedƒdd�Zejededƒd�Zejdddd�Ze ¡ ZG dd„ dƒZ‡ fd d!„Z d"d#„ Z!d$d%„ Z"‡  Z#S )&Ú	TaskStater&   r€   T)r$   r)   r2   ÚUUIDé$   r#   rœ   r�   )r$   r*   r2   zevent received at)r2   rŸ   rh   r    ÚETAr£   r@   r.   zexecution timezin seconds if task succeeded)r*   rž   znumber of retriesr   r¥   r¾   )r*   r9   Fr1   c                   @   r½   )zTaskState.MetarW   r³   ÚtasksÚtstampz-tstampNrÁ   r   r   r   r   r<   h  rÃ   r<   c                    sv   | j d urttdt| j  ¡ ƒ| j jf ƒƒ| _ | jd ur.ttdt| j ¡ ƒ| jjf ƒƒ| _tt| ƒj	|i |¤Ž d S )Nz%d.%s)
Úetar   Úfloatr   rÉ   Úmicrosecondr£   r¨   rÊ   r±   rª   r¬   r   r   r±   o  s   
ÿ
ÿzTaskState.savec                 C   s.   | j pd}d | |¡}| jr|d | ¡7 }|S )NÚUNKNOWNz!{0.state:<10} {0.task_id:<36} {1}z eta:{0.eta})rœ   rI   rÐ   )rE   rœ   Úsr   r   r   rJ   z  s
   
zTaskState.__str__c                 C   s   d  | | jpd¡S )Nz5<TaskState: {0.state} {1}[{0.task_id}] ts:{0.tstamp}>rÓ   )rI   rœ   rD   r   r   r   rÄ   �  s   
ÿzTaskState.__repr__)$r5   r6   r7   r
   rM   r8   rO   r&   r>   rœ   rP   rÏ   rQ   r«   r–   rÐ   r£   r@   r.   Ú
FloatFieldÚruntimerz   Úretriesr´   r»   r¾   rR   rS   r   ÚTaskStateManagerrU   r<   r±   rJ   rÄ   r¹   r   r   r¬   r   rÊ   L  s:    ÿÿþ
ÿrÊ   N)6Ú
__future__r   r   Údatetimer   r   r   r   Údjango.core.exceptionsr   r	   Ú	django.dbr
   Údjango.db.modelsr   Údjango.utils.translationr   r8   Údjango.confr   Úceleryr   r   Úcelery.events.stater   Úcelery.utils.timeutilsr   r   r   Úpicklefieldr   Úutilsr   r   Úcompatr   ÚzipÚ
ALL_STATESrO   r    ÚModelr!   rV   r{   rf   r~   rŽ   r›   Ú
pre_deleteÚconnectr—   Úpre_saver»   rÊ   r   r   r   r   Ú<module>   sP    $




ü$4W 