o
    ¾ò³Tá  ã                   @   s  d dl mZ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 d d
lmZ ddlmZmZ ddlmZmZ dZee
jgƒZeededd�ƒZ eededd�ƒZ!eededd�ƒZ"eg d¢ƒZ#ee$ƒZ%e%j&Z&dd„ Z'G dd„ deƒZ(dS )é    )Úabsolute_importÚunicode_literals)Údefaultdict)ÚdatetimeÚ	timedelta)Úsettings)Ústates)ÚTask)ÚPolaroid)Ú	monotonic)Ú
get_logger)Úmaybe_iso8601é   )ÚWorkerStateÚ	TaskState)ÚfromtimestampÚmaybe_make_awareé<   ÚCELERYCAM_EXPIRE_SUCCESS)ÚdaysÚCELERYCAM_EXPIRE_ERRORé   ÚCELERYCAM_EXPIRE_PENDINGé   )ÚnameÚargsÚkwargsÚetac                 C   s   t t| ƒƒS )z)Event timestamps uses the local timezone.)r   r   )Úsecs© r   úC/var/www/html/env/lib/python3.10/site-packages/djcelery/snapshot.pyÚaware_tstamp"   s   r!   c                       st   e Zd ZeZeZdZeZee	e
jee
jeiZ‡ fdd„Zdd„ Zdd„ Zdd	d
„Zdd„ Zddd„Zdd„ Z‡  ZS )ÚCameraTc                    s(   t t| ƒj|i |¤Ž tdd„ ƒ| _d S )Nc                   S   s   dS )N)NNr   r   r   r   r    Ú<lambda>5   s    z!Camera.__init__.<locals>.<lambda>)Úsuperr"   Ú__init__r   Ú_last_worker_write)Úselfr   r   ©Ú	__class__r   r    r%   3   s   zCamera.__init__c                 C   sB   z|j d }W n
 ty   Y d S w ttddƒrt|ƒS t |¡S )NéÿÿÿÿÚUSE_TZF)Ú
heartbeatsÚ
IndexErrorÚgetattrr   r!   r   r   )r'   ÚworkerÚ	heartbeatr   r   r    Úget_heartbeat7   s   ÿ
zCamera.get_heartbeatc                 C   sZ   |\}}| j | \}}|rtƒ | | jkr+| jjj|d|  |¡id�}tƒ |f| j |< |S )NÚlast_heartbeat)ÚhostnameÚdefaults)r&   r   Úworker_update_freqr   ÚobjectsÚupdate_or_creater1   )r'   Úhostname_workerr3   r/   Ú
last_writeÚobjr   r   r    Úhandle_workerA   s   þzCamera.handle_workerNc                    s˜   |\}}|j r|j jr|  |j j|j f¡}|j|j|jtt|jƒƒtt|j	ƒƒ|j
t|jƒ|jp2|j|j|j|dœ‰ ‡ fdd„tD ƒ | j|j
|ˆ d�S )zHandle snapshotted event.)r   r   r   r   ÚexpiresÚstateÚtstampÚresultÚ	tracebackÚruntimer/   c                    s$   g | ]}ˆ | d u rˆ   |d ¡‘qS ©N)Úpop)Ú.0Úattr©r4   r   r    Ú
<listcomp>e   s    
ÿz&Camera.handle_task.<locals>.<listcomp>)Útask_idr4   )r/   r3   r;   r   r   r   r   r   r   r<   r=   r!   Ú	timestampr?   Ú	exceptionr@   rA   ÚNOT_SAVED_ATTRIBUTESÚupdate_task)r'   Ú	uuid_taskr/   ÚuuidÚtaskr   rF   r    Úhandle_taskM   s*   ÿ
õÿzCamera.handle_taskc           
         sÌ   | j j}| dd ¡pi }| d¡sd S |jdd|i|¤Ž\}}|r#|S t |¡t |j¡k rAtjtj	 ‰ t
‡ fdd„| ¡ D ƒƒ}| ¡ D ]
\}}t|||ƒ qEdD ]}	t||	tt||	ƒƒƒ qR| ¡  |S )Nr4   r   c                 3   s$   � | ]\}}|ˆ vr||fV  qd S rB   r   )rD   ÚkÚv©Úkeepr   r    Ú	<genexpr>u   s   € ÿþz%Camera.update_task.<locals>.<genexpr>)r   r<   r>   r   )r   r6   rC   ÚgetÚget_or_creater   r=   r	   Úmerge_rulesÚRECEIVEDÚdictÚitemsÚsetattrr   r.   Úsave)
r'   r=   r   r6   r4   r:   ÚcreatedrQ   rR   Ú	datefieldr   rS   r    rL   j   s$   
ÿzCamera.update_taskéd   c                    s2   ‡ ‡fdd„}ˆj  ¡ D ]}ˆ  |¡ q|ƒ  d S )Nc                     s&   t ˆj ¡ ƒD ]	\} }ˆ  |¡ qd S rB   )Ú	enumerateÚtasksr[   rP   )ÚirO   ©r'   r=   r   r    Ú_handle_tasks…   s   ÿz(Camera.on_shutter.<locals>._handle_tasks)Úworkersr[   r;   )r'   r=   Úcommit_everyre   r/   r   rd   r    Ú
on_shutterƒ   s   
zCamera.on_shutterc                    sV   ‡ fdd„ˆ j  ¡ D ƒ}tdd„ |D ƒƒ}|r)td|ƒ ˆ jj ¡  td|ƒ |S dS )Nc                 3   s$   � | ]\}}ˆ j j ||¡V  qd S rB   )r   r6   Úexpire_by_states)rD   r   r<   ©r'   r   r    rU   Ž   s   € ÿz$Camera.on_cleanup.<locals>.<genexpr>c                 s   s   � | ]	}|d ur|V  qd S rB   r   )rD   Úitemr   r   r    rU   �   s   € z$Cleanup: Marked %s objects as dirty.zCleanup: %s objects purged.r   )Úexpire_statesr[   ÚsumÚdebugr   r6   Úpurge)r'   ÚexpiredÚdirtyr   rj   r    Ú
on_cleanup�   s   
ÿ

zCamera.on_cleanuprB   )r`   )Ú__name__Ú
__module__Ú__qualname__r   r   Úclear_afterÚWORKER_UPDATE_FREQr5   ÚSUCCESS_STATESÚEXPIRE_SUCCESSr   ÚEXCEPTION_STATESÚEXPIRE_ERRORÚUNREADY_STATESÚEXPIRE_PENDINGrl   r%   r1   r;   rP   rL   rh   rr   Ú__classcell__r   r   r(   r    r"   '   s     ý



r"   N))Ú
__future__r   r   Úcollectionsr   r   r   Údjango.confr   Úceleryr   Úcelery.events.stater	   Úcelery.events.snapshotr
   Úcelery.fiver   Úcelery.utils.logr   Úcelery.utils.timeutilsr   Úmodelsr   r   Úutilsr   r   rw   Ú	frozensetÚSUCCESSrx   r.   ry   r{   r}   rK   rs   Úloggerrn   r!   r"   r   r   r   r    Ú<module>   s8    ÿÿÿ