B
    Kkd%                 @   sz  d dl m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 yd dlZW n ek
r   d dlZY nX yd dlmZ W n ek
r   dZY nX e Zd e_G dd deZere	rd	d
 Zndd
 Zne	rd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j$Z%dd Z&dS )     )absolute_importN)PY2)WINDOWS)
ensure_dir)coloramac               @   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-install-gxxfd9b7/pip/pip/_internal/utils/logging.pyr   !   s   r   c             C   s   | t ko|jtjtjfkS )z1See the docstring for non-Windows Python 3 below.)IOErrorerrnoEINVALEPIPE)	exc_classexcr   r   r   _is_broken_pipe_error/   s    r   c             C   s"   | t kp | tko |jtjtjfkS )z1See the docstring for non-Windows Python 3 below.)BrokenPipeErrorOSErrorr   r   r   )r   r   r   r   r   r   5   s    c             C   s   | t ko|jtjkS )z1See the docstring for non-Windows Python 3 below.)r   r   r   )r   r   r   r   r   r   ;   s    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   r   @   s       c          	   c   s.   t  j| 7  _z
dV  W d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)
_log_stateindentation)numr   r   r   
indent_logK   s    
r   c               C   s   t tddS )Nr   r   )getattrr   r   r   r   r   get_indentationX   s    r   c                   s(   e Zd Z fddZ fddZ  ZS )IndentingFormatterc                s$   | dd| _tt| j|| dS )z
        A logging.Formatter obeying containing indent_log contexts.

        :param add_timestamp: A bool indicating output lines should be prefixed
            with their record's timestamp.
        add_timestampFN)popr   superr   __init__)selfargskwargs)	__class__r   r   r"   ]   s    zIndentingFormatter.__init__c                sV   t t| |}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 messages
        by our current indentation level.
         z%Y-%m-%dT%H:%M:%S  c                s   g | ]} | qS r   r   ).0line)prefixr   r   
<listcomp>r   s   z-IndentingFormatter.format.<locals>.<listcomp>T)r!   r   formatr   
formatTimer   join
splitlines)r#   record	formatted)r&   )r+   r   r-   g   s    
zIndentingFormatter.format)r   r	   r
   r"   r-   __classcell__r   r   )r&   r   r   \   s   
r   c                 s    fdd}|S )Nc                s   d t | tjjg S )Nr'   )r/   listr   Style	RESET_ALL)inp)colorsr   r   wrappedy   s    z_color_wrap.<locals>.wrappedr   )r8   r9   r   )r8   r   _color_wrapx   s    r:   c                   sl   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ddZdd Zdd Zdd	 Z fd
dZ  ZS )ColorizedStreamHandlerNc             C   s.   t j| | || _tr*tr*t| j| _d S )N)loggingStreamHandlerr"   	_no_colorr   r   AnsiToWin32stream)r#   r@   no_colorr   r   r   r"      s    zColorizedStreamHandler.__init__c             C   s"   t rtr| jjtjkS | jtjkS )zA
        Return whether the handler is using sys.stdout.
        )r   r   r@   r9   sysstdout)r#   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   r>   
isinstancer@   r?   r9   hasattrrE   osenvironget)r#   real_streamr   r   r   should_color   s    
z#ColorizedStreamHandler.should_colorc             C   sB   t j| |}|  r>x&| jD ]\}}|j|kr||}P qW |S )N)r<   r=   r-   rN   COLORSlevelno)r#   r1   msglevelcolorr   r   r   r-      s    
zColorizedStreamHandler.formatc                s@   t  d d \}}|r0|  r0t||r0t tt| |S )Nr   )rB   exc_inforD   r   r   r!   r;   handleError)r#   r1   r   r   )r&   r   r   rU      s
    
z"ColorizedStreamHandler.handleError)NN)r   r	   r
   r   r<   ERRORr:   ForeREDWARNINGYELLOWrO   r"   rD   rN   r-   rU   r3   r   r   )r&   r   r;   ~   s   

r;   c               @   s   e Zd Zdd ZdS )BetterRotatingFileHandlerc             C   s    t tj| j tjj| S )N)	r   rJ   pathdirnamebaseFilenamer<   handlersRotatingFileHandler_open)r#   r   r   r   ra      s    zBetterRotatingFileHandler._openN)r   r	   r
   ra   r   r   r   r   r[      s   r[   c               @   s   e Zd Zdd Zdd ZdS )MaxLevelFilterc             C   s
   || _ d S )N)rR   )r#   rR   r   r   r   r"      s    zMaxLevelFilter.__init__c             C   s   |j | jk S )N)rP   rR   )r#   r1   r   r   r   filter   s    zMaxLevelFilter.filterN)r   r	   r
   r"   rc   r   r   r   r   rb      s   rb   c             C   s.  | dkrd}n.| dkrd}n | dkr*d}n| dkr8d}nd	}t t|}|d
k	}|r\|}d}nd}|}|dkrpdnd}ddd}	ddd}
tjddddtjditddtdddd||
d ||	d dgddd|
d ||	d  dd!d|
d" |dd#d$d%|d&d'g|rd(gng  d)d*d+|iid, |S )-znConfigures and sets up all of the logging

    Returns the requested logging level, as its integer value.
       DEBUGrY   rV   CRITICALINFONz	/dev/null)rj   rV   zext://sys.stdoutzext://sys.stderr)rC   stderrz2pip._internal.utils.logging.ColorizedStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)r@   fileFexclude_warningsz*pip._internal.utils.logging.MaxLevelFilter)z()rR   z%(message)s)z()r-   T)z()r-   r   )indentindent_with_timestampr@   rC   rn   )rR   classrA   r@   filters	formatterrk   )rR   rp   rA   r@   rr   rl   ro   )rR   rp   filenamedelayrr   )consoleconsole_errorsuser_logru   rv   rw   )rR   r_   zpip._vendorrR   )versiondisable_existing_loggersrq   
formattersr_   rootloggers)r   r<   config
dictConfigrY   r   )	verbosityrA   user_log_filerR   level_numberinclude_user_logadditional_log_file
root_levelvendored_log_levellog_streamshandler_classesr   r   r   setup_logging   sl    



r   )r   )'
__future__r   
contextlibr   r<   logging.handlersrJ   rB   pip._vendor.sixr   pip._internal.utils.compatr   pip._internal.utils.miscr   	threadingImportErrorZdummy_threadingpip._vendorr   	Exceptionlocalr   r   r   r   contextmanagerr   r   	Formatterr   r:   r=   r;   r_   r`   r[   Filterrb   r   r   r   r   r   <module>   sH   
	


K	