a
    xdR"                     @   s:  d Z ddlZddl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
 ddl	mZ ddlmZ ddlmZ d	Zd
Zd
aejdd
ZddhZed ZZdd Zdd Zedd Zd,ddZdd Zdd ZedZedZ dd Z!dd Z"G d d! d!ej#Z$G d"d# d#Z%d$d% Z&d&d' Z'd(d) Z(d-d*d+Z)dS ).zLogging utilities.    N)contextmanager)
LOG_LEVELS)
get_logger)safe_str   )colored)ColorFormatterLoggingProxybase_loggerset_in_sighandlerin_sighandlerr   get_task_loggermlevelget_multiprocessing_loggerreset_multiprocessing_loggerr   FMP_LOGZceleryzcelery.taskc                 C   s   | a dS )z8Set flag signifiying that we're inside a signal handler.N)_in_sighandler)value r   H/var/www/html/Ranjet/env/lib/python3.9/site-packages/celery/utils/log.pyr   &   s    r   c               
   c   s   t  } ttjjj td g }|D ]Z}zB|jD ]6}z|| vrT|j	V  | 
| W q4 tyh   Y q40 q4W q( ty   Y q(0 q(d S N)setlistloggingLoggermanager
loggerDictvalues	getLoggerhandlersstreamaddAttributeError)seenloggerslhandlerr   r   r   iter_open_logger_fds,   s    

r'   c                   c   s*   t d zdV  W t d n
t d 0 dS )z5Context that records that we are in a signal handler.TNF)r   r   r   r   r   r   =   s    r     c                 C   sl   | t   }}t|D ]D}||kr& dS ||v r@td| jd|| |j}|s qhqtd| dS )NTzLogger z parents recursivezLogger hierarchy exceeds F)r   rangeRuntimeErrornamer!   parent)r%   pmaxthisr#   _r   r   r   
logger_isaG   s    
r1   c                 C   s   t || s| |_|S r   )r1   r,   )Zparent_loggerZlogger_r   r   r   _using_logger_parentZ   s    
r2   c                 C   s.   t | }tj||jfvr*|tur*tt|}|S )zGet logger by name.)_get_loggerr   rootr,   r
   r2   )r+   r%   r   r   r   r   `   s    
r   zcelery.workerc                 C   s&   | t v rtd| dttt| S )z#Get logger for task module by name.zLogger name z is reserved!)RESERVED_LOGGER_NAMESr*   r2   task_loggerr   )r+   r   r   r   r   l   s    r   c                 C   s    | rt | tjst|   S | S )z$Convert level name/int to log level.)
isinstancenumbersIntegralr   upper)levelr   r   r   r   s   s    r   c                   @   sP   e Zd ZdZe jZed ed ed ed dZdd	d
Zdd Z	dd Z
dS )r   z5Logging formatter that adds colors based on severity.ZblueZyellowZredZmagenta)DEBUGWARNINGERRORCRITICALNTc                 C   s   t j| | || _d S r   )r   	Formatter__init__	use_color)selffmtrB   r   r   r   rA      s    zColorFormatter.__init__c                 C   s(   |rt |tst }tj| |}|S r   )r7   tuplesysexc_infor   r@   formatException)rC   eirr   r   r   rH      s    zColorFormatter.formatExceptionc                 C   s&  t j| |}| j|j}|jdkr.t n|j}|r| jrzPz.t	|t
rdt
|t|W W S t||W W S  ty   t| Y W S 0 W n ty } zj|jddt||  }|_|_z*t j| |W || |_|_W  Y d }~S || |_|_0 W Y d }~n
d }~0 0 nt|S d S )Nr   z<Unrepresentable {!r}: {!r}>)r   r@   formatcolorsget	levelnamerG   rF   rB   r7   strr   UnicodeDecodeError	Exceptionmsgtype)rC   recordrR   colorZeinfoexcZprev_msgr   r   r   rK      s,    

(zColorFormatter.format)NT)__name__
__module____qualname____doc__r   namesCOLORSrL   rA   rH   rK   r   r   r   r   r   z   s   
r   c                   @   sd   e Zd ZdZdZdZdZejZ	e
 ZdddZdd Zd	d
 Zdd Zdd Zdd Zdd ZdS )r	   zForward file object to :class:`logging.Logger` instance.

    Arguments:
        logger (~logging.Logger): Logger instance to forward to.
        loglevel (int, str): Log level to use when logging messages.
    wNFc                 C   s*   || _ t|p| j jp| j| _|   d S r   )loggerr   r;   loglevel_safewrap_handlers)rC   r^   r_   r   r   r   rA      s    zLoggingProxy.__init__c                    s   dd   fdd| j jD S )Nc                 S   s    G dd dt j}| j| _d S )Nc                   @   s   e Zd Zdd ZdS )zRLoggingProxy._safewrap_handlers.<locals>.wrap_handler.<locals>.WithSafeHandleErrorc                 S   s*   zt d tj W n ty$   Y n0 d S r   )	traceback	print_excrF   
__stderr__OSError)rC   rT   r   r   r   handleError   s    z^LoggingProxy._safewrap_handlers.<locals>.wrap_handler.<locals>.WithSafeHandleError.handleErrorN)rW   rX   rY   re   r   r   r   r   WithSafeHandleError   s   rf   )r   Handlerre   )r&   rf   r   r   r   wrap_handler   s    z5LoggingProxy._safewrap_handlers.<locals>.wrap_handlerc                    s   g | ]} |qS r   r   ).0hrh   r   r   
<listcomp>       z3LoggingProxy._safewrap_handlers.<locals>.<listcomp>)r^   r   rC   r   rk   r   r`      s    zLoggingProxy._safewrap_handlersc                 C   s   t r"t|}t|tjd t|S t| jddr4dS |r|| js|d| j_	z*t|}| j
| j| t|W d| j_	S d| j_	0 dS )z Write message to logging object.)filerecurse_protectionFr   T)r   r   printrF   rc   lengetattr_threadclosedrp   r^   logr_   )rC   dataZ	safe_datar   r   r   write   s     

zLoggingProxy.writec                 C   s   |D ]}|  | qdS )zWrite list of strings to file.

        The sequence can be any iterable object producing strings.
        This is equivalent to calling :meth:`write` for each string.
        N)rx   )rC   sequencepartr   r   r   
writelines   s    zLoggingProxy.writelinesc                 C   s   d S r   r   rn   r   r   r   flush   s    zLoggingProxy.flushc                 C   s
   d| _ d S )NT)ru   rn   r   r   r   close   s    zLoggingProxy.closec                 C   s   dS )zHere for file support.Fr   rn   r   r   r   isatty   s    zLoggingProxy.isatty)N)rW   rX   rY   rZ   moder+   ru   r   r>   r_   	threadinglocalrt   rA   r`   rx   r{   r|   r}   r~   r   r   r   r   r	      s   

r	   c                  C   s0   zddl m}  W n ty"   Y n
0 |  S dS )z"Return the multiprocessing logger.r   utilN)billiardr   ImportErrorr   r   r   r   r   r     s
    r   c                  C   s8   zddl m}  W n ty"   Y n0 t| dr4d| _dS )z$Reset multiprocessing logging setup.r   r   _loggerN)r   r   r   hasattrr   r   r   r   r   r     s    
r   c                  C   s0   zddl m}  W n ty"   Y n
0 |  S d S )Nr   process)r   r   r   current_processr   r   r   r   r     s
    r   c                 C   s"   t t dd }|d ur||  S |S )Nindex)rs   r   )baser   r   r   r   current_process_index#  s    r   )r(   )r   )*rZ   r   r8   osrF   r   ra   
contextlibr   Z	kombu.logr   r   r3   Zkombu.utils.encodingr   Ztermr   __all__Z_process_awarer   environrM   r   r5   r
   r^   r   r'   r   r1   r2   r6   Zworker_loggerr   r   r@   r   r	   r   r   r   r   r   r   r   r   <module>   sD   
	
7T
	