a
    4DaJ'                     @   s  d dl Z d dlZd dlZd dl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mZ d dlmZ erd dlmZ e	eeef  ZdZeeeef ed	d
dZee	e ef ed	ddZee	e ef e	e d	ddZee	e ef ee e	e eedddZdee	e ef e ee deee  ee ee
eef  eee  ee ee  ee  edddZ!eed dddZ"dS )    N)TYPE_CHECKINGAnyCallableIterableListMappingOptionalUnion)SpinnerInterfaceopen_spinner)InstallationSubprocessError)VERBOSEsubprocess_logger)
HiddenText)Literalz(----------------------------------------)argsreturnc                  G   s2   g }| D ]$}t |tr"|| q|| q|S )z&
    Create a CommandArgs object.
    )
isinstancelistextendappend)r   command_argsarg r   n/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/pip/_internal/utils/subprocess.pymake_command!   s    
r   c                 C   s   d dd | D S )z/
    Format command arguments for display.
     c                 s   s0   | ](}t |trtt|nt|V  qd S )N)r   r   shlexquotestr.0r   r   r   r   	<genexpr>;   s   z&format_command_args.<locals>.<genexpr>)joinr   r   r   r   format_command_args2   s    	
r%   c                 C   s   dd | D S )z=
    Return the arguments in their raw, unredacted form.
    c                 S   s    g | ]}t |tr|jn|qS r   )r   r   secretr    r   r   r   
<listcomp>E       z'reveal_command_args.<locals>.<listcomp>r   r$   r   r   r   reveal_command_argsA   s    r)   )cmd_argscwdlinesexit_statusr   c                 C   s0   t | }d|}dj|||t||td}|S )z
    Create and return the error message to use to log a subprocess error
    with command output.

    :param lines: A list of lines, each ending with a newline.
     zCommand errored out with exit status {exit_status}:
 command: {command_display}
     cwd: {cwd_display}
Complete output ({line_count} lines):
{output}{divider})r-   command_displaycwd_display
line_countoutputdivider)r%   r#   formatlenLOG_DIVIDER)r*   r+   r,   r-   commandr2   msgr   r   r   make_subprocess_output_errorH   s    
	r9   FraiseTz"Literal["raise", "warn", "ignore"])cmdshow_stdoutr+   on_returncodeextra_ok_returncodescommand_descextra_environunset_environspinnerlog_failed_cmdstdout_onlyr   c              
   C   s  |du rg }|du rg }|r*t j}tj}n
t j}t}t  |k}| oL|du}|du r^t| }|d| tj	
 }|r|| |D ]}||d qz0tjt| tjtj|
stjntj||dd}W n8 ty } z |	rt d||  W Y d}~n
d}~0 0 g }|
s|jsJ |js"J |j  |j }|s@qz| }||d  || |r,|snJ |  q,z|  W |jr|j  n|jr|j  0 d|}nT| \}}| D ]}|| q|| | D ]}|| q|| |}|jo|j|v}|rL|s0J |rB| d n
| d	 |r|d
kr|s|	rt!| |||jd}t "| t#|j|n8|dkrt $d||j| n|dkrnt%d||S )a  
    Args:
      show_stdout: if true, use INFO to log the subprocess's stderr and
        stdout streams.  Otherwise, use DEBUG.  Defaults to False.
      extra_ok_returncodes: an iterable of integer return codes that are
        acceptable, in addition to 0. Defaults to None, which means [].
      unset_environ: an iterable of environment variable names to unset
        prior to calling subprocess.Popen().
      log_failed_cmd: if false, failed commands are not logged, only raised.
      stdout_only: if true, return only stdout, else return both. When true,
        logging of both stdout and stderr occurs when the subprocess has
        terminated, else logging occurs as subprocess output is produced.
    NzRunning command %sbackslashreplace)stdinstdoutstderrr+   enverrorsz#Error %s while executing command %s
r.   errordoner:   )r*   r+   r,   r-   warnz$Command "%s" had error code %s in %signorezInvalid value: on_returncode=)&r   infologgingINFOverboser   getEffectiveLevelr%   osenvironcopyupdatepop
subprocessPopenr)   PIPESTDOUT	ExceptioncriticalrG   rF   closereadlinerstripr   spinwaitr#   communicate
splitlines
returncodefinishr9   rL   r   warning
ValueError)r;   r<   r+   r=   r>   r?   r@   rA   rB   rC   rD   log_subprocess
used_levelshowing_subprocessuse_spinnerrI   nameprocexc
all_outputliner2   outerrZout_lineZerr_lineproc_had_errorr8   r   r   r   call_subprocessk   s    
















rw   ).N)messager   c                    s2   dt t tt ttttf  dd fdd}|S )zProvide a subprocess_runner that shows a spinner message.

    Intended for use with for pep517's Pep517HookCaller. Thus, the runner has
    an API that matches what's expected by Pep517HookCaller.subprocess_runner.
    N)r;   r+   r@   r   c                    s<   t   }t| |||d W d    n1 s.0    Y  d S )N)r+   r@   rB   )r   rw   )r;   r+   r@   rB   rx   r   r   runner  s    
z+runner_with_spinner_message.<locals>.runner)NN)r   r   r   r   r   )rx   rz   r   ry   r   runner_with_spinner_message  s    	  r{   )
FNr:   NNNNNTF)#rQ   rU   r   rZ   typingr   r   r   r   r   r   r   r	   pip._internal.cli.spinnersr
   r   pip._internal.exceptionsr   pip._internal.utils.loggingr   r   pip._internal.utils.miscr   r   r   ZCommandArgsr6   r   r%   r)   intr9   boolrw   r{   r   r   r   r   <module>   s^   ( %          

 #