U
    .e                     @  s   d Z ddlm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
mZ ddlmZ ddlmZ d	ZeejZeej ed
ej eejd
 ejdZdd Zdd Zdd ZdddZG dd dZG dd deZ dddZ!dS )zLogging Utilities.    )annotationsN)WatchedFileHandler   )	safe_reprsafe_strmaybe_evaluate)cached_property)LogMixin
LOG_LEVELSget_loglevelsetup_loggingFATALDISABLE_TRACEBACKSc                 C  s,   t | trt| } | js(| t  | S )zGet logger by name.)
isinstancestrlogging	getLoggerhandlers
addHandlerNullHandler)logger r   -/tmp/pip-unpacked-wheel-48hrr5dg/kombu/log.py
get_logger   s
    

r   c                 C  s   t | trt|  S | S )zGet loglevel by name.)r   r   r   )levelr   r   r   r   !   s    
r   c                 c  sF   |  d}t|dd  D ]&\}}|r2||d  s6d n|d V  qd S )N%r   r   )split	enumerate)fmtpartsier   r   r   naive_format_parts(   s    
r#   c                 c  sP   |st tdn|}tt| D ],\}}||}|r@||| n|| V  qd S )N)sr)r   r   r   r#   get)r   argsfiltersindextypeZfiltr   r   r   safeify_format.   s    
r+   c                   @  sx   e Zd 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edd Zedd ZdS )r
   z.Mixin that adds severity methods to any class.c                 O  s   | j tjf||S N)logr   DEBUGselfr'   kwargsr   r   r   debug8   s    zLogMixin.debugc                 O  s   | j tjf||S r,   )r-   r   INFOr/   r   r   r   info;   s    zLogMixin.infoc                 O  s   | j tjf||S r,   )r-   r   WARNr/   r   r   r   warn>   s    zLogMixin.warnc                 O  s    | dd | jtjf||S Nexc_infoT)
setdefaultr-   r   ERRORr/   r   r   r   errorA   s    zLogMixin.errorc                 O  s    | dd | jtjf||S r7   )r9   r-   r   CRITICALr/   r   r   r   criticalE   s    zLogMixin.criticalc                 C  s   | j  d| S )Nz - )logger_name)r0   textr   r   r   annotateI   s    zLogMixin.annotatec              	   O  s   t r|dd  | j|r| jj}t|dkrt|d trdd |dd  D }||| |d 	ddft
t|d ||S | jj|| dtt|f|S d S )	Nr8   r   r   c                 S  s   g | ]}t |qS r   r   ).0argr   r   r   
<listcomp>R   s     z LogMixin.log.<locals>.<listcomp>z%rz%s )r   popr   isEnabledForr-   lenr   r   r@   replacelistr+   joinmapr   )r0   Zseverityr'   r1   r-   expandr   r   r   r-   L   s&     zLogMixin.logc                 C  s
   t | jS r,   )r   r>   r0   r   r   r   r   [   s    zLogMixin.get_loggerc                 C  s   | j | |S r,   )r   rF   r   r0   r   r   r   r   is_enabled_for^   s    zLogMixin.is_enabled_forc                 C  s   t |tjst| S |S r,   )r   numbersIntegralr   rN   r   r   r   r   a   s    zLogMixin.get_loglevelc                 C  s   |   S r,   )r   rM   r   r   r   r   f   s    zLogMixin.loggerc                 C  s   | j jS r,   )	__class____name__rM   r   r   r   r>   j   s    zLogMixin.logger_nameN)rS   
__module____qualname____doc__r2   r4   r6   r;   r=   r@   r-   r   rO   r   r	   r   propertyr>   r   r   r   r   r
   5   s   
r
   c                      s2   e Zd ZdddZ fddZedd Z  ZS )	LogNc                 C  s   || _ || _d S r,   )_logger_name_logger)r0   namer   r   r   r   __init__q   s    zLog.__init__c                   s   | j r| j S t  S r,   )rZ   superr   rM   rR   r   r   r   u   s    zLog.get_loggerc                 C  s   | j S r,   )rY   rM   r   r   r   r>   z   s    zLog.logger_name)N)rS   rT   rU   r\   r   rW   r>   __classcell__r   r   r^   r   rX   o   s   
rX   c                 C  s^   t  }t| pd} |r|ntj}|jsZt|dr>t |}nt|}|	| |
|  |S )zSetup logging.r:   write)r   r   r   sys
__stderr__r   hasattrStreamHandlerr   r   setLevel)Zloglevellogfiler   handlerr   r   r   r      s    


r   )N)NN)"rV   
__future__r   r   rP   osra   logging.handlersr   Zutils.encodingr   r   Zutils.functionalr   Zutils.objectsr	   __all__dict_nameToLevelr   update_levelToNamer9   r   environr&   r   r   r   r#   r+   r
   rX   r   r   r   r   r   <module>   s,   
	
: