B
    Uvg                 @   s  d dl m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	 yd dl
Z
W n ek
rl   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_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)WINDOWS)
ensure_dir)colorama   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)num r
   </tmp/pip-install-r_9ig3yj/pip/pip/_internal/utils/logging.py
indent_log   s    
r   c               C   s   t tddS )Nr   r   )getattrr   r
   r
   r
   r   get_indentation*   s    r   c               @   s   e Zd Zdd ZdS )IndentingFormatterc             C   s,   t j| |}ddd |dD }|S )z
        Calls the standard formatter, but will indent all of the log messages
        by our current indentation level.
         c             S   s   g | ]}d t   | qS ) )r   ).0liner
   r
   r   
<listcomp>7   s   z-IndentingFormatter.format.<locals>.<listcomp>T)logging	Formatterformatjoin
splitlines)selfrecord	formattedr
   r
   r   r   0   s
    zIndentingFormatter.formatN)__name__
__module____qualname__r   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   wrapped>   s    z_color_wrap.<locals>.wrappedr
   )r$   r%   r
   )r$   r   _color_wrap=   s    r&   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ddZdd Zdd ZdS )	ColorizedStreamHandlerNc             C   s.   t j| | || _tr*tr*t| j| _d S )N)r   StreamHandler__init__	_no_colorr   r   AnsiToWin32stream)r   r,   no_colorr
   r
   r   r)   O   s    zColorizedStreamHandler.__init__c             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+   r%   hasattrr.   osenvironget)r   real_streamr
   r
   r   should_colorV   s    
z#ColorizedStreamHandler.should_colorc             C   sB   t j| |}|  r>x&| jD ]\}}|j|kr||}P qW |S )N)r   r(   r   r7   COLORSlevelno)r   r   msglevelcolorr
   r
   r   r   k   s    
zColorizedStreamHandler.format)NN)r   r   r   r   r   ERRORr&   ForeREDWARNINGYELLOWr8   r)   r7   r   r
   r
   r
   r   r'   C   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   r3   pathdirnamebaseFilenamer   handlersRotatingFileHandler_open)r   r
   r
   r   rH   y   s    zBetterRotatingFileHandler._openN)r   r   r   rH   r
   r
   r
   r   rB   w   s   rB   c               @   s   e Zd Zdd Zdd ZdS )MaxLevelFilterc             C   s
   || _ d S )N)r;   )r   r;   r
   r
   r   r)      s    zMaxLevelFilter.__init__c             C   s   |j | jk S )N)r9   r;   )r   r   r
   r
   r   filter   s    zMaxLevelFilter.filterN)r   r   r   r)   rJ   r
   r
   r
   r   rI   ~   s   rI   c       
      C   s  | dkrd}n.| dkrd}n | dkr*d}n| dkr8d}nd	}|d
k	}|rR|}d}nd}|}|dkrfdnd}ddd}ddd}	t jddddt jdidtddi||	d ||d dgddd|	d ||d ddd|	d |d dd!d"|d#d$g|rd%gng  d&d'd(|iid) d
S )*z.Configures and sets up all of the logging
       DEBUGr@   r=   CRITICALINFONz	/dev/null)rQ   r=   zext://sys.stdoutzext://sys.stderr)stdoutstderrz2pip._internal.utils.logging.ColorizedStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)r,   fileFexclude_warningsz*pip._internal.utils.logging.MaxLevelFilter)z()r;   indentz%(message)s)z()r   r,   rR   )r;   classr-   r,   filters	formatterrS   )r;   rW   r-   r,   rY   rT   T)r;   rW   filenamedelayrY   )consoleconsole_errorsuser_logr\   r]   r^   )r;   rF   zpip._vendorr;   )versiondisable_existing_loggersrX   
formattersrF   rootloggers)r   config
dictConfigr@   r   )
	verbosityr-   user_log_filer;   include_user_logadditional_log_file
root_levelvendored_log_levellog_streamshandler_classesr
   r
   r   setup_logging   sd    

rn   )r   )!
__future__r   
contextlibr   logging.handlersr3   pip._internal.utils.compatr   pip._internal.utils.miscr   	threadingImportErrorZdummy_threadingpip._vendorr   	Exceptionlocalr   r   contextmanagerr   r   r   r   r&   r(   r'   rF   rG   rB   FilterrI   rn   r
   r
   r
   r   <module>   s2   
4	