U
    
Ha80                     @   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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 d dlmZ d dlmZ d dlmZ zd dlZW n ek
r   d dlZY nX zd dlmZ W n ek
r   dZY nX e Z ed	Z!G d
d deZ"erdd Z#ndd Z#e j$d"ddZ%dd Z&G dd dej'Z(dd Z)G dd dej*Z+G dd dej,j-Z.G dd deZ/G dd deZ0d d! Z1dS )#    N)Filter)IOAnyCallableIteratorOptionalTextIOTypecast)VERBOSE	getLogger)WINDOWS)DEPRECATION_MSG_PREFIX)
ensure_dir)coloramaz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-tx790h60/pip/_internal/utils/logging.pyr   !   s   r   c                 C   s$   | t kp"t|to"|jtjtjfkS )z(See the docstring for non-Windows below.)BrokenPipeError
isinstanceOSErrorerrnoEINVALEPIPE	exc_classexcr   r   r   _is_broken_pipe_error.   s    r!   c                 C   s   | t kS )z
        Return whether an exception is a broken pipe error.

        Args:
          exc_class: an exception class.
          exc: an exception instance.
        )r   r   r   r   r   r!   8   s    	   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)numr   r   r   
indent_logD   s
    
r'   c                   C   s   t tddS )Nr%   r   )getattrr$   r   r   r   r   r#   T   s    r#   c                       s:   e Zd ZdZdd fdd
Zdd Z fdd	Z  ZS )
IndentingFormatterz%Y-%m-%dT%H:%M:%SF)add_timestampc                   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)r*   super__init__)selfr*   argskwargs	__class__r   r   r,   \   s    zIndentingFormatter.__init__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-   	formattedlevelnor   r   r   get_message_startl   s    


z$IndentingFormatter.get_message_startc                    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.
        r2    c                    s   g | ]} | qS r   r   ).0lineprefixr   r   
<listcomp>   s     z-IndentingFormatter.format.<locals>.<listcomp>T)	r+   formatr9   r8   r*   
formatTimer#   join
splitlines)r-   recordr7   message_startr0   r=   r   r@   }   s    zIndentingFormatter.format)r   r   r   default_time_formatr,   r9   r@   __classcell__r   r   r0   r   r)   Y   s
   r)   c                     s    fdd}|S )Nc                    s   d t | tjjg S )Nr2   )rB   listr   Style	RESET_ALL)inpcolorsr   r   wrapped   s    z_color_wrap.<locals>.wrappedr   )rM   rN   r   rL   r   _color_wrap   s    rO   c                       st   e Zd Zer2ejeejjfej	eejj
fgZng Zd fdd	Zdd Zdd Z fdd	Z fd
dZ  ZS )ColorizedStreamHandlerNc                    s,   t  | || _tr(tr(t| j| _d S N)r+   r,   	_no_colorr   r   AnsiToWin32stream)r-   rT   no_colorr0   r   r   r,      s    zColorizedStreamHandler.__init__c                 C   s.   t r"tr"ttj| j}|jtjkS | jtjkS )zA
        Return whether the handler is using sys.stdout.
        )r   r   r
   rS   rT   rN   sysstdout)r-   rT   r   r   r   _using_stdout   s    z$ColorizedStreamHandler._using_stdoutc                 C   sX   t r
| jrdS t| jt js"| jn| jj}t|dr@| r@dS tj	
ddkrTdS dS )NFisattyTTERMANSI)r   rR   r   rT   rS   rN   hasattrrY   osenvironget)r-   real_streamr   r   r   should_color   s    
z#ColorizedStreamHandler.should_colorc                    s>   t  |}|  r:| jD ]\}}|j|kr||} q:q|S rQ   )r+   r@   ra   COLORSr8   )r-   rD   msglevelcolorr0   r   r   r@      s    
zColorizedStreamHandler.formatc                    s@   t  d d \}}|r4|r4|  r4t||r4t t |S )Nr"   )rV   exc_inforX   r!   r   r+   handleError)r-   rD   r   r    r0   r   r   rg      s    z"ColorizedStreamHandler.handleError)NN)r   r   r   r   r3   r6   rO   ForeREDr4   YELLOWrb   r,   rX   ra   r@   rg   rG   r   r   r0   r   rP      s   rP   c                       s   e Zd Z fddZ  ZS )BetterRotatingFileHandlerc                    s   t tj| j t  S rQ   )r   r]   pathdirnamebaseFilenamer+   _open)r-   r0   r   r   ro      s    zBetterRotatingFileHandler._open)r   r   r   ro   rG   r   r   r0   r   rk      s   rk   c                   @   s   e Zd Zdd Zdd ZdS )MaxLevelFilterc                 C   s
   || _ d S rQ   )rd   )r-   rd   r   r   r   r,      s    zMaxLevelFilter.__init__c                 C   s   |j | jk S rQ   )r8   rd   r-   rD   r   r   r   filter   s    zMaxLevelFilter.filterN)r   r   r   r,   rr   r   r   r   r   rp      s   rp   c                       s    e Zd ZdZ fddZ  ZS )ExcludeLoggerFilterzQ
    A logging Filter that excludes records from a logger (or its children).
    c                    s   t  | S rQ   )r+   rr   rq   r0   r   r   rr     s    zExcludeLoggerFilter.filter)r   r   r   r   rr   rG   r   r   r0   r   rs      s   rs   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rd
nd}ddd}	ddd}
dddg|rd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/d0|iid1 |S )2znConfigures and sets up all of the logging

    Returns the requested logging level, as its integer value.
    r"      NDEBUGz	/dev/null)INFOr6   r4   zext://sys.stdoutzext://sys.stderr)rW   stderrz2pip._internal.utils.logging.ColorizedStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)rT   fileconsoleconsole_errorsconsole_subprocessuser_logFz*pip._internal.utils.logging.MaxLevelFilter)()rd   zlogging.Filter)r   namez/pip._internal.utils.logging.ExcludeLoggerFilter)exclude_warningsrestrict_to_subprocessexclude_subprocessz%(message)s)r   r@   T)r   r@   r*   )indentindent_with_timestamprT   rW   r   r   r   )rd   classrU   rT   filters	formatterrz   r   r{   zutf-8r   )rd   r   filenameencodingdelayr   )r|   r}   r~   r   )rd   handlerszpip._vendorrd   )versiondisable_existing_loggersr   
formattersr   rootloggers)r3   rx   r   r4   r6   CRITICALry   getLevelNameconfig
dictConfigsubprocess_loggerr   r)   )	verbosityrU   user_log_filelevel_numberrd   include_user_logadditional_log_file
root_levelvendored_log_levellog_streamshandler_classesr   r   r   r   setup_logging  s    
		%
Ir   )r"   )2
contextlibr   r3   logging.handlersr]   rV   r   typingr   r   r   r   r   r   r	   r
   Zpip._internal.utils._logr   r   pip._internal.utils.compatr   pip._internal.utils.deprecationr   pip._internal.utils.miscr   	threadingImportErrorZdummy_threadingpip._vendorr   	Exceptionlocalr$   r   r   r!   contextmanagerr'   r#   	Formatterr)   rO   StreamHandlerrP   r   RotatingFileHandlerrk   rp   rs   r   r   r   r   r   <module>   sF   (
	

6	V
