a
    ¦ž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 ¡ v 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  ¡ v rt |  S t| ƒt | < t |  S d S r   )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 | ¡ d S r   )Ú_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 )Nú  ú: 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 tj¡ d S r   )Ú_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ž   || _ | jjD ]}t|tjƒr| j |¡ qt tj¡}| 	t 
|d d ¡¡ | |r^tjntj¡ | jrŽ| 	t|| j| jƒ¡ | tj¡ | j |¡ d S )Nr   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   | j jD ]}| tj¡ qd S r   )r	   r
   r'   r   r(   )r   r3   r   r   r   Úset_up_debug_levelS   s    zQLogger.set_up_debug_levelc                 C   sh   | j jD ]}t|tjƒr| j  |¡ qtj || j	d ¡| _
tj| j
dd}| tj¡ | j  |¡ d S )Nz.logÚw©Úmode)r	   r
   r,   r   ÚFileHandlerr-   ÚosÚpathÚjoinr&   r   r'   r(   r1   )r   Úoutput_dirpathZ	err_fpathr3   Úfile_handlerr   r   r   Úset_up_file_handlerW   s    zQLogger.set_up_file_handlerc                 C   sf   | j dkr8| js8| j d¡ |  ¡  | j d¡ |  ¡  |  d¡| _| j d¡ | 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 d| j ¡ tjr4| j dtj ¡ |  d¡}| j dt|| j	 ƒ ¡ |rl| j
d|d n|  
¡  | j d¡ |rì|d ur˜|d	 dks¢| jdkr´| j d
¡ d}n8|d urÈ|d dksÒ| jdkrà| j d¡ n| j d¡ | jjD ]}| j |¡ qô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_fpathrC   ÚstrrD   Úprint_numbers_of_notificationsÚ_num_nf_errorsÚ_num_warningsr
   r-   r   r&   )r   rH   Ú
check_testZtest_resultZfinish_timer3   r   r   r   Ú	finish_upl   s,    
zQLogger.finish_upc                 C   s   | j  || ¡ d S r   )r	   r2   ©r   ÚmessageÚindentr   r   r   r2   Š   s    zQLogger.debugc                 C   s,   t jr| j || ¡ n| j || ¡ d S r   )r   Úsilentr	   r2   r@   rS   r   r   r   r@      s    zQLogger.infoc                 C   s   | j  || ¡ d S r   )r	   r@   rS   r   r   r   Ú	main_info”   s    zQLogger.main_infoc                 C   s”   t | jjƒD ]}t|tjƒr| j |¡ qt| jdƒ"}| 	|| d ¡ W d   ƒ n1 s^0    Y  tj| jdd}| 
tj¡ | j |¡ d S )NÚaÚ
r7   )Úlistr	   r
   r,   r   r9   r-   Úopenr   Úwriter'   r(   r1   )r   rT   rU   r3   Úfr>   r   r   r   Úinfo_to_file—   s    0zQLogger.info_to_filec                 C   s2   |  j d7  _ | j ||r&dt|ƒ nd ¡ d S )NrJ   zNOTICE: r%   )Ú_num_noticesr	   r@   rM   rS   r   r   r   Únotice¤   s    zQLogger.noticec                 C   s2   |  j d7  _ | j ||r&dt|ƒ nd ¡ d S )NrJ   z	WARNING: r%   )rP   r	   ÚwarningrM   rS   r   r   r   ra   ¨   s    zQLogger.warningc                 C   sÞ   |r&| j dkr&|  d¡ |  |¡ d S |rH|d t|ƒ }|rL|d7 }nd}|sX| jjsjtj |d ¡ n| j 	d¡ | j 	|¡ t
jr¾tt
jdƒ}| |¡ W d   ƒ n1 s´0    Y  |rÌt|ƒ 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.rY   rX   rJ   )r   r@   r`   rM   r	   r
   r.   Ústderrr\   Úerrorr   rL   r[   ÚexitrO   )r   rT   Úexit_with_codeÚ	to_stderrrU   Úfake_if_nested_runr   r]   r   r   r   rc   ¬   s&    


(
zQLogger.errorc                 C   sÈ   d}t |ƒtkr^dt|ƒv r^dt|ƒv 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
 d¡ | j
 |¡ |r¸| j
 |¡ n(tj t|ƒd	 ¡ |r¸tj |d	 ¡ |rÄt|ƒ d S )
Nr%   ZNoneTypeÚintrJ   Ú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
rY   )ÚtypeÚ	TypeErrorrM   r   Úmax_threadsÚplatform_namer.   Úversion_infoÚmajorÚminorr	   r
   rc   Ú	exceptionr@   rb   r\   rd   )r   ÚeÚ	exit_codeZextra_messager   r   r   rs   Ê   s$    $
ÿ
ÿzQLogger.exceptionéP   c                 C   s¼   |r| j }n|r| j}n| j}d}|}t|ƒD ]€\}	}
d|
v sFd|
v rVd|
 d ||	< ||
7 }|	t|ƒd krx||7 }q.|d ur¦t|ƒ|kr¦||d 7 }dt|ƒ }q.|d7 }q.||ƒ d S )Nr%   ú ú	ú'rJ   z \
)r2   rW   r@   Ú	enumerateÚlen)r   ÚargsrU   Ú
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  dt ¡  ¡ | j  d¡ d}|}dt ¡ 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}t|ƒD ]„\}\}}	|	dur||d t|	ƒ ¡  7 }|t|ƒd krÖ||7 }q|d urt|ƒ|kr||d 7 }dt|ƒ d }q|d7 }q| j  |¡ d S )NzCWD: zMain parameters: r   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 lengthFr   rJ   z, \
rw   z, )r	   r@   r:   Úgetcwdr   Úget_modern   Ú
prokaryoteÚsplit_scaffoldsÚ
min_contigÚmin_alignmentÚmin_IDYÚambiguity_usageÚuse_all_alignmentsÚlocal_misassembly_min_lengthÚextensive_misassembly_thresholdrz   rM   Úlowerr{   )
r   rU   r}   r~   r€   r   Úoptionsr‚   ZoptionÚvaluer   r   r   Úprint_params  s,    
ú

zQLogger.print_paramsc                 C   s.   t  ¡ }| d¡}|  d¡ |  || ¡ |S )Nz%Y-%m-%d %H:%M:%Sr%   )r   ÚnowÚstrftimerW   )r   rT   r•   Zcurrent_timer   r   r   rC   !  s
    

zQLogger.print_timestampc                 C   s4   |rt j dt ¡  d ¡ n|  dt ¡  ¡ d S )Nz	Version: rY   )r.   rb   r\   r   Úquast_versionr@   )r   rf   r   r   r   rA   (  s    zQLogger.print_versionc                 C   s¸   | j  d¡ dd l}| j  d| ¡  dtj  ¡ | j  dttjd ƒ d ttjd ƒ d ttjd ƒ ¡ z$dd l}| j  d	t| 	¡ ƒ ¡ W n t
y²   | j  d
¡ Y n0 d S )NzSystem information:r   z  OS: z (%s)z  Python version: Ú.rJ   rI   z  CPUs number: z7  Problem occurred when getting CPUs number information)r	   r@   Úplatformr   ro   rM   r.   rp   ÚmultiprocessingÚ	cpu_countÚImportError)r   r™   rš   r   r   r   rB   .  s    ,ÿzQLogger.print_system_infoc                 C   s,   |s| j | j| jf}| j |d|  ¡ d S )Nz/NOTICEs: %d; WARNINGs: %d; non-fatal ERRORs: %d)r_   rP   rO   r	   r@   )r   rG   rH   r   r   r   rN   :  s
    
ÿz&QLogger.print_numbers_of_notificationsc                 C   s   | j | j| jfS r   )r_   rP   rO   rE   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%   rv   FF)r%   rv   F)r%   )F)r%   N)#r"   r#   r$   r	   r&   r   rD   r   r_   rP   rO   r)   r*   r   r+   r4   r5   r?   rF   rR   r2   r@   rW   r^   r`   ra   rc   rs   r„   r”   rC   rA   rB   rN   r   r   r   r   r   r   .   sH   












  ÿ
  ÿ



r   )Ú
__future__r   r:   r.   r   Ú
quast_libsr   r   r   r   r   r   r   Úobjectr   r   r   r   r   Ú<module>   s   