
    7 fF                       U d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
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dlmZ erddlmZ ddlmZ ddlmZ dZdZ ed ej        ej        ej         ej!        ej"        eej#        d          Z$de%d<    ed ej"        eej#        d          Z&de%d<    ed ej         dej!        dej#        di          Z'de%d<   djd#Z(dkd'Z) G d( d)ej*                  Z+ G d* d+e+          Z, G d, d-e+          Z- G d. d"ej.                  Z/ G d/ d0ej0                  Z1 G d1 d2ej0                  Z2 G d3 d4ej3        j4                  Z5edld6            Z6edmd8            Z7edmd9            Z8edndod>            Z9edpd@            Z: G dA dB          Z; G dC dDej<                  Z=dqdIZ> G dJ dKej<                  Z? G dL dMej<                  Z@ G dN dOej<                  ZA G dP dQej<                  ZB G dR dSej<                  ZC G dT dUej<                  ZD G dV dWeD          ZE G dX dYeD          ZFdrd]ZG G d^ d_ejH                  ZI G d` da          ZJ G db dc          ZKdsdiZLdS )tz%Logging utility functions for Sphinx.    )annotationsN)defaultdict)contextmanager)IOTYPE_CHECKINGAny)nodes)get_source_line)SphinxWarning)colorize)abspath)	Generator)Node)Sphinxsphinx   c                     t           j        S N)loggingWARNING     I/var/www/equiseq/venv/lib/python3.11/site-packages/sphinx/util/logging.py<lambda>r      s     r   )CRITICALSEVEREERRORr   INFOVERBOSEDEBUGzdefaultdict[str, int]LEVEL_NAMESc                     t           j        S r   )r   NOTSETr   r   r   r   r   '   s    7> r   )r         zdefaultdict[int, int]VERBOSITY_MAPc                     dS )Nbluer   r   r   r   r   r   -   s    v r   darkredreddarkgrayzdefaultdict[int, str]	COLOR_MAPnamestrreturnSphinxLoggerAdapterc                n    t          j        t          dz   | z             }d|_        t	          |i           S )a  Get logger wrapped by :class:`sphinx.util.logging.SphinxLoggerAdapter`.

    Sphinx logger always uses ``sphinx.*`` namespace to be independent from
    settings of root logger.  It ensures logging is consistent even if a
    third-party extension or imported application resets logger settings.

    Example usage::

        >>> from sphinx.util import logging
        >>> logger = logging.getLogger(__name__)
        >>> logger.info('Hello, this is an extension!')
        Hello, this is an extension!
    .F)r   	getLogger	NAMESPACEdisabledr0   )r-   loggers     r   r3   r3   4   s4     y3566FFOvr***r   recordslist[logging.LogRecord]Nonec                    | D ]a}|                                 |_        d|_        t          |dd          }t	          |t
          j                  rt          |          |_        bdS )zConvert LogRecord serializable.r   locationN)	
getMessagemsgargsgetattr
isinstancer	   r   get_node_locationr;   )r7   rr;   s      r   convert_serializablerC   J   sf     5 51j$//h
++ 	5*844AJ5 5r   c                  8     e Zd ZU dZdZdZded<   d	 fdZ xZS )
SphinxLogRecordz$Log record class supporting location Nr   r;   r/   r.   c                    t                                                      }t          | dd           }|r| d| j         | }n| j        |vr
| j        |z   }|S )Nr;   z: )superr<   r?   prefix)selfmessager;   	__class__s      r   r<   zSphinxLogRecord.getMessage[   sk    ''$$&&4T22 	,!;;T[;';;GG[''kG+Gr   r/   r.   )	__name__
__module____qualname____doc__rI   r;   __annotations__r<   __classcell__rL   s   @r   rE   rE   V   s[         ..FH         r   rE   c                      e Zd ZdZdZdS )SphinxInfoLogRecordz)Info log record class supporting locationrF   N)rN   rO   rP   rQ   rI   r   r   r   rV   rV   f   s        33FFFr   rV   c                  *    e Zd ZdZedd            ZdS )SphinxWarningLogRecordz,Warning log record class supporting locationr/   r.   c                b    | j         t          j        k    rdS | j         t          j        k    rdS dS )Nz
CRITICAL: zERROR: z	WARNING: )levelnor   r   r   rJ   s    r   rI   zSphinxWarningLogRecord.prefixm   s0    <7+++<\W]**9;r   NrM   )rN   rO   rP   rQ   propertyrI   r   r   r   rX   rX   k   s8        66   X  r   rX   c                  D     e Zd ZdZg dZd fdZddZddZddZ xZ	S )r0   z9LoggerAdapter allowing ``type`` and ``subtype`` keywords.)typesubtyper;   nonlcoloroncelevel	int | strr=   r.   r>   r   kwargsr/   r9   c                    t          |t                    r  t                      j        ||g|R i | d S t          |         } t                      j        ||g|R i | d S r   )r@   intrH   logr!   )rJ   rc   r=   r>   re   rZ   rL   s         r   rh   zSphinxLoggerAdapter.log{   s}     eS!! 	7EGGKs4T444V44444!%(GEGGK6t666v66666r   c                4     | j         t          |g|R i | d S r   )rh   r   )rJ   r=   r>   re   s       r   verbosezSphinxLoggerAdapter.verbose   s,    #/////////r   dicttuple[str, dict]c                    |                     di           }| j        D ]}||v r|                    |          ||<   ||fS )Nextra)
setdefaultKEYWORDSpop)rJ   r=   re   rn   keywords        r   processzSphinxLoggerAdapter.process   sS    !!'2..} 	5 	5G&  !'G!4!4gF{r   recordlogging.LogRecordc                :    | j                             |           d S r   )r6   handlerJ   rt   s     r   rw   zSphinxLoggerAdapter.handle   s    6"""""r   )
rc   rd   r=   r.   r>   r   re   r   r/   r9   )r=   r.   r>   r   re   r   r/   r9   )r=   r.   re   rk   r/   rl   rt   ru   r/   r9   )
rN   rO   rP   rQ   rp   rh   rj   rs   rw   rS   rT   s   @r   r0   r0   w   s        CCGGGH7 7 7 7 7 70 0 0 0   # # # # # # # #r   c                      e Zd ZdZdS )WarningStreamHandlerzStreamHandler for warnings.N)rN   rO   rP   rQ   r   r   r   r{   r{      s        %%Dr   r{   c                  $     e Zd ZdZd fdZ xZS )NewLineStreamHandlerzAStreamHandler which switches line terminator by record.nonl flag.rt   ru   r/   r9   c                   	 |                                   t          |dd          rd| _        t                                          |           d| _        |                                  d S # d| _        |                                  w xY w)Nr`   FrF   
)acquirer?   
terminatorrH   emitrelease)rJ   rt   rL   s     r   r   zNewLineStreamHandler.emit   sz    	LLNNNvvu-- %"$GGLL   "DOLLNNNNN #DOLLNNNNs   AA- -B
ry   )rN   rO   rP   rQ   r   rS   rT   s   @r   r}   r}      sC        KK	 	 	 	 	 	 	 	 	 	r   r}   c                  P     e Zd ZU dZded<   d fdZdd
ZddZddZddZ	 xZ
S )MemoryHandlerzHandler buffering all logs.r8   bufferr/   r9   c                J    t                                          d           d S )N)rH   __init__)rJ   rL   s    r   r   zMemoryHandler.__init__   s!    r   rt   ru   boolc                    dS )NFr   rx   s     r   shouldFlushzMemoryHandler.shouldFlush   s    ur   c                    d S r   r   r[   s    r   flushzMemoryHandler.flush   s	     	r   r6   logging.Loggerc                    |                                   	 | j        D ]}|                    |           g | _        |                                  d S # |                                  w xY wr   )r   r   rw   r   )rJ   r6   rt   s      r   flushTozMemoryHandler.flushTo   sd    	+ & &f%%%%DKLLNNNNNDLLNNNNs   &A A(c                $    | j         g c}| _         |S r   )r   )rJ   r   s     r   clearzMemoryHandler.clear   s    "k2r   r/   r9   rt   ru   r/   r   )r6   r   r/   r9   )r/   r8   )rN   rO   rP   rQ   rR   r   r   r   r   r   rS   rT   s   @r   r   r      s         %%####           
          r   r   &Generator[logging.Handler, None, None]c               #    K   t          j        t                    } t                      }|                    t           j                   	 g }| j        dd         D ]A}t          |t                    r*| 	                    |           |
                    |           B|                     |           |V  | 	                    |           |D ]}|                     |           |                    |            dS # | 	                    |           |D ]}|                     |           |                    |            w xY w)zgContext manager to postpone logging warnings temporarily.

    Similar to :func:`pending_logging`.
    N)r   r3   r4   r   setLevelr   handlersr@   r{   removeHandlerappend
addHandlerr   r6   
memhandlerr   handlers       r   pending_warningsr      s`      y))FJ(((#qqq) 	) 	)G'#788 )$$W---(((*%%%Z((( 	' 	'Gg&&&&6""""" 	Z((( 	' 	'Gg&&&&6""""s   
A,C< <AE$Generator[MemoryHandler, None, None]c               #    K   t          j        t                    } t                      }	 g }| j        dd         D ],}|                     |           |                    |           -|                     |           |V  |                     |           |D ]}|                     |           dS # |                     |           |D ]}|                     |           w xY w)zContext manager to suppress logging all logs temporarily.

    For example::

        >>> with suppress_logging():
        >>>     logger.warning('Warning message!')  # suppressed
        >>>     some_long_process()
        >>>
    N)r   r3   r4   r   r   r   r   r   r   s       r   suppress_loggingr      s      y))FJ'qqq) 	% 	%G  )))OOG$$$$*%%%Z((( 	' 	'Gg&&&&	' 	' 	Z((( 	' 	'Gg&&&&	's   AB3 31C$c               #     K   t          j        t                    } 	 t                      5 }|V  ddd           n# 1 swxY w Y   |                    |            dS # |                    |            w xY w)a$  Context manager to postpone logging all logs temporarily.

    For example::

        >>> with pending_logging():
        >>>     logger.warning('Warning message!')  # not flushed yet
        >>>     some_long_process()
        >>>
        Warning message!  # the warning is flushed here
    N)r   r3   r4   r   r   )r6   r   s     r   pending_loggingr      s       y))F# 	:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	6"""""
6""""s+   A <A A  A A A A5Tskipr   Generator[None, None, None]c              #  F  K   t          j        t                    }| du rdV  dS 	 t                      }|j        D ]}|j                            d|           dV  |j        D ]}|                    |           dS # |j        D ]}|                    |           w xY w)z9Context manager to skip WarningIsErrorFilter temporarily.FNr   )r   r3   r4   DisableWarningIsErrorFilterr   filtersinsertremoveFilter)r   r6   disablerr   s       r   skip_warningiserrorr     s       y))Fu}}		/244H!? 4 4 &&q(3333EEE!? / /$$X..../ /6? / /$$X..../s   7A? ?!B rI   c              #    K   t          j        t                    }d}|j        D ]}t	          |t
                    r|} ndV  dS d}|j        D ]}t	          |t                    r|} n|r(	 |j        }| |_        dV  ||_        dS # ||_        w xY wt          |           }	 |	                    |           dV  |
                    |           dS # |
                    |           w xY w)zContext manager to prepend prefix to all warning log records temporarily.

    For example::

        >>> with prefixed_warnings("prefix:"):
        >>>     logger.warning('Warning message!')  # => prefix: Warning message!

    .. versionadded:: 2.0
    N)r   r3   r4   r   r@   r{   r   MessagePrefixFilterrI   	addFilterr   )rI   r6   warning_handlerr   prefix_filter_filterpreviouss          r   prefixed_warningsr   &  sH      y))FO?  g344 	%OE	
 	M"*  g233 	#ME	  8	,$+H#)M EEE#+M   8M ++++ ,F33	8%%m444EEE((77777O((7777s   /B
 
	B&C C-c                  .    e Zd ZddZedd            ZdS )	LogCollectorr/   r9   c                    g | _         d S r   )logsr[   s    r   r   zLogCollector.__init__U  s    -/			r   r   c              #     K   t                      5 }d V  |                                | _        d d d            d S # 1 swxY w Y   d S r   )r   r   r   )rJ   r   s     r   collectzLogCollector.collectX  s       	+*EEE"((**DI	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   <A A Nr   )r/   r   )rN   rO   rP   r   r   r   r   r   r   r   r   T  sH        0 0 0 0 + + + ^+ + +r   r   c                      e Zd ZdZddZdS )	
InfoFilterz"Filter error and warning messages.rt   ru   r/   r   c                ,    |j         t          j        k     S r   )rZ   r   r   rx   s     r   filterzInfoFilter.filterc  s    ~//r   Nr   rN   rO   rP   rQ   r   r   r   r   r   r   `  s.        ,,0 0 0 0 0 0r   r   r^   r_   suppress_warnings	list[str]c                |    | dS |D ]4}d|v r|                     dd          \  }}n|d}}|| k    r
|d|dfv r dS 5dS )z/Check whether the warning is suppressed or not.NFr2   r$   *T)split)r^   r_   r   warning_typetarget	subtargets         r   is_suppressed_warningr   g  st    |u *  , , 2 23 : :FII ,dIFT>>iD'3+???445r   c                  ,     e Zd ZdZd fdZdd
Z xZS )WarningSuppressorz#Filter logs by `suppress_warnings`.appr   r/   r9   c                V    || _         t                                                       d S r   r   rH   r   rJ   r   rL   s     r   r   zWarningSuppressor.__init__}  &    r   rt   ru   r   c                    t          |dd          }t          |dd          }	 | j        j        j        }n# t          $ r g }Y nw xY wt          |||          rdS | j        xj        dz  c_        dS )Nr^   rF   r_   Fr$   T)r?   r   configr   AttributeErrorr   
_warncount)rJ   rt   r^   r_   r   s        r   r   zWarningSuppressor.filter  s    vvr**&)R00	# $ A 	# 	# 	# "	# !w0ABB 	5H1$4s   6 AAr   r   r/   r9   r   rN   rO   rP   rQ   r   r   rS   rT   s   @r   r   r   z  sW        --            r   r   c                  ,     e Zd ZdZd fdZdd
Z xZS )WarningIsErrorFilterz#Raise exception if warning emitted.r   r   r/   r9   c                V    || _         t                                                       d S r   r   r   s     r   r   zWarningIsErrorFilter.__init__  r   r   rt   ru   r   c                Z   t          |dd          rdS | j        j        rt          |dd          }	 |j        |j        z  }n# t
          t          f$ r
 |j        }Y nw xY w|r#t          |dz   t          |          z             }nt          |          }|j	        ||j	        d         |dS )Nskip_warningsiserrorFTr;   rF   :r$   )
r?   r   warningiserrorr=   r>   	TypeError
ValueErrorr   r.   exc_info)rJ   rt   r;   rK   excs        r   r   zWarningIsErrorFilter.filter  s    61599 	4X$ 	vz266H% *v{2z* % % % *%  -#HsNS\\$ABB#G,,*vq11	4s   A AAr   r   r   rT   s   @r   r   r     sW        --            r   r   c                      e Zd ZdZddZdS )	r   z6Disable WarningIsErrorFilter if this filter installed.rt   ru   r/   r   c                    d|_         dS )NT)r   rx   s     r   r   z"DisableWarningIsErrorFilter.filter  s    &*#tr   Nr   r   r   r   r   r   r     s.        @@     r   r   c                  ,     e Zd ZdZd fdZdd
Z xZS )r   z"Prepend prefix to all log records.rI   r.   r/   r9   c                V    || _         t                                                       d S r   )rI   rH   r   )rJ   rI   rL   s     r   r   zMessagePrefixFilter.__init__  s&    r   rt   ru   r   c                B    | j         r| j         dz   |j        z   |_        dS )N T)rI   r=   rx   s     r   r   zMessagePrefixFilter.filter  s&    ; 	8s*VZ7FJtr   )rI   r.   r/   r9   r   r   rT   s   @r   r   r     sW        ,,            r   r   c                  .     e Zd ZdZdd fdZddZ xZS )
OnceFilterzShow the message only once.rF   r-   r.   r/   r9   c                X    t                                          |           i | _        d S r   )rH   r   messages)rJ   r-   rL   s     r   r   zOnceFilter.__init__  s&    )+r   rt   ru   r   c                    t          |dd          }|sdS | j                            |j        g           }|j        |v rdS |                    |j                   dS )Nrb   rF   TF)r?   r   ro   r=   r>   r   )rJ   rt   rb   paramss       r   r   zOnceFilter.filter  sd    vvr** 	4]--fj"==F{f$$uMM&+&&&4r   )rF   )r-   r.   r/   r9   r   r   rT   s   @r   r   r     s\        %%, , , , , , ,
 
 
 
 
 
 
 
r   r   c                  8     e Zd ZU dZded<   d fdZddZ xZS )SphinxLogRecordTranslatorzConverts a log record to one Sphinx expects

    * Make a instance of SphinxLogRecord
    * docname to path if location given
    ztype[logging.LogRecord]LogRecordClassr   r   r/   r9   c                V    || _         t                                                       d S r   r   r   s     r   r   z"SphinxLogRecordTranslator.__init__  r   r   rt   rX   r   c                   t          |t          j                  r| j        |_        t          |dd           }t          |t                    ra|\  }}|rR|r*| j        j        	                    |           d| |_
        n| j        j        	                    |           |_
        nbd |_
        nZt          |t          j                  rt          |          |_
        n+|r)d|vr%| j        j        	                    |           |_
        dS )Nr;   r   T)r@   r   	LogRecordr   rL   r?   tupler   envdoc2pathr;   r	   r   rA   )rJ   rt   r;   docnamelinenos        r   r   z SphinxLogRecordTranslator.filter  s
   fg/00 	3#2F6:t44h&& 	C&OGV ' J)-)>)>w)G)G&R&R&&R&RFOO)-)>)>w)G)G&IFOO"&%*-- 	C/99FOO 	C#X--!%!6!6x!@!@BFOtr   r   )rt   rX   r/   r   )rN   rO   rP   rQ   rR   r   r   rS   rT   s   @r   r   r     sk          
 ,+++            r   r   c                      e Zd ZdZeZdS )InfoLogRecordTranslatorz/LogRecordTranslator for INFO level log records.N)rN   rO   rP   rQ   rV   r   r   r   r   r   r     s        99(NNNr   r   c                      e Zd ZdZeZdS )WarningLogRecordTranslatorz2LogRecordTranslator for WARNING level log records.N)rN   rO   rP   rQ   rX   r   r   r   r   r   r     s        <<+NNNr   r   noder   
str | Nonec                ~    t          |           \  }}|rt          |          }|r	|r| d| S |r| dS |rd| S d S )Nr   z
<unknown>:)r
   r   )r   sourcelines      r   rA   rA     sx    "4((LFD ! "$ "!!4!!! ||| #"D"""4r   c                        e Zd Zd fdZ xZS )ColorizeFormatterrt   ru   r/   r.   c                    t                                          |          }t          |dd           }|t                              |j                  }|rt          ||          S |S )Nra   )rH   formatr?   r,   getrZ   r   )rJ   rt   rK   ra   rL   s       r   r  zColorizeFormatter.format  s^    ''..((..=MM&.11E 	E7+++Nr   )rt   ru   r/   r.   )rN   rO   rP   r  rS   rT   s   @r   r  r    s=        	 	 	 	 	 	 	 	 	 	r   r  c                  *    e Zd ZdZddZdd	Zdd
ZdS )SafeEncodingWriterz7Stream writer which ignores UnicodeEncodeError silentlystreamr   r/   r9   c                D    || _         t          |dd          pd| _        d S )Nencodingascii)r
  r?   r  )rJ   r
  s     r   r   zSafeEncodingWriter.__init__"  s%    
G<<Gr   datar.   c                    	 | j                             |           d S # t          $ rO | j                             |                    | j        d                              | j                             Y d S w xY w)Nreplace)r
  writeUnicodeEncodeErrorencoder  decoderJ   r  s     r   r  zSafeEncodingWriter.write&  s    	[Kd#####! 	[ 	[ 	[ Kdkk$-CCJJ4=YYZZZZZZ	[s    AA76A7c                f    t          | j        d          r| j                                         d S d S )Nr   )hasattrr
  r   r[   s    r   r   zSafeEncodingWriter.flush.  s:    4;(( 	 K	  	 r   N)r
  r   r/   r9   r  r.   r/   r9   r   )rN   rO   rP   rQ   r   r  r   r   r   r   r	  r	     s^        AAH H H H[ [ [ [           r   r	  c                  "    e Zd ZdZddZddZdS )LastMessagesWriterzBStream writer storing last 10 messages in memory to save trackbackr   r   r
  r   r/   r9   c                    || _         d S r   )r   )rJ   r   r
  s      r   r   zLastMessagesWriter.__init__5  s    r   r  r.   c                D    | j         j                            |           d S r   )r   
messagelogr   r  s     r   r  zLastMessagesWriter.write8  s!    ""4(((((r   N)r   r   r
  r   r/   r9   r  )rN   rO   rP   rQ   r   r  r   r   r   r  r  3  sB        LL   ) ) ) ) ) )r   r  r   r   statusr   warningc                0   t          j        t                    }|                    t           j                   d|_        |j        dd         D ]}|                    |           t          t          |                    }|
                    t                                 |
                    t          |                      |                    t          | j                            |                    t!                                 t#          t          |                    }|
                    t%          |                      |
                    t'          |                      |
                    t)          |                      |
                    t+                                 |                    t           j                   |                    t!                                 t          j        t1          | |                    }|
                    t                                 |                    t          | j                            |                    |           |                    |           |                    |           dS )zSetup root logger for SphinxFN)r   r3   r4   r   r    	propagater   r   r}   r	  r   r   r   r&   	verbositysetFormatterr  r{   r   r   r   r   r   StreamHandlerr  r   )r   r  r  r6   r   info_handlerr   messagelog_handlers           r   setupr'  <  s*   y))F
OOGM"""F ?111% & &W%%%%'(:6(B(BCCL:<<(((2377888-6777/11222*+=g+F+FGGO/445558==>>>2377888jll+++W_---  !2!4!4555 ./A#v/N/NOO  ...cm <===
l###
o&&&
()))))r   )r-   r.   r/   r0   )r7   r8   r/   r9   )r/   r   )r/   r   )T)r   r   r/   r   )rI   r.   r/   r   )r^   r.   r_   r.   r   r   r/   r   )r   r   r/   r   )r   r   r  r   r  r   r/   r9   )MrQ   
__future__r   r   logging.handlerscollectionsr   
contextlibr   typingr   r   r   docutilsr	   docutils.utilsr
   sphinx.errorsr   sphinx.util.consoler   sphinx.util.osutilr   collections.abcr   docutils.nodesr   sphinx.applicationr   r4   r   r   r   r   r   r    r!   rR   r&   r,   r3   rC   r   rE   rV   rX   LoggerAdapterr0   r$  r{   r}   r   BufferingHandlerr   r   r   r   r   r   r   Filterr   r   r   r   r   r   r   r   r   r   rA   	Formatterr  r	  r  r'  r   r   r   <module>r9     s}   + + + " " " " " "      # # # # # # % % % % % % ) ) ) ) ) ) ) ) ) )       * * * * * * ' ' ' ' ' ' ( ( ( ( ( ( & & & & & & *))))))######)))))) 	
%0[1H1H ]L]K K & &     (3{3I3I|}L L ( (     $/;~~M9OUM:@ $ $	    + + + +,	5 	5 	5 	5    g'        /   
	 	 	 	 	_ 	 	 	# # # # #'/ # # #8	 	 	 	 	70 	 	 	
    70       G$5   < # # # #6 ' ' ' '8 # # # #& / / / / /& *8 *8 *8 *8Z	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+0 0 0 0 0 0 0 0   &       0    7>   <    '.   
 
 
 
 
'. 
 
 
       (               F) ) ) ) )7 ) ) )
, , , , ,!: , , ,

 
 
 

 
 
 
 
) 
 
 
               &) ) ) ) ) ) ) )* * * * * *r   