3
g                 @   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   _/var/www/tester-filtro-web/env/lib/python3.6/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_hourlyN)r	   r
   r   r   r   r   r   r   r      s   r   c               @   s   e Zd ZdZdS )	HourlyJobhourlyN)r	   r
   r   r   r   r   r   r   r   #   s   r   c               @   s   e Zd ZdZdS )DailyJobdailyN)r	   r
   r   r   r   r   r   r   r   '   s   r   c               @   s   e Zd ZdZdS )	WeeklyJobweeklyN)r	   r
   r   r   r   r   r   r   r   +   s   r   c               @   s   e Zd ZdZdS )
MonthlyJobmonthlyN)r	   r
   r   r   r   r   r   r   r   /   s   r   c               @   s   e Zd ZdZdS )	YearlyJobyearlyN)r	   r
   r   r   r   r   r   r   r   3   s   r   c             C   sz   yt | }W n2 tk
r> } ztd| |f W Y d d }~X nX | jd}t|dkrvx|dd  D ]}t||}qdW |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   s2   yt dd tj| D S  tk
r,   g S X d S )Nc             S   s.   g | ]&}|j d  r|jdr|dd qS )_z.pyN   )
startswithendswith).0fr   r   r   
<listcomp>F   s    zfind_jobs.<locals>.<listcomp>)sortedoslistdirOSError)Zjobs_dirr   r   r   	find_jobsD   s    r8   )app_namer   returnc             C   s@   | j d}|jd |r"|j| dj|}tj|}|jd S )z(Find the directory path to a job module.r    jobsr   )r$   appendjoin	importlibimport_module__path__)r9   r   partsmodule_namemoduler   r   r   find_job_moduleK   s    




rD   c             C   s|   d| |rd| pd|f }t |}y
|j}W n  tk
rL   td| Y nX |rx|j|kpd|jd k rxt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   )r9   r'   r   Z	jobmoduleZjob_modjobr   r   r   
import_jobV   s    
rH   Fc             C   s   y@t jjt jjtjd }t jj|}|tjkr>tjj| W n tk
rT   Y nX i }xdd tj	 D D ]}d}| rd| f}x|D ]}ypt
||}x`t|D ]T}	||	f|krtd|	 t||	|}
|r|
jdkrq| r|
j| krq|
|||	f< qW W q tk
r   Y qX qW qnW |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'   )r1   Zappr   r   r   r3   r   s    zget_jobs.<locals>.<listcomp>Nr   r   r   r   r   r   r   zDuplicate job %s)Nr   r   r   r   r   r   r   )r5   pathdirnamerealpathsysargvr<   	Exceptionr   Zget_app_configsrD   r8   r   rH   r   r#   )r   only_scheduledZcpathZppath_jobsr9   ZscandirssubdirrI   r'   rG   r   r   r   get_jobsc   s6    


rR   c             C   sP   t  }| r|| |f S x(|j D ]\}}||kr |||f S q W td| d S )NzJob not found: %s)rR   keysKeyError)r9   job_namer;   ajr   r   r   get_job   s    rX   Tc             C   sR  t | |d}tdt|  t|j }|s0d S dtdd |D  }dtdd |D  }dtdd |j D  }	|rd}
|r|
|d	 d
 7 }
|
|d 7 }
|r|
d
|	d  7 }
|
d7 }
t|
 tdd  x~|D ]v\}}|||f }d}
|r|
|| d
 7 }
|
|| 7 }
|r4|
d
|	|jr*|jp,d  7 }
|
d
|j 7 }
t|
 qW d S )N)rO   zJob List: %i jobsz%%-%isc             s   s   | ]}t |d  V  qdS )r   N)r%   )r1   er   r   r   	<genexpr>   s    zprint_jobs.<locals>.<genexpr>c             s   s   | ]}t |d  V  qdS )r!   N)r%   )r1   rY   r   r   r   rZ      s    c             s   s   | ]}|j rt|j V  qd S )N)r   r%   )r1   rY   r   r   r   rZ      s     appnamez - Zjobnamer   z - help-P   rE   )	rR   printr%   r4   rS   maxvaluesr   r   )r   rO   Z	show_whenZshow_appnameZshow_headerZjobmapZjlistZappname_spacerZname_spacerZwhen_spacerliner9   rU   rG   r   r   r   
print_jobs   s8     rc   )N)N)NF)NFTFT)r5   rL   r>   typingr   Zdjango.appsr   rP   r   rN   r   r   r   r   r   r   r   r   r   r+   r8   strrD   rH   rR   rX   rc   r   r   r   r   <module>   s,   

(