a
    hbòf-  ã                   @   sä  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Zd dlmZ d dlm	Z	 d dl
mZmZmZmZmZmZmZmZ d dlmZ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! d dl"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* e +¡ Z,e$dƒZ-G dd„ de.ƒZ/ee0 e0e1dœdd„Z2e j3d+e4ed dœdd„ƒZ5e4dœdd„Z6G dd„ dej7ƒZ8eG dd„ dƒƒZ9G d d!„ d!eƒZ:G d"d#„ d#ej;j<ƒZ=G d$d%„ d%e	ƒZ>G d&d'„ d'e	ƒZ?e4e1ee@ e4d(œd)d*„ZAdS ),é    N)Ú	dataclass)ÚFilter)ÚIOÚAnyÚClassVarÚIteratorÚListÚOptionalÚTextIOÚType)ÚConsoleÚConsoleOptionsÚConsoleRenderableÚRenderResult)ÚNullHighlighter)ÚRichHandler)ÚSegment)ÚStyle)ÚDiagnosticPipError)ÚVERBOSEÚ	getLogger)ÚWINDOWS)ÚDEPRECATION_MSG_PREFIX)Ú
ensure_dirzpip.subprocessorc                   @   s   e Zd ZdZdS )ÚBrokenStdoutLoggingErrorzO
    Raised if BrokenPipeError occurs for the stdout stream while logging.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úX/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_internal/utils/logging.pyr   !   s   r   )Ú	exc_classÚexcÚreturnc                 C   s0   | t u rdS tsdS t|tƒo.|jtjtjfv S )NTF)ÚBrokenPipeErrorr   Ú
isinstanceÚOSErrorÚerrnoÚEINVALÚEPIPE)r!   r"   r   r   r    Ú_is_broken_pipe_error'   s
    r*   é   )Únumr#   c              	   c   sD   t ƒ t_t j| 7  _zdV  W t j| 8  _nt j| 8  _0 dS )zv
    A context manager which will cause the log output to be indented for any
    log messages emitted inside it.
    N)Úget_indentationÚ
_log_stateÚindentation)r,   r   r   r    Ú
indent_log4   s
    r0   ©r#   c                   C   s   t tddƒS )Nr/   r   )Úgetattrr.   r   r   r   r    r-   C   s    r-   c                       sZ   e Zd ZdZddœeeeddœ‡ fdd„Zeeedœd	d
„Z	e
jedœ‡ fdd„Z‡  ZS )ÚIndentingFormatterz%Y-%m-%dT%H:%M:%SF)Úadd_timestampN)Úargsr4   Úkwargsr#   c                   s   || _ tƒ j|i |¤Ž dS )zÎ
        A logging.Formatter that obeys the indent_log() context manager.

        :param add_timestamp: A bool indicating output lines should be prefixed
            with their record's timestamp.
        N)r4   ÚsuperÚ__init__)Úselfr4   r5   r6   ©Ú	__class__r   r    r8   J   s    zIndentingFormatter.__init__)Ú	formattedÚlevelnor#   c                 C   s.   |t jk rdS | t¡rdS |t jk r*dS dS )zv
        Return the start of the formatted log message (not counting the
        prefix to add to each line).
        Ú z	WARNING: zERROR: )ÚloggingÚWARNINGÚ
startswithr   ÚERROR)r9   r<   r=   r   r   r    Úget_message_startY   s    


z$IndentingFormatter.get_message_start©Úrecordr#   c                    sl   t ƒ  |¡}|  ||j¡}|| }d‰ | jr<|  |¡› d�‰ ˆ dtƒ  7 ‰ d ‡ fdd„| d¡D ƒ¡}|S )z†
        Calls the standard formatter, but will indent all of the log message
        lines by our current indentation level.
        r>   ú c                    s   g | ]}ˆ | ‘qS r   r   )Ú.0Úline©Úprefixr   r    Ú
<listcomp>v   ó    z-IndentingFormatter.format.<locals>.<listcomp>T)	r7   ÚformatrC   r=   r4   Ú
formatTimer-   ÚjoinÚ
splitlines)r9   rE   r<   Úmessage_startr:   rI   r    rM   i   s    zIndentingFormatter.format)r   r   r   Údefault_time_formatr   Úboolr8   ÚstrÚintrC   r?   Ú	LogRecordrM   Ú__classcell__r   r   r:   r    r3   G   s   ýûr3   c                   @   s0   e Zd ZU eed< eed< eeedœdd„Z	dS )ÚIndentedRenderableÚ
renderableÚindent)ÚconsoleÚoptionsr#   c                 c   sJ   |  | j|¡}t |¡}|D ](}td| j ƒV  |E d H  tdƒV  qd S )NrF   Ú
)ÚrenderrY   r   Úsplit_linesrZ   )r9   r[   r\   ÚsegmentsÚlinesrH   r   r   r    Ú__rich_console__   s    

z#IndentedRenderable.__rich_console__N)
r   r   r   r   Ú__annotations__rU   r   r   r   rb   r   r   r   r    rX   z   s
   
þrX   c                       sl   e Zd ZU g Zeeee   ed< ee	 e
ddœ‡ fdd„Zejddœdd„Zejddœ‡ fd	d
„Z‡  ZS )ÚRichPipStreamHandlerÚKEYWORDSN)ÚstreamÚno_colorr#   c                    s&   t ƒ jt||dd�dddtƒ d� d S )NT)Úfilerg   Ú	soft_wrapF)r[   Ú	show_timeÚ
show_levelÚ	show_pathÚhighlighter)r7   r8   r   r   )r9   rf   rg   r:   r   r    r8   �   s    ûzRichPipStreamHandler.__init__rD   c                 C   sÌ   d }|j dkrDt|jƒdkrD|jd }t|tƒs4J ‚t|tƒ d�}nN|  |¡}|  ||¡}|j	d ur’|j	t
jkr|tdd�}n|j	t
jkr’tdd�}z| jj|dd	|d
� W n tyÆ   |  |¡ Y n0 d S )Nz[present-diagnostic] %sé   r   )rZ   Úred)ÚcolorÚyellowÚignoreF)ÚoverflowÚcropÚstyle)ÚmsgÚlenr5   r%   r   rX   r-   rM   Úrender_messager=   r?   rB   r   r@   r[   ÚprintÚ	ExceptionÚhandleError)r9   rE   ru   Údiagnostic_errorrY   Úmessager   r   r    Úemit—   s$    
ÿ


zRichPipStreamHandler.emitc                    sF   t  ¡ dd… \}}|r:|r:| jjt ju r:t||ƒr:tƒ ‚tƒ  |¡S )z1Called when logging is unable to log some output.Nr+   )	ÚsysÚexc_infor[   rh   Ústdoutr*   r   r7   r{   )r9   rE   r!   r"   r:   r   r    r{   °   s    ÿþýüz RichPipStreamHandler.handleError)r   r   r   re   r   r	   r   rT   rc   r
   rS   r8   r?   rV   r~   r{   rW   r   r   r:   r    rd   Š   s   

rd   c                       s&   e Zd Zee dœ‡ fdd„Z‡  ZS )ÚBetterRotatingFileHandlerr1   c                    s   t tj | j¡ƒ tƒ  ¡ S ©N)r   ÚosÚpathÚdirnameÚbaseFilenamer7   Ú_open)r9   r:   r   r    rˆ   Ä   s    zBetterRotatingFileHandler._open)r   r   r   r   r   rˆ   rW   r   r   r:   r    r‚   Ã   s   r‚   c                   @   s.   e Zd Zeddœdd„Zejedœdd„ZdS )ÚMaxLevelFilterN)Úlevelr#   c                 C   s
   || _ d S rƒ   )rŠ   )r9   rŠ   r   r   r    r8   Ê   s    zMaxLevelFilter.__init__rD   c                 C   s   |j | jk S rƒ   )r=   rŠ   ©r9   rE   r   r   r    ÚfilterÍ   s    zMaxLevelFilter.filter)	r   r   r   rU   r8   r?   rV   rS   rŒ   r   r   r   r    r‰   É   s   r‰   c                       s*   e Zd ZdZejedœ‡ fdd„Z‡  ZS )ÚExcludeLoggerFilterzQ
    A logging Filter that excludes records from a logger (or its children).
    rD   c                    s   t ƒ  |¡ S rƒ   )r7   rŒ   r‹   r:   r   r    rŒ   ×   s    zExcludeLoggerFilter.filter)	r   r   r   r   r?   rV   rS   rŒ   rW   r   r   r:   r    r�   Ñ   s   r�   )Ú	verbosityrg   Úuser_log_filer#   c                 C   s~  | dkrt j}nD| dkrt}n6| dkr.t j}n&| dkr>t j}n| dkrNt j}nt j}t  |¡}|du}|rt|}d}nd}|}|d	v rˆd
nd}dddœ}	dddœ}
g d¢|r°dgng  }t j 	dddt jdœdt
jdœdt
jdœdœtddœtdddœdœ||
d ||	d  d!d"gd#d$œd
|
d ||	d% d!gd#d$œ||
d |	d% |d&gd#d'œd|
d( |d)dd*d+œd,œ||d-œd.d/|iid0œ¡ |S )1znConfigures and sets up all of the logging

    Returns the requested logging level, as its integer value.
    r+   rn   éÿÿÿÿéþÿÿÿéýÿÿÿNÚDEBUGz	/dev/null)ÚINFOrB   r@   zext://sys.stdoutzext://sys.stderr)r�   Ústderrz0pip._internal.utils.logging.RichPipStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)rf   rh   )r[   Úconsole_errorsÚconsole_subprocessÚuser_logFz*pip._internal.utils.logging.MaxLevelFilter)ú()rŠ   zlogging.Filter)r™   Únamez/pip._internal.utils.logging.ExcludeLoggerFilter)Úexclude_warningsÚrestrict_to_subprocessÚexclude_subprocessz%(message)s)r™   rM   T)r™   rM   r4   )rZ   Úindent_with_timestamprf   r�   r�   r›   rZ   )rŠ   Úclassrg   rf   ÚfiltersÚ	formatterr•   rœ   )rŠ   rŸ   rf   rg   r    r¡   rh   zutf-8rž   )rŠ   rŸ   ÚfilenameÚencodingÚdelayr¡   )r[   r–   r—   r˜   )rŠ   Úhandlerszpip._vendorrŠ   )ÚversionÚdisable_existing_loggersr    Ú
formattersr¥   ÚrootÚloggers)r?   r“   r   r@   rB   ÚCRITICALr”   ÚgetLevelNameÚconfigÚ
dictConfigÚsubprocess_loggerrš   r3   )rŽ   rg   r�   Úlevel_numberrŠ   Úinclude_user_logÚadditional_log_fileÚ
root_levelÚvendored_log_levelÚlog_streamsÚhandler_classesr¥   r   r   r    Úsetup_loggingÝ   sª    
þþÿþþþ÷þýûú	úú	úå%þ
¼ÿIr·   )r+   )BÚ
contextlibr'   r?   Úlogging.handlersr„   r   Ú	threadingÚdataclassesr   r   Útypingr   r   r   r   r   r	   r
   r   Úpip._vendor.rich.consoler   r   r   r   Zpip._vendor.rich.highlighterr   Úpip._vendor.rich.loggingr   Zpip._vendor.rich.segmentr   Úpip._vendor.rich.styler   Úpip._internal.exceptionsr   Zpip._internal.utils._logr   r   Úpip._internal.utils.compatr   Úpip._internal.utils.deprecationr   Úpip._internal.utils.miscr   Úlocalr.   r¯   rz   r   ÚBaseExceptionrS   r*   ÚcontextmanagerrU   r0   r-   Ú	Formatterr3   rX   rd   r¥   ÚRotatingFileHandlerr‚   r‰   r�   rT   r·   r   r   r   r    Ú<module>   sD   (39