o
    =IT¶#  ã                   @   s"  d dl mZ d dl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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 ddl m!Z!m"Z" ddl#m$Z$ dZ%dZ&ee'ƒZ(e(j)e(j*e(j+Z)Z*Z+G dd„ deƒZ,G dd„ deƒZ-dS )é    )Úabsolute_importN)ÚFinalize)ÚloadsÚdumps)Úcurrent_app)Ú	schedules)Ú	SchedulerÚScheduleEntry)Úsafe_strÚ	safe_repr)Ú
get_logger)Úis_naive)Útransaction)ÚObjectDoesNotExisté   )Úcommit_on_success)ÚPeriodicTaskÚPeriodicTasksÚCrontabScheduleÚIntervalSchedule)ÚDATABASE_ERRORSÚ
make_aware)Ú
itervaluesé   z=Couldn't add entry %r to database schedule: %r. Contents: %r
c                   @   s‚   e Zd ZejedfejedffZg d¢Z	dd„ Z
dd„ Zdd	„ Zd
d„ Zdd„ ZeZdd„ Zedd„ ƒZeddd„ƒZdd„ ZdS )Ú
ModelEntryÚcrontabÚinterval)Úlast_run_atÚtotal_run_countÚ
no_changesc                 C   s2  t  ¡ | _|j| _|j| _z|j| _W n |jy.   t d¡ t 	d| j¡ |  
|¡ Y nw zt|jp5dƒ| _t|jp=dƒ| _W n ty_   tjd| jdd� t 	d| j¡ |  
|¡ Y nw |j|j|j|jdœ| _|j| _|| _|js{|  ¡ |_|j }| _t| jƒsŽ| jjd d	�| _|j| jjks—J ‚d S )
Nz"Schedule was removed from databasezDisabling %sz[]z{}z%Failed to serialize arguments for %s.r   ©Úexc_info)ÚqueueÚexchangeÚrouting_keyÚexpires)Útzinfo)r   Ú_get_current_objectÚappÚnameÚtaskÚscheduleÚDoesNotExistÚloggerÚerrorÚwarningÚ_disabler   ÚargsÚkwargsÚ
ValueErrorÚloggingr"   r#   r$   r%   Úoptionsr   Úmodelr   Ú_default_nowr   ÚreplaceÚhour)Úselfr6   Úorig© r<   úE/var/www/html/env/lib/python3.10/site-packages/djcelery/schedulers.pyÚ__init__*   sB   

ý
ÿüý

zModelEntry.__init__c                 C   s   d|_ d|_| ¡  d S )NTF)r   ÚenabledÚsave)r:   r6   r<   r<   r=   r0   K   s   zModelEntry._disablec                 C   s   | j jsdS | j | j¡S )N)Fg      @)r6   r?   r+   Úis_duer   ©r:   r<   r<   r=   rA   P   s   zModelEntry.is_duec                 C   s
   | j  ¡ S ©N)r(   ÚnowrB   r<   r<   r=   r7   U   s   
zModelEntry._default_nowc                 C   s2   | j  ¡ | j_| j jd7  _d| j_|  | j¡S )Nr   T)r(   rD   r6   r   r   r   Ú	__class__rB   r<   r<   r=   Ú__next__X   s   zModelEntry.__next__c                 C   sL   | j jj| j jd�}| jD ]}t||t| j |ƒƒ qt|jƒ|_| 	¡  d S )N)Úpk)
r6   Ú_default_managerÚgetrG   Úsave_fieldsÚsetattrÚgetattrr   r   r@   )r:   ÚobjÚfieldr<   r<   r=   r@   _   s
   
zModelEntry.savec                 C   sR   | j D ]\}}}t |¡}t||ƒr!| |¡}| ¡  ||f  S qtd |¡ƒ‚)Nz+Cannot convert schedule type {0!r} to model)Úmodel_schedulesr   Úmaybe_scheduleÚ
isinstanceÚfrom_scheduler@   r3   Úformat)Úclsr+   Úschedule_typeÚ
model_typeÚmodel_fieldÚmodel_scheduler<   r<   r=   Úto_model_scheduleh   s   


ýÿzModelEntry.to_model_schedule©Úrelativer5   c           
      K   s¶   |  d¡pi }t|ƒ}|D ]}| |d ¡ q| d¡}|  |¡\}}	|||	< t|  d¡p-g ƒ|d< t|  d¡p8i ƒ|d< |  d¡|d< |  d¡|d< |  d¡|d< | tjj||d�ƒS )	Nr5   r+   r1   r2   r"   r#   r$   )r)   Údefaults)rI   ÚdictÚpoprY   r   r   rH   Úupdate_or_create)
rT   r)   Úskip_fieldsÚentryr5   ÚfieldsÚ
skip_fieldr+   rX   rW   r<   r<   r=   Ú
from_entrys   s   
ÿzModelEntry.from_entryc                 C   s(   d  t| jƒ| jt| jƒt| jƒ| j¡S )Nz(<ModelEntry: {0} {1}(*{2}, **{3}) {{4}}>)rS   r
   r)   r*   r   r1   r2   r+   rB   r<   r<   r=   Ú__repr__…   s   þzModelEntry.__repr__N)rZ   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r+   r   rO   rJ   r>   r0   rA   r7   rF   Únextr@   ÚclassmethodrY   rd   re   r<   r<   r<   r=   r   %   s"    

ÿ!	

r   c                   @   sp   e Zd ZeZeZeZdZ	dZ
dZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdS )ÚDatabaseSchedulerNFc                 O   sP   t ƒ | _t| | jdd�| _tj| g|¢R i |¤Ž | d¡p$| jj	j
p$t| _d S )Nr   )ÚexitpriorityÚmax_interval)ÚsetÚ_dirtyr   ÚsyncÚ	_finalizer   r>   rI   r(   ÚconfÚCELERYBEAT_MAX_LOOP_INTERVALÚDEFAULT_MAX_INTERVALrm   )r:   r1   r2   r<   r<   r=   r>   ”   s   
ÿýzDatabaseScheduler.__init__c                 C   s    |   | j¡ |  | jjj¡ d S rC   )Úinstall_default_entriesr+   Úupdate_from_dictr(   rr   ÚCELERYBEAT_SCHEDULErB   r<   r<   r=   Úsetup_schedule�   s   z DatabaseScheduler.setup_schedulec              	   C   sH   t dƒ i }| jj ¡ D ]}z
|  |¡||j< W q ty!   Y qw |S )Nz-DatabaseScheduler: Fetching database schedule)ÚdebugÚModelÚobjectsr?   ÚEntryr)   r3   )r:   Úsr6   r<   r<   r=   Úall_as_schedule¡   s   ÿz!DatabaseScheduler.all_as_schedulec              
   C   s°   zzt  ¡  W n
 t jy   Y nw | j| j ¡ }}W n ty6 } ztd|dd� W Y d }~dS d }~ww z|rH||r?|n|krNW || _dS W || _dS W || _dS || _w )NzDatabase gave error: %rr   r    FT)r   ÚcommitÚTransactionManagementErrorÚ_last_timestampÚChangesÚlast_changer   r.   )r:   ÚlastÚtsÚexcr<   r<   r=   Úschedule_changed«   s.   ÿ€þ
ýüÿz"DatabaseScheduler.schedule_changedc                 C   s   t  | |¡}| j |j¡ |S rC   )r   Úreservero   Úaddr)   )r:   ra   Ú	new_entryr<   r<   r=   rˆ   Á   s   zDatabaseScheduler.reservec              
   C   sÞ   t dƒ tƒ }zFtƒ �8 | jr:z| j ¡ }| |¡ | j|  ¡  W n tt	fy-   Y nw | jsW d   ƒ W d S W d   ƒ W d S 1 sFw   Y  W d S  t
yn } z|  j|O  _td|dd� W Y d }~d S d }~ww )NzWriting entries...zDatabase error while sync: %rr   r    )Úinforn   r   ro   r^   r‰   r+   r@   ÚKeyErrorr   r   r.   )r:   Ú_triedr)   r†   r<   r<   r=   rp   È   s*   

ÿûÿ&ÿ€ýzDatabaseScheduler.syncc                 C   st   i }|  ¡ D ]+\}}z| jj|fi |¤Ž||< W q ty1 } ztt|||ƒ W Y d }~qd }~ww | j |¡ d S rC   )Úitemsr|   rd   Ú	Exceptionr.   ÚADD_ENTRY_ERRORr+   Úupdate)r:   Údict_r}   r)   ra   r†   r<   r<   r=   rv   Ù   s   €ÿz"DatabaseScheduler.update_from_dictc              	   C   s>   i }| j jjr| ddt ddd¡ddidœ¡ |  |¡ d S )Nzcelery.backend_cleanupÚ0Ú4Ú*r%   iÀ¨  )r*   r+   r5   )r(   rr   ÚCELERY_TASK_RESULT_EXPIRESÚ
setdefaultr   r   rv   )r:   ÚdataÚentriesr<   r<   r=   ru   â   s   
ýÿz)DatabaseScheduler.install_default_entriesc                 C   sz   d}| j stdƒ d}d| _ n
|  ¡ rtdƒ d}|r:|  ¡  |  ¡ | _t t	j
¡r:tdd dd„ t| jƒD ƒ¡ƒ | jS )	NFzDatabaseScheduler: intial readTz$DatabaseScheduler: Schedule changed.zCurrent schedule:
%sÚ
c                 s   s   � | ]}t |ƒV  qd S rC   )Úrepr)Ú.0ra   r<   r<   r=   Ú	<genexpr>ý   s   € 
ÿz-DatabaseScheduler.schedule.<locals>.<genexpr>)Ú_initial_readry   r‡   r‹   rp   r~   Ú	_scheduler-   ÚisEnabledForr4   ÚDEBUGÚjoinr   )r:   r‘   r<   r<   r=   r+   î   s    

ÿzDatabaseScheduler.schedule)rf   rg   rh   r   r|   r   rz   r   r‚   rŸ   r�   rž   r>   rx   r~   r‡   rˆ   rp   rv   ru   Úpropertyr+   r<   r<   r<   r=   rk   Œ   s"    	
	rk   ).Ú
__future__r   r4   Úmultiprocessing.utilr   Úanyjsonr   r   Úceleryr   r   Úcelery.beatr   r	   Úcelery.utils.encodingr
   r   Úcelery.utils.logr   Úcelery.utils.timeutilsr   Ú	django.dbr   Údjango.core.exceptionsr   Údbr   Úmodelsr   r   r   r   Úutilsr   r   Úcompatr   rt   r�   rf   r-   ry   r‹   r.   r   rk   r<   r<   r<   r=   Ú<module>   s,    g