U
    ƒIÀdp-  ã                   @   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Zd dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ d d	lm Z  d d
l!m"Z" d dl#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ e ,¡ Z-e%dƒZ.G dd„ de/ƒZ0ee1 e1e2dœdd„Z3e j4d,e5ed dœdd„ƒZ6e5dœdd„Z7G dd„ dej8ƒZ9eG dd „ d ƒƒZ:G d!d"„ d"eƒZ;G d#d$„ d$ej<j=ƒZ>G d%d&„ d&eƒZ?G d'd(„ d(eƒZ@e5e2eeA e5d)œd*d+„ZBdS )-é    N)Ú	dataclass)ÚTextIOWrapper)ÚFilter)ÚAnyÚClassVarÚ	GeneratorÚListÚOptionalÚTextIOÚType)ÚConsoleÚConsoleOptionsÚConsoleRenderableÚRenderableTypeÚRenderResultÚRichCast)ÚNullHighlighter)ÚRichHandler)ÚSegment)ÚStyle)ÚVERBOSEÚ	getLogger)ÚWINDOWS)ÚDEPRECATION_MSG_PREFIX)Ú
ensure_dirz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    úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pip/_internal/utils/logging.pyr   #   s   r   )Ú	exc_classÚexcÚreturnc                 C   s0   | t krdS tsdS t|tƒo.|jtjtjfkS )NTF)ÚBrokenPipeErrorr   Ú
isinstanceÚOSErrorÚerrnoÚEINVALÚEPIPE)r"   r#   r    r    r!   Ú_is_broken_pipe_error)   s
    r+   é   )NNN)Únumr$   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)r-   r    r    r!   Ú
indent_log6   s
    
r1   ©r$   c                   C   s   t tddƒS )Nr0   r   )Úgetattrr/   r    r    r    r!   r.   E   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)Úargsr5   Úkwargsr$   c                   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)r5   ÚsuperÚ__init__)Úselfr5   r6   r7   ©Ú	__class__r    r!   r9   L   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)r:   r=   r>   r    r    r!   Úget_message_start[   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.
        r?   ú c                    s   g | ]}ˆ | ‘qS r    r    )Ú.0Úline©Úprefixr    r!   Ú
<listcomp>x   s     z-IndentingFormatter.format.<locals>.<listcomp>T)	r8   ÚformatrD   r>   r5   Ú
formatTimer.   ÚjoinÚ
splitlines)r:   rF   r=   Úmessage_startr;   rJ   r!   rM   k   s    zIndentingFormatter.format)r   r   r   Údefault_time_formatr   Úboolr9   ÚstrÚintrD   r@   Ú	LogRecordrM   Ú__classcell__r    r    r;   r!   r4   I   s   ýûr4   c                   @   s0   e Zd ZU eed< eed< eeedœdd„Z	dS )ÚIndentedRenderableÚ
renderableÚindent)ÚconsoleÚoptionsr$   c                 c   sJ   |  | j|¡}t |¡}|D ](}td| j ƒV  |E d H  tdƒV  qd S )NrG   Ú
)ÚrenderrY   r   Úsplit_linesrZ   )r:   r[   r\   ÚsegmentsÚlinesrI   r    r    r!   Ú__rich_console__�   s    

z#IndentedRenderable.__rich_console__N)
r   r   r   r   Ú__annotations__rU   r   r   r   rb   r    r    r    r!   rX   |   s   
 þrX   c                       sl   e Zd ZU g Zeeee   ed< ee	 e
ddœ‡ fdd„Zejddœdd„Zejddœ‡ fd	d
„Z‡  ZS )ÚRichPipStreamHandlerÚKEYWORDSN)ÚstreamÚno_colorr$   c                    s&   t ƒ jt||dd�dddtƒ d� d S )NT)Úfilerg   Ú	soft_wrapF)r[   Ú	show_timeÚ
show_levelÚ	show_pathÚhighlighter)r8   r9   r   r   )r:   rf   rg   r;   r    r!   r9   �   s    ûzRichPipStreamHandler.__init__rE   c                 C   sî   d }t |jtƒst‚|jdkrdt|jƒdkrd|jd }t |tttfƒsTt|› d�ƒ‚t	|t
ƒ d�}nN|  |¡}|  ||¡}|jd k	r²|jtjkrœtdd�}n|jtjkr²tdd�}z| jj|d	d
|d� W n tk
rè   |  |¡ Y nX d S )Nz[present-rich] %sé   r   z is not rich-console-renderable)rZ   Úred)ÚcolorÚyellowÚignoreF)ÚoverflowÚcropÚstyle)r&   r6   ÚtupleÚAssertionErrorÚmsgÚlenr   r   rT   rX   r.   rM   Úrender_messager>   r@   rC   r   rA   r[   ÚprintÚ	ExceptionÚhandleError)r:   rF   ru   Úrich_renderablerY   Úmessager    r    r!   Úemit™   s2    
 ÿþ ÿ


zRichPipStreamHandler.emitc                    sF   t  ¡ dd… \}}|r:|r:| jjt jkr:t||ƒr:tƒ ‚tƒ  |¡S )z1Called when logging is unable to log some output.Nr,   )	ÚsysÚexc_infor[   rh   Ústdoutr+   r   r8   r}   )r:   rF   r"   r#   r;   r    r!   r}   µ   s    ÿþýüz RichPipStreamHandler.handleError)r   r   r   re   r   r	   r   rT   rc   r
   rS   r9   r@   rV   r€   r}   rW   r    r    r;   r!   rd   Œ   s   

rd   c                       s"   e Zd Zedœ‡ fdd„Z‡  ZS )ÚBetterRotatingFileHandlerr2   c                    s   t tj | j¡ƒ tƒ  ¡ S ©N)r   ÚosÚpathÚdirnameÚbaseFilenamer8   Ú_open)r:   r;   r    r!   rŠ   É   s    zBetterRotatingFileHandler._open)r   r   r   r   rŠ   rW   r    r    r;   r!   r„   È   s   r„   c                   @   s.   e Zd Zeddœdd„Zejedœdd„ZdS )ÚMaxLevelFilterN)Úlevelr$   c                 C   s
   || _ d S r…   )rŒ   )r:   rŒ   r    r    r!   r9   Ï   s    zMaxLevelFilter.__init__rE   c                 C   s   |j | jk S r…   )r>   rŒ   ©r:   rF   r    r    r!   ÚfilterÒ   s    zMaxLevelFilter.filter)	r   r   r   rU   r9   r@   rV   rS   rŽ   r    r    r    r!   r‹   Î   s   r‹   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).
    rE   c                    s   t ƒ  |¡ S r…   )r8   rŽ   r�   r;   r    r!   rŽ   Ü   s    zExcludeLoggerFilter.filter)	r   r   r   r   r@   rV   rS   rŽ   rW   r    r    r;   r!   r�   Ö   s   r�   )Ú	verbosityrg   Ú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k	}|rt|}d}nd}|}|d	krˆd
nd}dddœ}	dddœ}
dddg|r²d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/œd0d1|iid2œ¡ |S )3znConfigures and sets up all of the logging

    Returns the requested logging level, as its integer value.
    r,   rn   éÿÿÿÿéþÿÿÿéýÿÿÿNÚDEBUGz	/dev/null)ÚINFOrC   rA   zext://sys.stdoutzext://sys.stderr)rƒ   Ústderrz0pip._internal.utils.logging.RichPipStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)rf   rh   r[   Úconsole_errorsÚconsole_subprocessÚuser_logFz*pip._internal.utils.logging.MaxLevelFilter)ú()rŒ   zlogging.Filter)r›   Únamez/pip._internal.utils.logging.ExcludeLoggerFilter)Úexclude_warningsÚrestrict_to_subprocessÚexclude_subprocessz%(message)s)r›   rM   T)r›   rM   r5   )rZ   Úindent_with_timestamprf   rƒ   rŸ   r�   rZ   )rŒ   Úclassrg   rf   ÚfiltersÚ	formatterr—   rž   )rŒ   r¡   rf   rg   r¢   r£   rh   zutf-8r    )rŒ   r¡   ÚfilenameÚencodingÚdelayr£   )r[   r˜   r™   rš   )rŒ   Úhandlerszpip._vendorrŒ   )ÚversionÚdisable_existing_loggersr¢   Ú
formattersr§   ÚrootÚloggers)r@   r•   r   rA   rC   ÚCRITICALr–   ÚgetLevelNameÚconfigÚ
dictConfigÚsubprocess_loggerrœ   r4   )r�   rg   r‘   Úlevel_numberrŒ   Úinclude_user_logÚadditional_log_fileÚ
root_levelÚvendored_log_levelÚlog_streamsÚhandler_classesr§   r    r    r!   Úsetup_loggingâ   sª    
þþÿþþþ÷þýûú	úú	úå%þ
¼ÿIr¹   )r,   )CÚ
contextlibr(   r@   Úlogging.handlersr†   r�   Ú	threadingÚdataclassesr   Úior   r   Útypingr   r   r   r   r	   r
   r   Úpip._vendor.rich.consoler   r   r   r   r   r   Zpip._vendor.rich.highlighterr   Úpip._vendor.rich.loggingr   Zpip._vendor.rich.segmentr   Úpip._vendor.rich.styler   Úpip._internal.utils._logr   r   Úpip._internal.utils.compatr   Úpip._internal.utils.deprecationr   Úpip._internal.utils.miscr   Úlocalr/   r±   r|   r   ÚBaseExceptionrS   r+   ÚcontextmanagerrU   r1   r.   Ú	Formatterr4   rX   rd   r§   ÚRotatingFileHandlerr„   r‹   r�   rT   r¹   r    r    r    r!   Ú<module>   sD   $ 3<