3
[                 @   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
j 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-65viz3iy/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j| |}djdd |j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j 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j| | || _tr*tr*tj| 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   sZ   t  s| jrdS t| jt js$| jn| jj}t|drB|j rBdS tj	j
ddkrVd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j| |}| 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| j tj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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   r=      CRITICALINFONz	/dev/nullz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,   rP   )r;   classr-   r,   filters	formatterrQ   )r;   rU   r-   r,   rW   rR   T)r;   rU   filenamedelayrW   )consoleconsole_errorsuser_logrZ   r[   r\   )r;   rF   zpip._vendorr;   )versiondisable_existing_loggersrV   
formattersrF   rootloggers)rO   r=   )r   config
dictConfigr@   r   )
	verbosityr-   Zuser_log_filer;   Zinclude_user_logZadditional_log_file
root_levelZvendored_log_levellog_streamsZhandler_classesr
   r
   r   setup_logging   sd    

rj   )r   )!
__future__r   
contextlibr   logging.handlersr3   Zpip._internal.utils.compatr   pip._internal.utils.miscr   	threadingImportErrordummy_threadingpip._vendorr   	Exceptionlocalr   r   contextmanagerr   r   r   r   r&   r(   r'   rF   rG   rB   FilterrI   rj   r
   r
   r
   r   <module>   s2   
4	