a
    4Da-                     @   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y   d dlZY n0 zd dlmZ W n ey   dZY n0 e Z ed	Z!G d
d deZ"ee# e#e$dddZ%e j&d&e'ed dddZ(e'dddZ)G dd dej*Z+e,e
e,ge,f dddZ-G dd dej.Z/G dd dej0j1Z2G dd  d eZ3G d!d" d"eZ4e'e$ee, e'd#d$d%Z5d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   k/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/pip/_internal/utils/logging.pyr   !   s   r   )	exc_classexcreturnc                 C   s0   | t u rdS tsdS t|to.|jtjtjfv S )NTF)BrokenPipeErrorr   
isinstanceOSErrorerrnoEINVALEPIPE)r   r   r   r   r   _is_broken_pipe_error'   s
    r!      )numr   c              	   c   sD   t  t_t j| 7  _zdV  W t j| 8  _nt j| 8  _0 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_log4   s
    r'   r   c                   C   s   t tddS )Nr&   r   )getattrr%   r   r   r   r   r$   C   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)argsr+   kwargsr   c                   s   || _ t j|i | 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+   r,   r-   	__class__r   r   r/   J   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)r0   r3   r4   r   r   r   get_message_startY   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.
        r5    c                    s   g | ]} | qS r   r   ).0lineprefixr   r   
<listcomp>v       z-IndentingFormatter.format.<locals>.<listcomp>T)	r.   formatr:   r4   r+   
formatTimer$   join
splitlines)r0   r<   r3   message_startr1   r@   r   rD   i   s    zIndentingFormatter.format)r   r   r   default_time_formatr   boolr/   strintr:   r6   	LogRecordrD   __classcell__r   r   r1   r   r*   G   s   r*   )colorsr   c                     s   t t d fdd}|S )N)inpr   c                    s   d t | tjjg S )Nr5   )rF   listr   Style	RESET_ALL)rP   rO   r   r   wrapped{   s    z_color_wrap.<locals>.wrapped)rK   )rO   rU   r   rT   r   _color_wrapz   s    rV   c                       s   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ee edd fddZedddZeddd	Zejed
 fddZejdd
 fddZ  ZS )ColorizedStreamHandlerN)streamno_colorr   c                    s,   t  | || _tr(tr(t| j| _d S N)r.   r/   	_no_colorr   r   AnsiToWin32rX   )r0   rX   rY   r1   r   r   r/      s    zColorizedStreamHandler.__init__r(   c                 C   s.   t r"tr"ttj| j}|jtju S | jtju S )zA
        Return whether the handler is using sys.stdout.
        )r   r   r
   r\   rX   rU   sysstdout)r0   rX   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[   r   rX   r\   rU   hasattrr`   osenvironget)r0   real_streamr   r   r   should_color   s    
z#ColorizedStreamHandler.should_colorr;   c                    s>   t  |}|  r:| jD ]\}}|j|kr||} q:q|S rZ   )r.   rD   rh   COLORSr4   )r0   r<   msglevelcolorr1   r   r   rD      s    
zColorizedStreamHandler.formatc                    s@   t  d d \}}|r4|r4|  r4t||r4t t |S )Nr"   )r]   exc_infor_   r!   r   r.   handleError)r0   r<   r   r   r1   r   r   rn      s    z"ColorizedStreamHandler.handleError)NN)r   r   r   r   r6   r9   rV   ForeREDr7   YELLOWri   r   r   rJ   r/   r_   rh   rM   rK   rD   rn   rN   r   r   r1   r   rW      s   rW   c                       s&   e Zd Zee d fddZ  ZS )BetterRotatingFileHandlerr(   c                    s   t tj| j t  S rZ   )r   rd   pathdirnamebaseFilenamer.   _open)r0   r1   r   r   rv      s    zBetterRotatingFileHandler._open)r   r   r   r   r   rv   rN   r   r   r1   r   rr      s   rr   c                   @   s.   e Zd ZeddddZejedddZdS )MaxLevelFilterN)rk   r   c                 C   s
   || _ d S rZ   )rk   )r0   rk   r   r   r   r/      s    zMaxLevelFilter.__init__r;   c                 C   s   |j | jk S rZ   )r4   rk   r0   r<   r   r   r   filter   s    zMaxLevelFilter.filter)	r   r   r   rL   r/   r6   rM   rJ   ry   r   r   r   r   rw      s   rw   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).
    r;   c                    s   t  | S rZ   )r.   ry   rx   r1   r   r   ry      s    zExcludeLoggerFilter.filter)	r   r   r   r   r6   rM   rJ   ry   rN   r   r   r1   r   rz      s   rz   )	verbosityrY   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u}|rt|}d}nd}|}|d	v rd
nd}ddd}	ddd}
g d|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-d.|iid/ |S )0znConfigures and sets up all of the logging

    Returns the requested logging level, as its integer value.
    r"      NDEBUGz	/dev/null)INFOr9   r7   zext://sys.stdoutzext://sys.stderr)r^   stderrz2pip._internal.utils.logging.ColorizedStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)rX   file)consoleconsole_errorsconsole_subprocessuser_logFz*pip._internal.utils.logging.MaxLevelFilter)()rk   zlogging.Filter)r   namez/pip._internal.utils.logging.ExcludeLoggerFilter)exclude_warningsrestrict_to_subprocessexclude_subprocessz%(message)s)r   rD   T)r   rD   r+   )indentindent_with_timestamprX   r^   r   r   r   )rk   classrY   rX   filters	formatterr   r   r   zutf-8r   )rk   r   filenameencodingdelayr   )r   r   r   r   )rk   handlerszpip._vendorrk   )versiondisable_existing_loggersr   
formattersr   rootloggers)r6   r   r   r7   r9   CRITICALr   getLevelNameconfig
dictConfigsubprocess_loggerr   r*   )r{   rY   r|   level_numberrk   include_user_logadditional_log_file
root_levelvendored_log_levellog_streamshandler_classesr   r   r   r   setup_logging   s    
		%
Ir   )r"   )6
contextlibr   r6   logging.handlersrd   r]   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   BaseExceptionrJ   r!   contextmanagerrL   r'   r$   	Formatterr*   rK   rV   StreamHandlerrW   r   RotatingFileHandlerrr   rw   rz   r   r   r   r   r   <module>   sB   (
3Q