
    `f5"                        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          xZZd Zd Zed             Zd!dZ d Z!d Z ed          Z" ed          Z#d Z$d Z% G d dej&                  Z' G d d          Z(d Z)d Z*d Z+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                 
    | a dS )z8Set flag signifiying that we're inside a signal handler.N)_in_sighandler)values    B/var/www/html/env/lib/python3.11/site-packages/celery/utils/log.pyr   r   '   s     NNN    c               #   b  K   t                      } t          t          j        j        j                                                  t          j        d           gz   }|D ]P}	 |j        D ]5}	 || vr|j	        V  | 
                    |           &# t          $ r Y 2w xY wA# t          $ r Y Mw xY wd S N)setlistloggingLoggermanager
loggerDictvalues	getLoggerhandlersstreamaddAttributeError)seenloggerslhandlers       r   iter_open_logger_fdsr-   -   s      55DGN*5<<>>??!$''()G 
 
		:  d**%n,,,)))%   D  	 	 	D	
 
s6   !	B+"BB
BBBB
B,+B,c               #   x   K   t          d           	 dV  t          d           dS # t          d           w xY w)z5Context that records that we are in a signal handler.TNF)r    r   r   r   r   >   sM       d!%     %    s   ( 9  c                     | t                      }}t          |          D ]G}||k    r dS ||v rt          d| j        d          |                    |           |j        }|s nHt          d|           dS )NTzLogger z parents recursivezLogger hierarchy exceeds F)r   rangeRuntimeErrornamer'   parent)r+   pmaxthisr)   _s         r   
logger_isar:   H   s    CEE$D3ZZ > >19944t||":af:::   HHTNNN;D  <s<<===5r   c                 4    t          ||           s| |_        |S r   )r:   r5   )parent_loggerlogger_s     r   _using_logger_parentr>   [   s     g}-- '&Nr   c                     t          |           }t          j        ||j        fvr|t          urt          t          |          }|S )zGet logger by name.)_get_loggerr   rootr5   r   r>   )r4   r+   s     r   r   r   a   s@    DA|Aqx=((Qk-A-A a00Hr   zcelery.workerc                 ~    | 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_NAMESr3   r>   task_loggerr   )r4   s    r   r   r   m   s@    $$$?$???@@@Z-=-=>>>r   c                 |    | r9t          | t          j                  st          |                                          S | S )z$Convert level name/int to log level.)
isinstancenumbersIntegralr   upper)levels    r   r   r   t   s6     )Zw'788 )%++--((Lr   c                        e Zd ZdZ e            j        Zed         ed         ed         ed         dZd fd		Z fd
Z	 fdZ
 xZS )r   z5Logging formatter that adds colors based on severity.blueyellowredmagenta)DEBUGWARNINGERRORCRITICALNTc                 X    t                                          |           || _        d S r   )super__init__	use_color)selffmtrW   	__class__s      r   rV   zColorFormatter.__init__   s&    "r   c                     |r(t          |t                    st          j                    }t	                                          |          }|S r   )rF   tuplesysexc_inforU   formatException)rX   eirrZ   s      r   r_   zColorFormatter.formatException   sC     	 jU++ 	 BGG##B''r   c                    t                                          |          }| j                            |j                  }|j        dk    rt          j                    n|j        }|r| j        r	 	 t          |t                    r%t           |t          |                              S t           ||                    S # t          $ r t          |          cY S w xY w# t          $ r}|j        dd                    t          |          |          c}|_        |_        	 t                                          |          ||c|_        |_        cY d }~S # ||c|_        |_        w xY wd }~ww xY wt          |          S )Nr	   z<Unrepresentable {!r}: {!r}>)rU   formatcolorsget	levelnamer^   r]   rW   rF   strr   UnicodeDecodeError	Exceptionmsgtype)rX   recordrj   coloreinfoexcprev_msgrZ   s          r   rc   zColorFormatter.format   s   ggnnV$$ 011 #)/Q"6"6FO 	!T^ 	!B
)!#s++ 9"55##7#7888#EE#JJ///) ) ) )#C==((() 	B 	B 	BJ#A#H#HS		3$ $ 6&/6:
B 77>>&112:E/FJ(E/FJAAAA	B C== sT   49C .C C"C% !C""C% %
E5/7E0' EE0E5E--E00E5NT)__name__
__module____qualname____doc__r
   namesCOLORSrd   rV   r_   rc   __classcell__)rZ   s   @r   r   r   {   s        ?? WYY_F(#9%	 F# # # # # #    ! ! ! ! ! ! ! ! !r   r   c                   v    e Zd ZdZdZdZdZej        Z	 e
j                    ZddZd Zd Zd Zd	 Zd
 Z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                     || _         t          |p| j         j        p| j                  | _        |                                  d S r   )loggerr   rJ   loglevel_safewrap_handlers)rX   r|   r}   s      r   rV   zLoggingProxy.__init__   sC     xM4;+<MNN!!!!!r   c                 :    d fd| j         j        D             S )Nc                 ^     G d dt           j                  } |            j        | _        d S )Nc                       e Zd Zd ZdS )RLoggingProxy._safewrap_handlers.<locals>.wrap_handler.<locals>.WithSafeHandleErrorc                 h    	 t          j        d t          j                   d S # t          $ r Y d S w xY wr   )	traceback	print_excr]   
__stderr__OSError)rX   rl   s     r   handleErrorz^LoggingProxy._safewrap_handlers.<locals>.wrap_handler.<locals>.WithSafeHandleError.handleError   sD    !+D#.AAAAA"   s   # 
11N)rr   rs   rt   r   r/   r   r   WithSafeHandleErrorr      s#            r   r   )r   Handlerr   )r,   r   s     r   wrap_handlerz5LoggingProxy._safewrap_handlers.<locals>.wrap_handler   sJ        go    #6"5"7"7"CGr   c                 &    g | ]} |          S r/   r/   ).0hr   s     r   
<listcomp>z3LoggingProxy._safewrap_handlers.<locals>.<listcomp>   s!    >>>AQ>>>r   )r|   r%   )rX   r   s    @r   r~   zLoggingProxy._safewrap_handlers   s6    

	D 
	D 
	D ?>>>)=>>>>r   c                    t           r9t          |          }t          |t          j                   t          |          S t          | j        dd          rdS |r| j        sd| j        _	        	 t          |          
                    d          }|r;| j                            | j        |           t          |          d| j        _	        S 	 d| j        _	        n# d| j        _	        w xY wdS )z Write message to logging object.)filerecurse_protectionFr   T
)r   r   printr]   r   lengetattr_threadclosedr   rstripr|   logr}   )rX   data	safe_datas      r   writezLoggingProxy.write   s      	" I)#.1111y>>!4<!5u== 	1 	8 	8.2DL+8$TNN11$77	 *KOODM9===y>>27//	* 38//%/7777qs   /AC C*c                 :    |D ]}|                      |           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   )rX   sequenceparts      r   
writelineszLoggingProxy.writelines   s2      	 	DJJt	 	r   c                     d S r   r/   rX   s    r   flushzLoggingProxy.flush   s	     	r   c                     d| _         d S rq   )r   r   s    r   closezLoggingProxy.close   s     r   c                     dS )zHere for file support.Fr/   r   s    r   isattyzLoggingProxy.isatty  s    ur   r   )rr   rs   rt   ru   moder4   r   r   rR   r}   	threadinglocalr   rV   r~   r   r   r   r   r   r/   r   r   r   r      s          DDF}HioG" " " "? ? ?$  *    
  
    r   r   c                  Z    	 ddl m}  |                                 S # t          $ r Y dS w xY w)z"Return the multiprocessing logger.r   utilN)billiardr   r   ImportErrorr   s    r   r   r     sO    !!!!!!!            
**c                  h    	 ddl m}  t          | d          r	d| _        dS dS # t          $ r Y dS w xY w)z$Reset multiprocessing logging setup.r   r   _loggerN)r   r   hasattrr   r   r   s    r   r   r     sf     !!!!!! 4## 	 DLLL	  	     s   # 
11c                  Z    	 ddl m}  |                                 S # t          $ r Y d S w xY w)Nr   process)r   r   current_processr   r   s    r   r   r     sQ    )$$$$$$ &&(((    r   c                 N    t          t                      dd           }||| z   n|S )Nindex)r   r   )baser   s     r   current_process_indexr   %  s,    O%%w55E ,54<<%7r   )r0   )r	   )-ru   r   rG   osr]   r   r   
contextlibr   typingr   r   	kombu.logr   r   r@   kombu.utils.encodingr   termr
   __all___process_awarer   environre   r   rC   r   r|   r   r-   r   r:   r>   rD   worker_loggerr   r   	Formatterr   r   r   r   r   r   r/   r   r   <module>r      sU       				 



         % % % % % % # # # # # # # #             / / / / / / ) ) ) ) ) )       	%	(	(!=1  #{8,, ,f    " ! ! !   &     j''
?++? ? ?  4! 4! 4! 4! 4!W& 4! 4! 4!nR R R R R R R Rj! ! !     ) ) )8 8 8 8 8 8r   