U
    ÐvagS-  ã                   @   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    úO/var/www/html/myvenv/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ÚEINVALZ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
    
r0   ©r$   c                   C   s   t tddƒS )Nr/   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)Úargsr4   Ú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)r4   ÚsuperÚ__init__)Úselfr4   r5   r6   ©Ú	__class__r    r!   r8   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)r9   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)	r7   ÚformatrC   r=   r4   Ú
formatTimer-   ÚjoinÚ
splitlines)r9   rE   r<   Zmessage_startr:   rI   r!   rL   k   s    zIndentingFormatter.format)r   r   r   Údefault_time_formatr   Úboolr8   ÚstrÚintrC   r?   Ú	LogRecordrL   Ú__classcell__r    r    r:   r!   r3   I   s   ýûr3   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 )NrF   Ú
)ZrenderrW   r   Zsplit_linesrX   )r9   rY   rZ   ÚsegmentsÚlinesrH   r    r    r!   Ú__rich_console__�   s    

z#IndentedRenderable.__rich_console__N)
r   r   r   r   Ú__annotations__rS   r   r   r   r^   r    r    r    r!   rV   |   s   
 þrV   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)Úfilerc   Z	soft_wrapF)rY   Z	show_timeZ
show_levelZ	show_pathZhighlighter)r7   r8   r   r   )r9   rb   rc   r:   r    r!   r8   �   s    ûzRichPipStreamHandler.__init__rD   c                 C   sà   d }t |jtƒst‚t|ddƒrV|j\}t |tttfƒsFt|› 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richFz is not rich-console-renderable)rX   Zred)ZcolorZyellowÚignore)ZoverflowZcropÚstyle)r&   r5   ÚtupleÚAssertionErrorr2   r   r   rR   rV   r-   rL   Zrender_messager=   r?   rB   r   r@   rY   ÚprintÚ	ExceptionÚhandleError)r9   rE   rf   Zrich_renderablerW   Ú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_inforY   rd   Ústdoutr*   r   r7   rk   )r9   rE   r"   r#   r:   r    r!   rk   µ   s    ÿþýüz RichPipStreamHandler.handleError)r   r   r   ra   r   r	   r   rR   r_   r
   rQ   r8   r?   rT   rm   rk   rU   r    r    r:   r!   r`   Œ   s   

r`   c                       s"   e Zd Zedœ‡ fdd„Z‡  ZS )ÚBetterRotatingFileHandlerr1   c                    s   t tj | j¡ƒ tƒ  ¡ S ©N)r   ÚosÚpathÚdirnameÚbaseFilenamer7   Ú_open)r9   r:   r    r!   rw   É   s    zBetterRotatingFileHandler._open)r   r   r   r   rw   rU   r    r    r:   r!   rq   È   s   rq   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 rr   )ry   )r9   ry   r    r    r!   r8   Ï   s    zMaxLevelFilter.__init__rD   c                 C   s   |j | jk S rr   )r=   ry   ©r9   rE   r    r    r!   ÚfilterÒ   s    zMaxLevelFilter.filter)	r   r   r   rS   r8   r?   rT   rQ   r{   r    r    r    r!   rx   Î   s   rx   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).
    rD   c                    s   t ƒ  |¡ S rr   )r7   r{   rz   r:   r    r!   r{   Ü   s    zExcludeLoggerFilter.filter)	r   r   r   r   r?   rT   rQ   r{   rU   r    r    r:   r!   r|   Ö   s   r|   )Ú	verbosityrc   Ú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+   é   éÿÿÿÿéþÿÿÿéýÿÿÿNÚDEBUGz	/dev/null)ÚINFOrB   r@   zext://sys.stdoutzext://sys.stderr)rp   Ústderrz0pip._internal.utils.logging.RichPipStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)rb   rd   rY   Úconsole_errorsÚconsole_subprocessÚuser_logFz*pip._internal.utils.logging.MaxLevelFilter)ú()ry   zlogging.Filter)r‰   Únamez/pip._internal.utils.logging.ExcludeLoggerFilter)Úexclude_warningsÚrestrict_to_subprocessÚexclude_subprocessz%(message)s)r‰   rL   T)r‰   rL   r4   )rX   Úindent_with_timestamprb   rp   r�   r‹   rX   )ry   Úclassrc   rb   ÚfiltersÚ	formatterr…   rŒ   )ry   r�   rb   rc   r�   r‘   rd   zutf-8rŽ   )ry   r�   ÚfilenameÚencodingÚdelayr‘   )rY   r†   r‡   rˆ   )ry   Úhandlerszpip._vendorry   )ÚversionZdisable_existing_loggersr�   Z
formattersr•   ÚrootZloggers)r?   rƒ   r   r@   rB   ÚCRITICALr„   ÚgetLevelNameÚconfigZ
dictConfigÚsubprocess_loggerrŠ   r3   )r}   rc   r~   Zlevel_numberry   Zinclude_user_logZadditional_log_fileZ
root_levelZvendored_log_levelZlog_streamsZhandler_classesr•   r    r    r!   Úsetup_loggingâ   sª    
þþÿþþþ÷þýûú	úú	úå%þ
¼ÿIrœ   )r+   )CÚ
contextlibr(   r?   Zlogging.handlersrs   rn   Ú	threadingZdataclassesr   Úior   r   Útypingr   r   r   r   r	   r
   r   Zpip._vendor.rich.consoler   r   r   r   r   r   Zpip._vendor.rich.highlighterr   Zpip._vendor.rich.loggingr   Zpip._vendor.rich.segmentr   Zpip._vendor.rich.styler   Zpip._internal.utils._logr   r   Úpip._internal.utils.compatr   Zpip._internal.utils.deprecationr   Úpip._internal.utils.miscr   Úlocalr.   r›   rj   r   ÚBaseExceptionrQ   r*   ÚcontextmanagerrS   r0   r-   Ú	Formatterr3   rV   r`   r•   ZRotatingFileHandlerrq   rx   r|   rR   rœ   r    r    r    r!   Ú<module>   sD   $ 3<