a
    8Xh                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZ dZdd ZG dd de	Z
G dd	 d	ZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdd Zdd Zd)eee edddZd*dd Zd+d"d#Zd$d% Zd,d'd(ZdS )-    N)Optional)appsc                 C   s   d S N )methr   r   f/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/django_extensions/management/jobs.pynoneimplementation   s    r   c                   @   s   e Zd ZdS )JobErrorN)__name__
__module____qualname__r   r   r   r   r	      s   r	   c                   @   s   e Zd ZdZdZdd ZdS )BaseJobzundefined job description.Nc                 C   s   t dd S )Nz)Job needs to implement the execute method)NotImplementedError)selfr   r   r   execute   s    zBaseJob.execute)r
   r   r   helpwhenr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )MinutelyJobminutelyNr
   r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )QuarterHourlyJobquarter_hourlyNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )	HourlyJobhourlyNr   r   r   r   r   r   #   s   r   c                   @   s   e Zd ZdZdS )DailyJobdailyNr   r   r   r   r   r   '   s   r   c                   @   s   e Zd ZdZdS )	WeeklyJobweeklyNr   r   r   r   r   r   +   s   r   c                   @   s   e Zd ZdZdS )
MonthlyJobmonthlyNr   r   r   r   r   r   /   s   r   c                   @   s   e Zd ZdZdS )	YearlyJobyearlyNr   r   r   r   r   r    3   s   r    c              
   C   sx   zt | }W n4 ty@ } ztd| |f W Y d }~n
d }~0 0 | d}t|dkrt|dd  D ]}t||}qd|S )Nz!Failed to import %s with error %s.   )
__import__ImportErrorr	   splitlengetattr)nameimperrZmodsmodr   r   r   	my_import7   s    &
r-   c                 C   s6   zt dd t| D W S  ty0   g  Y S 0 d S )Nc                 S   s,   g | ]$}| d s|dr|dd qS )_z.pyN)
startswithendswith).0fr   r   r   
<listcomp>F       zfind_jobs.<locals>.<listcomp>)sortedoslistdirOSError)Zjobs_dirr   r   r   	find_jobsD   s    r:   )app_namer   returnc                 C   s@   |  d}|d |r"|| d|}t|}|jd S )z(Find the directory path to a job module.r"   jobsr   )r&   appendjoin	importlibimport_module__path__)r;   r   partsmodule_namemoduler   r   r   find_job_moduleK   s    




rF   c                 C   sx   d| |rd| pd|f }t |}z
|j}W n tyJ   td| Y n0 |rt|j|kst|jd u sttd||f |S )Nz%s.jobs.%s%sz%s. z9Job module %s does not contain class instance named 'Job'zJob %s is not a %s job.)r-   ZJobAttributeErrorr	   r   )r;   r)   r   Z	jobmoduleZjob_modjobr   r   r   
import_jobV   s    
rJ   Fc              
   C   s  z@t jt jtjd }t j|}|tjvr>tj| W n tyR   Y n0 i }dd t	 D D ]}d}| r~d| f}|D ]}zlt
||}t|D ]T}	||	f|v rtd|	 t||	|}
|r|
jdu rq| r|
j| krq|
|||	f< qW q ty   Y q0 qqj|S )zh
    Return a dictionary mapping of job names together with their respective
    application class.
    r   c                 S   s   g | ]
}|j qS r   )r)   )r2   Zappr   r   r   r4   r   r5   zget_jobs.<locals>.<listcomp>)Nr   r   r   r   r   r   r!   NzDuplicate job %s)r7   pathdirnamerealpathsysargvr>   	Exceptionr   Zget_app_configsrF   r:   r	   rJ   r   r%   )r   only_scheduledZcpathZppath_jobsr;   ZscandirssubdirrK   r)   rI   r   r   r   get_jobsc   s6    


rT   c                 C   sP   t  }| r|| |f S | D ] \}}||kr|||f   S qtd| d S )NzJob not found: %s)rT   keysKeyError)r;   job_namer=   ajr   r   r   get_job   s    rZ   Tc                 C   sH  t | |d}tdt|  t| }|s0d S dtdd |D  }dtdd |D  }dtdd | D  }	|rd}
|r|
|d	 d
 7 }
|
|d 7 }
|r|
d
|	d  7 }
|
d7 }
t|
 td |D ]t\}}|||f }d}
|r|
|| d
 7 }
|
|| 7 }
|r,|
d
|	|jr"|jp$d  7 }
|
d
|j 7 }
t|
 qd S )N)rQ   zJob List: %i jobsz%%-%isc                 s   s   | ]}t |d  V  qdS )r   Nr'   r2   er   r   r   	<genexpr>   r5   zprint_jobs.<locals>.<genexpr>c                 s   s   | ]}t |d  V  qdS )r#   Nr[   r\   r   r   r   r^      r5   c                 s   s   | ]}|j rt|j V  qd S r   )r   r'   r\   r   r   r   r^      r5    appnamez - Zjobnamer   z - helpzP--------------------------------------------------------------------------------rG   )	rT   printr'   r6   rU   maxvaluesr   r   )r   rQ   Z	show_whenZshow_appnameZshow_headerZjobmapZjlistZappname_spacerZname_spacerZwhen_spacerliner;   rW   rI   r   r   r   
print_jobs   s8     re   )N)N)NF)NFTFT)r7   rN   r@   typingr   Zdjango.appsr   rR   r   rP   r	   r   r   r   r   r   r   r   r    r-   r:   strrF   rJ   rT   rZ   re   r   r   r   r   <module>   s,   

(