U
    „~$hE.  ã                   @   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 d dl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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$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/ƒZ0ee1 e1e2dœdd„Z3e j4d.e5ed dœdd„ƒZ6e5dœdd„Z7G dd„ dej8ƒZ9eG dd „ d ƒƒZ:G d!d"„ d"eƒZ;G d#d$„ d$eƒZ<G d%d&„ d&ej=j>ƒZ?G d'd(„ d(eƒZ@G d)d*„ d*eƒZAe5e2eeB e5d+œd,d-„ZCdS )/é    N)Ú	dataclass)ÚTextIOWrapper)ÚFilter)ÚAnyÚClassVarÚ	GeneratorÚListÚOptionalÚTextIOÚType)ÚConsoleÚConsoleOptionsÚConsoleRenderableÚRenderableTypeÚRenderResultÚRichCast)ÚNullHighlighter)ÚRichHandler)ÚSegment)ÚStyle)Ú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    ú?/tmp/pip-unpacked-wheel-g27rp152/pip/_internal/utils/logging.pyr   #   s   r   )Ú	exc_classÚexcÚreturnc                 C   s0   | t krdS tsdS t|tƒo.|jtjtjfkS )NTF)ÚBrokenPipeErrorr   Ú
isinstanceÚOSErrorÚerrnoÚEINVALÚEPIPE)r"   r#   r    r    r!   Ú_is_broken_pipe_error)   s
    r+   é   )NNN)Únumr$   c              	   c   s6   t ƒ t_t j| 7  _z
dV  W 5 t j| 8  _X 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_log6   s
    
r1   ©r$   c                   C   s   t tddƒS )Nr0   r   )Úgetattrr/   r    r    r    r!   r.   E   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)Úargsr5   Úkwargsr$   c                   s   || _ tƒ j||Ž 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)r5   ÚsuperÚ__init__)Úselfr5   r6   r7   ©Ú	__class__r    r!   r9   L   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)r:   r=   r>   r    r    r!   Úget_message_start[   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>x   s     z-IndentingFormatter.format.<locals>.<listcomp>T)	r8   ÚformatrD   r>   r5   Ú
formatTimer.   ÚjoinÚ
splitlines)r:   rF   r=   Úmessage_startr;   rJ   r!   rM   k   s    zIndentingFormatter.format)r   r   r   Údefault_time_formatr   Úboolr9   ÚstrÚintrD   r@   Ú	LogRecordrM   Ú__classcell__r    r    r;   r!   r4   I   s   ýûr4   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 )NrG   Ú
)ÚrenderrY   r   Zsplit_linesrZ   )r:   r[   r\   ÚsegmentsÚlinesrI   r    r    r!   Ú__rich_console__�   s    

z#IndentedRenderable.__rich_console__N)
r   r   r   r   Ú__annotations__rU   r   r   r   ra   r    r    r    r!   rX   |   s   
 þrX   c                   @   s   e Zd Zddœdd„ZdS )Ú
PipConsoleNr2   c                 C   s   t ƒ d ‚d S ©N)r%   ©r:   r    r    r!   Úon_broken_pipe�   s    zPipConsole.on_broken_pipe)r   r   r   rf   r    r    r    r!   rc   Œ   s   rc   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)Úfilerj   Z	soft_wrapF)r[   Z	show_timeZ
show_levelZ	show_pathZhighlighter)r8   r9   rc   r   )r:   ri   rj   r;   r    r!   r9   –   s    ûzRichPipStreamHandler.__init__rE   c                 C   sà   d }t |ddƒrVt|jtƒs t‚|j\}t|tttfƒsFt|› d�ƒ‚t|t	ƒ d�}nN|  
|¡}|  ||¡}|jd k	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k
rÚ   |  |¡ Y nX d S )
NZrichFz is not rich-console-renderable)rZ   Zred)ÚcolorZyellowÚignore)ZoverflowZcropÚstyle)r3   r&   r6   ÚtupleÚAssertionErrorr   r   rT   rX   r.   rM   Zrender_messager>   r@   rC   r   rA   r[   ÚprintÚ	ExceptionÚhandleError)r:   rF   rn   Zrich_renderablerY   Úmessager    r    r!   Úemit    s2     ÿþ ÿ


zRichPipStreamHandler.emitc                    sF   t  ¡ dd… \}}|r:|r:| jjt jkr:t||ƒr:tƒ ‚tƒ  |¡S )z1Called when logging is unable to log some output.Nr,   )	ÚsysÚexc_infor[   rk   Ústdoutr+   r   r8   rs   )r:   rF   r"   r#   r;   r    r!   rs   ¼   s    ÿþýüz RichPipStreamHandler.handleError)r   r   r   rh   r   r	   r   rT   rb   r
   rS   r9   r@   rV   ru   rs   rW   r    r    r;   r!   rg   “   s   

rg   c                       s"   e Zd Zedœ‡ fdd„Z‡  ZS )ÚBetterRotatingFileHandlerr2   c                    s   t tj | j¡ƒ tƒ  ¡ S rd   )r   ÚosÚpathÚdirnameÚbaseFilenamer8   Ú_openre   r;   r    r!   r~   Ð   s    zBetterRotatingFileHandler._open)r   r   r   r   r~   rW   r    r    r;   r!   ry   Ï   s   ry   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 rd   )r€   )r:   r€   r    r    r!   r9   Ö   s    zMaxLevelFilter.__init__rE   c                 C   s   |j | jk S rd   )r>   r€   ©r:   rF   r    r    r!   ÚfilterÙ   s    zMaxLevelFilter.filter)	r   r   r   rU   r9   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).
    rE   c                    s   t ƒ  |¡ S rd   )r8   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ƒ   )Ú	verbosityrj   Ú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k	}|rt|}d}nd}|}|d	krˆd
nd}dddœ}	dddœ}
dddg|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/œd0d1|iid2œ¡ |S )3znConfigures and sets up all of the logging

    Returns the requested logging level, as its integer value.
    r,   é   éÿÿÿÿéþÿÿÿéýÿÿÿNÚDEBUGz	/dev/null)ÚINFOrC   rA   zext://sys.stdoutzext://sys.stderr)rx   Ústderrz0pip._internal.utils.logging.RichPipStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)ri   rk   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   r5   )rZ   Úindent_with_timestampri   rx   r”   r’   rZ   )r€   Úclassrj   ri   ÚfiltersÚ	formatterrŒ   r“   )r€   r–   ri   rj   r—   r˜   rk   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   rA   rC   ÚCRITICALr‹   ÚgetLevelNameÚconfigÚ
dictConfigÚsubprocess_loggerr‘   r4   )r„   rj   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,   )DÚ
contextlibr(   r@   Úlogging.handlersrz   rv   Ú	threadingZdataclassesr   Úior   r   Útypingr   r   r   r   r	   r
   r   Zpip._vendor.rich.consoler   r   r   r   r   r   Zpip._vendor.rich.highlighterr   Zpip._vendor.rich.loggingr   Zpip._vendor.rich.segmentr   Zpip._vendor.rich.styler   Zpip._internal.utils._logr   r   Úpip._internal.utils.compatr   Úpip._internal.utils.deprecationr   Úpip._internal.utils.miscr   Úlocalr/   r¦   rr   r   ÚBaseExceptionrS   r+   ÚcontextmanagerrU   r1   r.   Ú	Formatterr4   rX   rc   rg   rœ   ÚRotatingFileHandlerry   r   rƒ   rT   r®   r    r    r    r!   Ú<module>   sF   $ 3<