o
    if4                     @  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Zd dlZd dl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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+m,Z, e- Z.da/dZ0e%dZ1G dd de2Z3dAddZ4ej5dBddZ6ej5dCdDd#d$Z7dEd%d&Z8G d'd( d(ej9Z:eG d)d* d*Z;G d+d, d,eZ<d-d.dFd1d2Z=G d3d4 d4eZ>G d5d6 d6ej?j@ZAG d7d8 d8eZBG d9d: d:eZCdGd?d@ZDdS )H    )annotationsN)	Generator)	dataclass)StringIOTextIOWrapper)Filter)AnyClassVar)ConsoleConsoleOptionsConsoleRenderableRenderableTypeRenderResultRichCast)NullHighlighter)RichHandler)Segment)Style)VERBOSE	getLogger)WINDOWS)DEPRECATION_MSG_PREFIX)StreamWrapper
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   U/home/kim/smarthome/.venv/lib/python3.10/site-packages/pip/_internal/utils/logging.pyr   (   s    r   	exc_classtype[BaseException]excBaseExceptionreturnboolc                 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-   Generator[StringIO, None, None]c               	   c  s    i } t  jD ]}t|tr|j| |< qttj	}| s"|V  dS t
t|  j}t||dd}z| D ]}||_q5|V  W |  D ]\}}||_qCdS |  D ]\}}||_qQw )z-Capture all pip logs in a buffer temporarily.NTfileno_color	soft_wrap)loggingr   handlersr(   RichPipStreamHandlerconsoler   from_streamsysstdoutnextitervaluesr1   
PipConsoleitems)r4   handlerZfake_streamr1   Zfake_consoleZoriginal_consoler   r   r    capture_logging;   s*   

r@      numintGenerator[None, None, None]c              	   c  sD    t  t_t j| 7  _zdV  W t j| 8  _dS t j| 8  _w )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)rB   r   r   r    
indent_log[   s   "rH   c                   C  s   t tddS )NrG   r   )getattrrF   r   r   r   r    rE   j      rE   c                      s@   e Zd ZdZddd fddZdddZd fddZ  ZS )IndentingFormatterz%Y-%m-%dT%H:%M:%SF)add_timestampargsr   rL   r&   kwargsr%   Nonec                  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)rL   super__init__)selfrL   rM   rN   	__class__r   r    rQ   q   s   zIndentingFormatter.__init__	formattedstrlevelnorC   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: )r3   WARNING
startswithr   ERROR)rR   rU   rW   r   r   r    get_message_start   s   


z$IndentingFormatter.get_message_startrecordlogging.LogRecordc                   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.
        rX    c                   s   g | ]} | qS r   r   ).0lineprefixr   r    
<listcomp>   s    z-IndentingFormatter.format.<locals>.<listcomp>T)	rP   formatr\   rW   rL   
formatTimerE   join
splitlines)rR   r]   rU   message_startrS   rb   r    re      s   zIndentingFormatter.format)rM   r   rL   r&   rN   r   r%   rO   )rU   rV   rW   rC   r%   rV   )r]   r^   r%   rV   )r   r   r   default_time_formatrQ   r\   re   __classcell__r   r   rS   r    rK   n   s    
rK   c                   @  s(   e Zd ZU ded< ded< dddZdS )IndentedRenderabler   
renderablerC   indentr6   r
   optionsr   r%   r   c                 c  sL    | | j|}t|}|D ]}td| j V  |E d H  tdV  qd S )Nr_   
)renderrm   r   split_linesrn   )rR   r6   ro   segmentslinesra   r   r   r    __rich_console__   s   

z#IndentedRenderable.__rich_console__N)r6   r
   ro   r   r%   r   )r   r   r   __annotations__ru   r   r   r   r    rl      s   
 rl   c                   @  s   e Zd ZdddZdS )r=   r%   rO   c                 C  s   t  d N)r'   rR   r   r   r    on_broken_pipe   s   zPipConsole.on_broken_pipeN)r%   rO   )r   r   r   ry   r   r   r   r    r=      s    r=   Fstderrr{   r
   c                 C  s,   | rt d us
J dt S td usJ dtS )Nzstderr rich console is missing!zstdout rich console is missing!)_stderr_console_stdout_consolerz   r   r   r    get_console   s
   r~   c                      sD   e Zd ZU g Zded< d fddZdddZd fddZ  ZS )r5   zClassVar[list[str] | None]KEYWORDSr6   r
   r%   rO   c                   s   t  j|dddt d d S )NF)r6   	show_time
show_level	show_pathhighlighter)rP   rQ   r   )rR   r6   rS   r   r    rQ      s   
zRichPipStreamHandler.__init__r]   r^   c                 C  s   d }t |ddr+t|jtsJ |j\}t|tttfs#J | dt|t d}n'| 	|}| 
||}|jd urR|jtjkrGtdd}n|jtjkrRtdd}z| jj|dd|d	 W d S  tyn   | | Y d S w )
NrichFz is not rich-console-renderable)rn   red)coloryellowignore)overflowcropstyle)rI   r(   rM   tupler   r   rV   rl   rE   re   render_messagerW   r3   r[   r   rY   r6   print	ExceptionhandleError)rR   r]   r   rich_renderablerm   messager   r   r    emit   s0   



zRichPipStreamHandler.emitc                   sF   t  dd \}}|r|r| jjt ju rt||rt t |S )z1Called when logging is unable to log some output.NrA   )	r8   exc_infor6   r0   r9   r-   r   rP   r   )rR   r]   r!   r#   rS   r   r    r      s   z RichPipStreamHandler.handleError)r6   r
   r%   rO   )r]   r^   r%   rO   )	r   r   r   r   rv   rQ   r   r   rk   r   r   rS   r    r5      s
   
 

r5   c                      s   e Zd Zd fddZ  ZS )BetterRotatingFileHandlerr%   r   c                   s   t tj| j t  S rw   )r   ospathdirnamebaseFilenamerP   _openrx   rS   r   r    r      s   
zBetterRotatingFileHandler._open)r%   r   )r   r   r   r   rk   r   r   rS   r    r      s    r   c                   @  s    e Zd ZdddZdd
dZdS )MaxLevelFilterlevelrC   r%   rO   c                 C  s
   || _ d S rw   )r   )rR   r   r   r   r    rQ     s   
zMaxLevelFilter.__init__r]   r^   r&   c                 C  s   |j | jk S rw   )rW   r   rR   r]   r   r   r    filter  rJ   zMaxLevelFilter.filterN)r   rC   r%   rO   r]   r^   r%   r&   )r   r   r   rQ   r   r   r   r   r    r     s    
r   c                      s"   e Zd ZdZd fddZ  ZS )	ExcludeLoggerFilterzQ
    A logging Filter that excludes records from a logger (or its children).
    r]   r^   r%   r&   c                   s   t  | S rw   )rP   r   r   rS   r   r    r     s   zExcludeLoggerFilter.filterr   )r   r   r   r   r   rk   r   r   rS   r    r     s    r   	verbosityr1   user_log_file
str | Nonec                 C  s  | dkrt j}n"| dkrt}n| dkrt j}n| dkrt j}n| dkr't j}nt j}t |}|du}|r:|}d}nd}|}|d	v rDd
nd}ddd}	g d|rSdgng  }
tt	j
|ddatt	j|dd}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 tddgd d!d
|	d |dgd d!||	d |d"gd d!d|	d# |d$dd%d&d'||
d(d)d*|iid+ |S ),znConfigures and sets up all of the logging

    Returns the requested logging level, as its integer value.
    rA      NDEBUGz	/dev/null)INFOr[   rY   z0pip._internal.utils.logging.RichPipStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)streamr0   )r6   console_errorsconsole_subprocessuser_logTr/   Fz*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   re   )r   re   rL   )rn   indent_with_timestampr   r   r   rn   )r   classr6   filters	formatterr   r0   zutf-8r   )r   r   filenameencodingdelayr   )r6   r   r   r   )r   r4   zpip._vendorr   )versiondisable_existing_loggersr   
formattersr4   rootloggers)r3   r   r   rY   r[   CRITICALr   getLevelNamer=   r8   r9   r}   r{   config
dictConfigsubprocess_loggerr   rK   )r   r1   r   level_numberr   include_user_logadditional_log_file
root_levelvendored_log_levelhandler_classesr4   r|   r   r   r    setup_logging  s   

"
Fr   )r!   r"   r#   r$   r%   r&   )r%   r.   )rA   )rB   rC   r%   rD   )r%   rC   )r{   r&   r%   r
   )r   rC   r1   r&   r   r   r%   rC   )E
__future__r   
contextlibr*   r3   logging.handlersr   r8   	threadingcollections.abcr   dataclassesr   ior   r   r   typingr   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   r   localrF   r}   r|   r   r   r   r-   contextmanagerr@   rH   rE   	FormatterrK   rl   r=   r~   r5   r4   RotatingFileHandlerr   r   r   r   r   r   r   r    <module>   sV     

3	<