o
    wvXj×"  ã                   @   sp  d Z ddlmZmZm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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&e/ƒZ0d'd(„ Z1d)d*„ Z2d+d,„ Z3d0d-d.„Z4dS )1zLogging utilities.é    )Úabsolute_importÚprint_functionÚunicode_literalsN)Úcontextmanager)ÚPY3Úvalues)Ú
LOG_LEVELS)Ú
get_logger)Úsafe_str)Ústring_tÚtext_té   )Ú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   úM/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/utils/log.pyr   ,   s   r   c               
   c   s†   � t ƒ } 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Úlistr   ÚloggingÚLoggerÚmanagerÚ
loggerDictÚ	getLoggerÚhandlersÚstreamÚaddÚAttributeError)ÚseenÚloggersÚlÚhandlerr   r   r   Úiter_open_logger_fds2   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   C   s
   €r   éè  c                 C   sh   | t ƒ }}t|ƒD ]"}||kr dS ||v rtd | j¡ƒ‚| |¡ |j}|s, dS q
td |¡ƒ‚)NTzLogger {0!r} parents recursivezLogger hierarchy exceeds {0}F)r   ÚrangeÚRuntimeErrorÚformatÚnamer(   Úparent)r,   ÚpÚmaxÚthisr*   Ú_r   r   r   Ú
logger_isaM   s   
ÿ
ür9   c                 C   s   t || ƒs| |_|S r   )r9   r4   )Úparent_loggerÚlogger_r   r   r   Ú_using_logger_parent`   s   
r<   c                 C   s.   t | ƒ}tj||jfvr|turtt|ƒ}|S )zGet logger by name.)Ú_get_loggerr!   Úrootr4   r   r<   )r3   r,   r   r   r   r	   f   s   
r	   zcelery.workerc                 C   s$   | t v rtd | ¡ƒ‚ttt| ƒƒS )z#Get logger for task module by name.zLogger name {0!r} is reserved!)ÚRESERVED_LOGGER_NAMESr1   r2   r<   Útask_loggerr	   )r3   r   r   r   r   r   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   y   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.ÚblueÚyellowÚredÚmagenta)ÚDEBUGÚWARNINGÚERRORÚCRITICALNTc                 C   s   t j | |¡ || _d S r   )r!   Ú	FormatterÚ__init__Ú	use_color)ÚselfÚfmtrP   r   r   r   rO   Œ   s   
zColorFormatter.__init__c                 C   s>   |rt |tƒst ¡ }tj | |¡}t |tƒrtst	|ƒS |S r   )
rA   ÚtupleÚsysÚexc_infor!   rN   ÚformatExceptionÚstrr   r
   )rQ   ÚeiÚrr   r   r   rV   �   s   zColorFormatter.formatExceptionc                 C   s
  t j | |¡}| j |j¡}|jdkrt ¡ n|j}|r�| jr�z&zt	|t
ƒr0t|t|ƒƒƒW W S t||ƒƒW W S  tyE   t|ƒ Y W S w  ty€ } z/|jdd t|ƒ|¡}|_|_zt j | |¡W |||_|_W  Y d }~S |||_|_w d }~ww t|ƒS )Nr   z<Unrepresentable {0!r}: {1!r}>)r!   rN   r2   ÚcolorsÚgetÚ	levelnamerU   rT   rP   rA   r   r   r
   ÚUnicodeDecodeErrorÚ	ExceptionÚmsgÚtype)rQ   Úrecordr_   ÚcolorÚeinfoÚexcÚprev_msgr   r   r   r2   ˜   s.   

ÿ
ÿÿ,€÷zColorFormatter.format©NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚnamesÚCOLORSrZ   rO   rV   r2   r   r   r   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   zÓForward 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   rE   ÚloglevelÚ_safewrap_handlers)rQ   rn   ro   r   r   r   rO   Ç   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_excrT   Ú
__stderr__ÚIOError)rQ   ra   r   r   r   ÚhandleError×   s
   ÿz^LoggingProxy._safewrap_handlers.<locals>.wrap_handler.<locals>.WithSafeHandleError.handleErrorN)rg   rh   ri   ru   r   r   r   r   ÚWithSafeHandleErrorÕ   s    rv   )r!   ÚHandlerru   )r-   rv   r   r   r   Úwrap_handlerÓ   s   z5LoggingProxy._safewrap_handlers.<locals>.wrap_handlerc                    s   g | ]}ˆ |ƒ‘qS r   r   )Ú.0Úh©rx   r   r   Ú
<listcomp>Þ   s    z3LoggingProxy._safewrap_handlers.<locals>.<listcomp>)rn   r&   ©rQ   r   r{   r   rp   Î   s   zLoggingProxy._safewrap_handlersc                 C   sx   t rtt|ƒtjd�S t| jddƒrdS | ¡ }|r8| js:d| j_	z| j
 | jt|ƒ¡ W d| j_	dS d| j_	w dS dS )z Write message to logging object.)ÚfileÚrecurse_protectionFNT)r   Úprintr
   rT   rs   ÚgetattrÚ_threadÚstripÚclosedr   rn   Úlogro   )rQ   Údatar   r   r   Úwriteà   s   
ûzLoggingProxy.writec                 C   s   |D ]}|   |¡ qdS )z°Write 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‡   )rQ   Ú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 rf   )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   )rg   rh   ri   rj   Úmoder3   r„   r!   rL   ro   Ú	threadingÚlocalr‚   rO   rp   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   )5rj   Ú
__future__r   r   r   r!   rB   ÚosrT   r�   rq   Ú
contextlibr   Ú
kombu.fiver   r   Ú	kombu.logr   r	   r=   Úkombu.utils.encodingr
   Úcelery.fiver   r   Útermr   Ú__all__Ú_process_awarer   Úenvironr[   r   r?   r   rn   r   r.   r   r9   r<   r@   Úworker_loggerr   r   rN   r   Úobjectr   r   r   r™   rœ   r   r   r   r   Ú<module>   sL   

	9O
	