o
    dV                     @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZ ejd  dkr=eneZeeZG dd deZdS )	    )print_functionN)import_module)settings)Settings   c                   @   sd   e 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
dd Zdd Zdd ZdS )Crontabc                 K   s4   t |dd| _|dd| _g | _tt| _d S )N	verbosity   readonlyF)intgetr   r
   crontab_linesr   r   )selfoptions r   h/var/www/html/myvaluetrips/my_value_trip_new/venv/lib/python3.10/site-packages/django_crontab/crontab.py__init__   s   zCrontab.__init__c                 C   s   |    | S )zH
        Automatically read crontab when used as with statement
        )readr   r   r   r   	__enter__   s   zCrontab.__enter__c                 C   s   | j s	|   dS dS )zc
        Automatically write back crontab when used as with statement if readonly is False
        N)r
   write)r   typevalue	tracebackr   r   r   __exit__%   s   zCrontab.__exit__c                 C   s   t d| jj  | _dS )z8
        Reads the crontab into internal buffer
        z%s -lN)ospopenr   CRONTAB_EXECUTABLE	readlinesr   r   r   r   r   r   ,   s   zCrontab.readc                 C   sZ   t  \}}t|d}| jD ]}|| q|  td| jj	|f  t
| dS )z8
        Writes internal buffer back to crontab
        wz%s %sN)tempfilemkstempr   fdopenr   r   closesystemr   r   unlink)r   fdpathtmpliner   r   r   r   2   s   
zCrontab.writec                 C   s   | j jD ]g}t|dkrt|d tr|d }nt|dkr#|d }nd}| j| j j|d | j jd	t
d| j j| j j| j jdd| || j jrNd	| j j nd|| j jg	d
  | jdkrktd| ||f  qdS )zN
        Adds all jobs defined in CRONJOBS setting to internal buffer
        r       r    Ncrontabrunz--settings=%s)timecommentcommandr	   z  adding cronjob: (%s) -> %s)r   CRONJOBSlen
isinstancestring_typer   appendCRONTAB_LINE_PATTERNCRONTAB_COMMENTjoinfilterCOMMAND_PREFIXPYTHON_EXECUTABLEDJANGO_MANAGE_PATH_Crontab__hash_jobDJANGO_SETTINGS_MODULECOMMAND_SUFFIXr   print)r   job
job_suffixr   r   r   add_jobs>   s0   



zCrontab.add_jobsc              
   C   s   t d | jdd D ]B}| jj|}|rM|d d | jjkrM| jdkrMt d|d d  d | |d d |d d 	dd	 d  d f  qdS )
z2
        Print the jobs from from crontab
        z!Currently active jobs in crontab:Nr   r*   r	   z%s -> %sr   crontab run   )
rA   r   r   CRONTAB_LINE_REGEXPfindallr8   r   split_Crontab__get_job_by_hashfindr   r)   rB   r   r   r   	show_jobs]   s   
2zCrontab.show_jobsc              
   C   s   | j dd D ]H}| jj|}|rO|d d | jjkrO| j | | jdkrOtd|d d  d | 	|d d |d d 
dd d  d f  qdS )	zS
        Removes all jobs defined in CRONJOBS setting from internal buffer
        Nr   r*   r	   zremoving cronjob: (%s) -> %sr   rE   rF   )r   r   rG   rH   r8   remover   rA   rI   rJ   rK   rL   r   r   r   remove_jobsk   s   
2zCrontab.remove_jobsc                 C   sD  |  |}|d }t|dkrt|d ts|d ng }t|dkr&|d ni }d}| jjr\ttj	t
 d| d}|j}zt|tjtjB  W n ty[   td| Y dS w |dd\}}	t|}
t|
|	}z	||i | W n
   td	| Y | jjrz
t|tj W dS  ty   td
| Y dS w dS )zI
        Executes the corresponding function defined in CRONJOBS
        r	   r      Nzdjango_crontab_%s.lockr   z3Tried to start cron job %s that is already running..z Failed to complete cronjob at %szError unlocking %s)rJ   r3   r4   r5   r   	LOCK_JOBSopenr   r'   r9   r    
gettempdirnamefcntlflockLOCK_EXLOCK_NBIOErrorloggerwarningrsplitr   getattr	exceptionLOCK_UN)r   job_hashrB   job_namejob_args
job_kwargslock_file_name	lock_filemodule_pathfunction_namemodulefuncr   r   r   run_jobz   s:   
&
zCrontab.run_jobc                 C   s*   t jdd|}t|d }|S )z9
        Builds an md5 hash representing the job
        T)	sort_keyszutf-8)jsonJSONEncoderencodehashlibmd5	hexdigest)r   rB   jhr   r   r   
__hash_job   s   zCrontab.__hash_jobc                 C   s0   | j jD ]}| ||kr|  S qtd| )z-
        Finds the job by given hash
        zNo job with hash %s found. It seems the crontab is out of sync with your settings.CRONJOBS. Run "python manage.py crontab add" again to resolve this issue!)r   r2   r>   RuntimeError)r   ra   rB   r   r   r   __get_job_by_hash   s   zCrontab.__get_job_by_hashN)__name__
__module____qualname__r   r   r   r   r   rD   rM   rO   rk   r>   rJ   r   r   r   r   r      s    "r   )
__future__r   rV   rp   rm   loggingr   r    sys	importlibr   django.confr   django_crontab.app_settingsr   version_info
basestringstrr5   	getLoggerrx   r[   objectr   r   r   r   r   <module>   s    
