3
bc0                 @   sv   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlZi add Z	dd Z
G d	d
 d
ejZG dd deZdS )    )with_statementN)datetime)qconfigc               C   s0   t jtj kr&tt j jjr&tt j S tt j S )N)r   LOGGER_META_NAME_loggerskeys_loggerhandlersLOGGER_DEFAULT_NAME r   r   8/home/psgendb/BIRCHDEV/pkg/quast-5.2.0/quast_libs/log.pyget_main_logger   s    
r   c             C   s,   | t j krt |  S t| t | < t |  S d S )N)r   r   QLogger)namer   r   r   
get_logger   s    r   c               @   s   e Zd ZdddZdd ZdS )MetaQErrorFormatterNc             C   s"   || _ || _|| _tjj|  d S )N)_indent_val	_ref_name
_log_fpathlogging	Formatter__init__)self
indent_valref_nameZ	log_fpathr   r   r   r   !   s    zMetaQErrorFormatter.__init__c             C   s6   |j r0| jd | j d |j  d | j d |_ |j S )Nz  z: z(details are in ))msgr   r   r   )r   recordr   r   r   format(   s    *zMetaQErrorFormatter.format)NNN)__name__
__module____qualname__r   r   r   r   r   r   r       s   
r   c               @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdd Zd2ddZd3d	d
Zdd Zd4ddZdd Zd5ddZd6ddZd7ddZd8ddZd9ddZd:ddZd;ddZd<dd Zd=d!d"Zd>d$d%Zd?d&d'Zd@d(d)ZdAd*d+Zd,d- Z dBd.d/Z!d0d1 Z"dS )Cr   N r   Fc             C   s$   || _ tj|| _| jjtj d S )N)_namer   Z	getLoggerr   setLevelDEBUG)r   r   r   r   r   r   :   s    zQLogger.__init__c             C   s   d| _ || _|| _d S )NT)_is_metaquast_is_parallel_runr   )r   Zis_parallel_runr   r   r   r   set_up_metaquast?   s    zQLogger.set_up_metaquastc             C   s   || _ x(| jjD ]}t|tjr| jj| qW tjtj}|j	tj
|d d  |j|rbtjntj | jr|j	t|| j| j |jtj | jj| d S )Nz  z%(message)s)r   r   r	   
isinstancer   ZStreamHandlerremoveHandlersysstdoutZsetFormatterr   r$   r%   INFOr'   r   r   r   ZERROR
addHandler)r   r   debughandlerZconsole_handlerr   r   r   set_up_console_handlerD   s    zQLogger.set_up_console_handlerc             C   s"   x| j jD ]}|jtj q
W d S )N)r   r	   r$   r   r%   )r   r0   r   r   r   set_up_debug_levelS   s    zQLogger.set_up_debug_levelc             C   sl   x(| j jD ]}t|tjr
| j j| q
W tjj|| j	d | _
tj| j
dd}|jtj | j j| d S )Nz.logw)mode)r   r	   r)   r   FileHandlerr*   ospathjoinr#   r   r$   r%   r.   )r   output_dirpathZ	err_fpathr0   file_handlerr   r   r   set_up_file_handlerW   s    zQLogger.set_up_file_handlerc             C   sh   | j dkr:| j r:| jjd | j  | jjd | j  | jd| _| jjd | jjd| j  d S )Nr   r"   z	Started: zLogging to )	r   r&   r   infoprint_versionprint_system_infoprint_timestamp_start_timer   )r   r   r   r   starta   s    zQLogger.startc             C   s  d}| j s| jjd| j  tjr4| jjdtj  | jd}| jjdt|| j	   |rl| j
d|d n| j
  | jjd |r|d k	r|d	 dks| jdkr| jjd
 d}n8|d k	r|d dks| jdkr| jjd n| jjd x| jjD ]}| jj| qW t| j= |S )Nr   z  Log is saved to z  Errors are saved to z
Finished: zElapsed time: zTotal )prefixnumbersz
Thank you for using QUAST!   zJ
TEST FAILED! Please find non-fatal errors in the log and try to fix them.   z
TEST PASSED with WARNINGS!z
TEST PASSED!)r&   r   r<   r   r   
save_errorerror_log_fpathr?   strr@   print_numbers_of_notifications_num_nf_errors_num_warningsr	   r*   r   r#   )r   rC   
check_testZtest_resultZfinish_timer0   r   r   r   	finish_upl   s,    
zQLogger.finish_upc             C   s   | j j||  d S )N)r   r/   )r   messageindentr   r   r   r/      s    zQLogger.debugc             C   s,   t jr| jj||  n| jj||  d S )N)r   silentr   r/   r<   )r   rN   rO   r   r   r   r<      s    zQLogger.infoc             C   s   | j j||  d S )N)r   r<   )r   rN   rO   r   r   r   	main_info   s    zQLogger.main_infoc             C   s   x,t | jjD ]}t|tjr| jj| qW t| jd}|j	|| d  W d Q R X tj| jdd}|j
tj | jj| d S )Na
)r4   )listr   r	   r)   r   r5   r*   openr   writer$   r%   r.   )r   rN   rO   r0   fr:   r   r   r   info_to_file   s    zQLogger.info_to_filec             C   s2   |  j d7  _ | jj||r&dt| nd  d S )NrE   zNOTICE: r"   )_num_noticesr   r<   rH   )r   rN   rO   r   r   r   notice   s    zQLogger.noticec             C   s2   |  j d7  _ | jj||r&dt| nd  d S )NrE   z	WARNING: r"   )rK   r   warningrH   )r   rN   rO   r   r   r   r[      s    zQLogger.warningc          
   C   s   |r&| j dkr&| jd | j| d S |rH|d t| }|rL|d7 }nd}|sZ| jj rltjj|d  n| jj	d | jj	| t
jrtt
jd}|j| W d Q R X |rt| n|  jd7  _d S )Nr   r"   zERROR! z

In case you have troubles running QUAST, you can write to quast.support@cab.spbu.ru
or report an issue on our GitHub repository https://github.com/ablab/quast/issues
Please provide us with quast.log file from the output directory.rS   rR   rE   )r   r<   rZ   rH   r   r	   r+   stderrrV   errorr   rG   rU   exitrJ   )r   rN   exit_with_code	to_stderrrO   fake_if_nested_runr   rW   r   r   r   r]      s&    



zQLogger.errorc             C   s   d}t |tkr^dt|kr^dt|kr^tjr^tjdkr^tjdkr^tjjdkr^tjj	dkr^d}| j
jr| j
jd | j
j| |r| j
j| n(tjjt|d	  |rtjj|d	  |rt| d S )
Nr"   ZNoneTypeintrE   macosx      a/  

This seems to be a known bug when using multi-threading in Python 3.8+ on macOS!
The current workarounds are
  to switch to single-thread execution (-t 1)
or
  to downgrade your Python to 3.7 or below.
Sorry for the inconvenience!
Please find more details in https://github.com/ablab/quast/issues/175
rS   )type	TypeErrorrH   r   max_threadsplatform_namer+   version_infomajorminorr   r	   r]   	exceptionr<   r\   rV   r^   )r   e	exit_codeZextra_messager   r   r   rm      s    $zQLogger.exceptionP   c             C   s   |r| j }n|r| j}n| j}d}|}xt|D ]\}	}
d|
ksHd|
krXd|
 d ||	< ||
7 }|	t|d krz||7 }q0|d k	rt||kr||d 7 }dt| }q0|d7 }q0W || d S )Nr"    	'rE   z \
)r/   rQ   r<   	enumeratelen)r   argsrO   
wrap_afteronly_if_debugZis_mainouttextlineiargr   r   r   print_command_line   s$    
zQLogger.print_command_linec       
      C   s(  | j jdtj   | j jd d}|}dtj fdtjfdtj fdtjfdtj	fd	tj
fd
tjfdtjfdtjfdtjfdtjfg}xt|D ]\}\}}	|	dk	r||d t|	j  7 }|t|d kr||7 }q|d k	ot||kr||d 7 }dt| d }q|d7 }qW | j j| d S )NzCWD: zMain parameters: z  ZMODEthreadsZ
eukaryoticzsplit scaffoldszmin contig lengthzmin alignment lengthzmin alignment IDYZ	ambiguityzuse all alignmentszmin local misassembly lengthz min extensive misassembly lengthFz: rE   z, \
rq   z, )r   r<   r6   getcwdr   get_moderh   
prokaryotesplit_scaffolds
min_contigmin_alignmentmin_IDYambiguity_usageuse_all_alignmentslocal_misassembly_min_lengthextensive_misassembly_thresholdrt   rH   lowerru   )
r   rO   rw   rx   rz   r{   optionsr|   optionvaluer   r   r   print_params  s*    

zQLogger.print_paramsc             C   s.   t j }|jd}| jd | j||  |S )Nz%Y-%m-%d %H:%M:%Sr"   )r   nowstrftimerQ   )r   rN   r   Zcurrent_timer   r   r   r?   !  s
    

zQLogger.print_timestampc             C   s4   |rt jjdtj  d  n| jdtj   d S )Nz	Version: rS   )r+   r\   rV   r   quast_versionr<   )r   r`   r   r   r   r=   (  s    zQLogger.print_versionc             C   s   | j jd dd l}| j jd|j  dtj   | j jdttjd  d ttjd  d ttjd   y$dd l}| j jd	t|j	   W n  t
k
r   | j jd
 Y nX d S )NzSystem information:r   z  OS: z (%s)z  Python version: .rE   rD   z  CPUs number: z7  Problem occurred when getting CPUs number information)r   r<   platformr   ri   rH   r+   rj   multiprocessing	cpu_countImportError)r   r   r   r   r   r   r>   .  s    8zQLogger.print_system_infoc             C   s,   |s| j | j| jf}| jj|d|   d S )Nz/NOTICEs: %d; WARNINGs: %d; non-fatal ERRORs: %d)rY   rK   rJ   r   r<   )r   rB   rC   r   r   r   rI   :  s    
z&QLogger.print_numbers_of_notificationsc             C   s   | j | j| jfS )N)rY   rK   rJ   )r   r   r   r   get_numbers_of_notifications@  s    z$QLogger.get_numbers_of_notifications)FN)r   F)N)NF)r"   r"   )r"   r"   )r"   r"   )r"   r"   )r"   r"   )r"   r"   )r"   r   Fr"   F)r   )r"   rp   FF)r"   rp   F)r"   )F)r"   N)#r   r    r!   r   r#   r   r@   r   rY   rK   rJ   r&   r'   r   r(   r1   r2   r;   rA   rM   r/   r<   rQ   rX   rZ   r[   r]   rm   r~   r   r?   r=   r>   rI   r   r   r   r   r   r   .   sD   












 
 



r   )
__future__r   r6   r+   r   
quast_libsr   r   r   r   r   r   r   objectr   r   r   r   r   <module>   s   