o
    Ëý°j-  ã                   @   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/dee0 de0de1fdd„Z2e j3d.de4ded fdd„ƒZ5de4f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?d)e4d*e1d+ee@ de4f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   úŽ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/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*   é   Únumc              	   c   sD   � t ƒ t_t j| 7  _zdV  W t j| 8  _dS t j| 8  _w )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   c                   C   s   t tddƒS )Nr/   r   )Úgetattrr.   r   r   r   r    r-   C   ó   r-   c                	       sf   e Zd ZdZddœdedededdf‡ fd	d
„Zdededefdd„Z	de
jdef‡ fdd„Z‡  ZS )ÚIndentingFormatterz%Y-%m-%dT%H:%M:%SF)Úadd_timestampÚargsr4   Úkwargsr#   Nc                   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Úlevelnoc                 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Úrecordc                    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   s    z-IndentingFormatter.format.<locals>.<listcomp>T)	r7   ÚformatrC   r=   r4   Ú
formatTimer-   ÚjoinÚ
splitlines)r9   rD   r<   Úmessage_startr:   rH   r    rK   i   s   zIndentingFormatter.format)r   r   r   Údefault_time_formatr   Úboolr8   ÚstrÚintrC   r?   Ú	LogRecordrK   Ú__classcell__r   r   r:   r    r3   G   s    ýþýüû r3   c                   @   s4   e Zd ZU eed< eed< dededefdd„Z	dS )	ÚIndentedRenderableÚ
renderableÚindentÚconsoleÚoptionsr#   c                 c   sL   � |  | j|¡}t |¡}|D ]}td| j ƒV  |E d H  tdƒV  qd S )NrE   Ú
)ÚrenderrW   r   Úsplit_linesrX   )r9   rY   rZ   ÚsegmentsÚlinesrG   r   r   r    Ú__rich_console__   s   €

ýz#IndentedRenderable.__rich_console__N)
r   r   r   r   Ú__annotations__rS   r   r   r   r`   r   r   r   r    rV   z   s   
 ÿÿþrV   c                       st   e Zd ZU g Zeeee   ed< dee	 de
ddf‡ fdd„Zdejddfd	d
„Zdejddf‡ fdd„Z‡  ZS )ÚRichPipStreamHandlerÚKEYWORDSÚstreamÚno_colorr#   Nc                    s&   t ƒ jt||dd�dddtƒ d� d S )NT)Úfilere   Ú	soft_wrapF)rY   Ú	show_timeÚ
show_levelÚ	show_pathÚhighlighter)r7   r8   r   r   )r9   rd   re   r:   r   r    r8   �   s   
ûzRichPipStreamHandler.__init__rD   c                 C   sÌ   d }|j dkr"t|jƒdkr"|jd }t|tƒsJ ‚t|tƒ d�}n'|  |¡}|  ||¡}|j	d urI|j	t
jkr>tdd�}n|j	t
jkrItdd�}z| jj|dd	|d
� W d S  tye   |  |¡ Y d S w )Nz[present-diagnostic] %sé   r   )rX   Úred)ÚcolorÚyellowÚignoreF)ÚoverflowÚcropÚstyle)ÚmsgÚlenr5   r%   r   rV   r-   rK   Úrender_messager=   r?   rB   r   r@   rY   ÚprintÚ	ExceptionÚhandleError)r9   rD   rs   Údiagnostic_errorrW   Ú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_inforY   rf   Ústdoutr*   r   r7   ry   )r9   rD   r!   r"   r:   r   r    ry   °   s   ÿþÿz RichPipStreamHandler.handleError)r   r   r   rc   r   r	   r   rR   ra   r
   rQ   r8   r?   rT   r|   ry   rU   r   r   r:   r    rb   Š   s
   
 
 rb   c                       s&   e Zd Zdee f‡ fdd„Z‡  ZS )ÚBetterRotatingFileHandlerr#   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†   rU   r   r   r:   r    r€   Ã   s    r€   c                   @   s2   e Zd Zdeddfdd„Zdejdefdd„ZdS )	ÚMaxLevelFilterÚlevelr#   Nc                 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   rD   r   r   r    ÚfilterÍ   r2   zMaxLevelFilter.filter)	r   r   r   rS   r8   r?   rT   rQ   rŠ   r   r   r   r    r‡   É   s    r‡   c                       s,   e Zd ZdZdejdef‡ fdd„Z‡  ZS )ÚExcludeLoggerFilterzQ
    A logging Filter that excludes records from a logger (or its children).
    rD   r#   c                    s   t ƒ  |¡ S r�   )r7   rŠ   r‰   r:   r   r    rŠ   ×   s   zExcludeLoggerFilter.filter)	r   r   r   r   r?   rT   rQ   rŠ   rU   r   r   r:   r    r‹   Ñ   s     r‹   Ú	verbosityre   Úuser_log_filec                 C   s~  | dkrt j}n"| dkrt}n| dkrt j}n| dkrt j}n| dkr't j}nt j}t  |¡}|du}|r:|}d}nd}|}|d	v rDd
nd}dddœ}	dddœ}
g d¢|rXd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+   rl   éÿÿÿÿéþÿÿÿéýÿÿÿNÚDEBUGz	/dev/null)ÚINFOrB   r@   zext://sys.stdoutzext://sys.stderr)r   Ústderrz0pip._internal.utils.logging.RichPipStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)rd   rf   )rY   Ú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—   rK   T)r—   rK   r4   )rX   Úindent_with_timestamprd   r   r›   r™   rX   )rˆ   Úclassre   rd   ÚfiltersÚ	formatterr“   rš   )rˆ   r�   rd   re   rž   rŸ   rf   zutf-8rœ   )rˆ   r�   ÚfilenameÚencodingÚdelayrŸ   )rY   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Œ   re   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   Úpip._vendor.rich.highlighterr   Úpip._vendor.rich.loggingr   Úpip._vendor.rich.segmentr   Úpip._vendor.rich.styler   Úpip._internal.exceptionsr   Úpip._internal.utils._logr   r   Úpip._internal.utils.compatr   Úpip._internal.utils.deprecationr   Úpip._internal.utils.miscr   Úlocalr.   r­   rx   r   ÚBaseExceptionrQ   r*   ÚcontextmanagerrS   r0   r-   Ú	Formatterr3   rV   rb   r£   ÚRotatingFileHandlerr€   r‡   r‹   rR   rµ   r   r   r   r    Ú<module>   sF    (39"