o
    [h,/                     @   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 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,da-dZ.e$dZ/G dd de0Z1dee2 de2de3fddZ4e j5d6de6ded fddZ7de6fddZ8G dd dej9Z:eG d d! d!Z;G d"d# d#eZ<d$d%d&e3defd'd(Z=G d)d* d*eZ>G d+d, d,ej?j@ZAG d-d. d.eZBG d/d0 d0eZCd1e6d2e3d3eeD de6fd4d5ZEdS )7    N)	dataclass)TextIOWrapper)Filter)AnyClassVar	GeneratorListOptional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   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/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*      num)NNNc              	   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)r,   r   r   r    
indent_log8   s   "r0   c                   C   s   t tddS )Nr/   r   )getattrr.   r   r   r   r    r-   G      r-   c                	       sf   e Zd ZdZdddedededdf fd	d
ZdededefddZ	de
jdef fddZ  ZS )IndentingFormatterz%Y-%m-%dT%H:%M:%SF)add_timestampargsr4   kwargsr#   Nc                   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)r4   super__init__)selfr4   r5   r6   	__class__r   r    r8   N   s   zIndentingFormatter.__init__	formattedlevelnoc                 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recordc                    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>z   s    z-IndentingFormatter.format.<locals>.<listcomp>T)	r7   formatrC   r=   r4   
formatTimer-   join
splitlines)r9   rD   r<   message_startr:   rH   r    rK   m   s   zIndentingFormatter.format)r   r   r   default_time_formatr   boolr8   strintrC   r?   	LogRecordrK   __classcell__r   r   r:   r    r3   K   s     r3   c                   @   s4   e Zd ZU eed< eed< dededefddZ	dS )	IndentedRenderable
renderableindentconsoleoptionsr#   c                 c   sL    | | j|}t|}|D ]}td| j V  |E d H  tdV  qd S )NrE   
)renderrW   r   split_linesrX   )r9   rY   rZ   segmentslinesrG   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                   @   s   e Zd ZdddZdS )
PipConsoler#   Nc                 C   s   t  d N)r$   r9   r   r   r    on_broken_pipe   s   zPipConsole.on_broken_pipe)r#   N)r   r   r   re   r   r   r   r    rb      s    rb   Fstderrrg   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_consolerf   r   r   r    get_console   s
   rj   c                       sl   e Zd ZU g Zeeee   ed< de	ddf fddZ
dejddfdd	Zdejddf fd
dZ  ZS )RichPipStreamHandlerKEYWORDSrY   r#   Nc                    s   t  j|dddt d d S )NF)rY   	show_time
show_level	show_pathhighlighter)r7   r8   r   )r9   rY   r:   r   r    r8      s   
zRichPipStreamHandler.__init__rD   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)rX   red)coloryellowignore)overflowcropstyle)r1   r%   r5   tupler   r   rR   rV   r-   rK   render_messager=   r?   rB   r   r@   rY   print	ExceptionhandleError)r9   rD   rx   rich_renderablerW   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.Nr+   )	sysexc_inforY   filestdoutr*   r   r7   r}   )r9   rD   r!   r"   r:   r   r    r}      s   z RichPipStreamHandler.handleError)r   r   r   rl   r   r	   r   rR   ra   r   r8   r?   rT   r   r}   rU   r   r   r:   r    rk      s
   
 
 rk   c                       s"   e Zd Zdef fddZ  ZS )BetterRotatingFileHandlerr#   c                    s   t tj| j t  S rc   )r   ospathdirnamebaseFilenamer7   _openrd   r:   r   r    r      s   
zBetterRotatingFileHandler._open)r   r   r   r   r   rU   r   r   r:   r    r      s    r   c                   @   s2   e Zd ZdeddfddZdejdefddZdS )	MaxLevelFilterlevelr#   Nc                 C   s
   || _ d S rc   )r   )r9   r   r   r   r    r8      s   
zMaxLevelFilter.__init__rD   c                 C   s   |j | jk S rc   )r=   r   r9   rD   r   r   r    filter   r2   zMaxLevelFilter.filter)	r   r   r   rS   r8   r?   rT   rQ   r   r   r   r   r    r      s    r   c                       s,   e Zd ZdZdejdef fddZ  ZS )ExcludeLoggerFilterzQ
    A logging Filter that excludes records from a logger (or its children).
    rD   r#   c                    s   t  | S rc   )r7   r   r   r:   r   r    r      s   zExcludeLoggerFilter.filter)	r   r   r   r   r?   rT   rQ   r   rU   r   r   r:   r    r      s     r   	verbosityno_coloruser_log_filec                 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.
    r+      NDEBUGz	/dev/null)INFOrB   r@   z0pip._internal.utils.logging.RichPipStreamHandlerz5pip._internal.utils.logging.BetterRotatingFileHandler)streamr   )rY   console_errorsconsole_subprocessuser_logT)r   r   	soft_wrapFz*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   rK   )r   rK   r4   )rX   indent_with_timestampr   r   r   rX   )r   classrY   filters	formatterr   r   zutf-8r   )r   r   filenameencodingdelayr   )rY   r   r   r   )r   handlerszpip._vendorr   )versiondisable_existing_loggersr   
formattersr   rootloggers)r?   r   r   r@   rB   CRITICALr   getLevelNamerb   r   r   ri   rg   config
dictConfigsubprocess_loggerr   r3   )r   r   r   level_numberr   include_user_logadditional_log_file
root_levelvendored_log_levelhandler_classesr   rh   r   r   r    setup_logging   s   

"
Fr   )r+   )F
contextlibr'   r?   logging.handlersr   r   	threadingdataclassesr   ior   r   typingr   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.   ri   rh   r   r|   r   BaseExceptionrQ   r*   contextmanagerrS   r0   r-   	Formatterr3   rV   rb   rj   rk   r   RotatingFileHandlerr   r   r   rR   r   r   r   r   r    <module>   sN      3	<"