o
    Df5"                     @   sJ  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
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)AnyStrSequence)
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_LOGceleryzcelery.taskc                 C   s   | a dS )z8Set flag signifiying that we're inside a signal handler.N)_in_sighandler)value r   I/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/utils/log.pyr   '   s   r   c               
   c   s    t  } ttjjj td g }|D ]+}z |jD ]}z|| vr+|j	V  | 
| W q ty5   Y qw W q ty@   Y qw 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 dS t d w )z5Context that records that we are in a signal handler.TNF)r   r   r   r   r   r   >   s
   r     c                 C   sj   | t  }}t|D ]#}||kr dS ||v r td| jd|| |j}|s- dS q
td| )NTzLogger z parents recursivezLogger hierarchy exceeds F)r   rangeRuntimeErrornamer$   parent)r(   pmaxthisr&   _r   r   r   
logger_isaH   s   
r4   c                 C   s   t || s| |_|S r   )r4   r/   )parent_loggerlogger_r   r   r   _using_logger_parent[   s   
r7   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   r7   )r.   r(   r   r   r   r   a   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-   r7   task_loggerr   )r.   r   r   r   r   m   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   t   s   r   c                       s`   e Zd ZdZe jZed ed ed ed dZd fd	d
	Z fddZ	 fddZ
  ZS )r
   z5Logging formatter that adds colors based on severity.blueyellowredmagenta)DEBUGWARNINGERRORCRITICALNTc                    s   t  | || _d S r   )super__init__	use_color)selffmtrK   	__class__r   r   rJ      s   
zColorFormatter.__init__c                    s&   |rt |tst }t |}|S r   )r<   tuplesysexc_inforI   formatException)rL   eirrN   r   r   rS      s   zColorFormatter.formatExceptionc                    s  t  |}| j|j}|jdkrt n|j}|r| jrz&zt|t	r/t	|t
|W W S t
||W W S  tyD   t
| Y W S w  ty~ } z.|jddt||}|_|_zt  |W |||_|_W  Y d }~S |||_|_w d }~ww t
|S )Nr   z<Unrepresentable {!r}: {!r}>)rI   formatcolorsget	levelnamerR   rQ   rK   r<   strr   UnicodeDecodeError	Exceptionmsgtype)rL   recordr]   coloreinfoexcprev_msgrN   r   r   rV      s.   


,zColorFormatter.formatNT)__name__
__module____qualname____doc__r	   namesCOLORSrW   rJ   rS   rV   __classcell__r   r   rN   r   r
   {   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)rL   rm   rn   r   r   r   rJ      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 d S  ty   Y d S w r   )	traceback	print_excrQ   
__stderr__OSError)rL   r_   r   r   r   handleError   s
   z^LoggingProxy._safewrap_handlers.<locals>.wrap_handler.<locals>.WithSafeHandleError.handleErrorN)re   rf   rg   rt   r   r   r   r   WithSafeHandleError   s    ru   )r   Handlerrt   )r)   ru   r   r   r   wrap_handler   s   z5LoggingProxy._safewrap_handlers.<locals>.wrap_handlerc                    s   g | ]} |qS r   r   ).0hrw   r   r   
<listcomp>   s    z3LoggingProxy._safewrap_handlers.<locals>.<listcomp>)rm   r"   rL   r   rz   r   ro      s   zLoggingProxy._safewrap_handlersc                 C   s   t rt|}t|tjd t|S t| jddrdS |rJ| jsJd| j_	z!t|
d}|r>| j| j| t|W d| j_	S W d| j_	dS d| j_	w dS )z Write message to logging object.)filerecurse_protectionFr   T
)r   r   printrQ   rr   lengetattr_threadclosedr~   rstriprm   logrn   )rL   data	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)r   )rL   sequencepartr   r   r   
writelines   s   zLoggingProxy.writelinesc                 C   s   d S r   r   r|   r   r   r   flush   s   zLoggingProxy.flushc                 C   s
   d| _ d S rd   )r   r|   r   r   r   close   s   
zLoggingProxy.closec                 C   s   dS )zHere for file support.Fr   r|   r   r   r   isatty  s   zLoggingProxy.isattyr   )re   rf   rg   rh   moder.   r   r   rG   rn   	threadinglocalr   rJ   ro   r   r   r   r   r   r   r   r   r   r      s    

r   c                  C   s,   zddl m}  W |  S  ty   Y dS w )z"Return the multiprocessing logger.r   utilN)billiardr   ImportErrorr   r   r   r   r   r     s   r   c                  C   s>   zddl m}  W n
 ty   Y dS w t| drd| _dS dS )z$Reset multiprocessing logging setup.r   r   _loggerN)r   r   r   hasattrr   r   r   r   r   r     s   

r   c                  C   s,   zddl m}  W |  S  ty   Y d S w )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)r   r   )baser   r   r   r   current_process_index%  s   r   )r+   )r   )-rh   r   r=   osrQ   r   rp   
contextlibr   typingr   r   	kombu.logr   r   r8   kombu.utils.encodingr   termr	   __all___process_awarer   environrX   r   r:   r   rm   r   r*   r   r4   r7   r;   worker_loggerr   r   	Formatterr
   r   r   r   r   r   r   r   r   r   <module>   sH    

	7U
	