o
    |ŸŽiT(  ã                   @   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 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eeef  ZdZdd	„ Zd
d„ Zdd„ Zdd„ Z										ddd„Zdd„ ZdS )é    N)ÚAnyÚCallableÚIterableÚListÚMappingÚOptionalÚUnion)ÚSpinnerInterfaceÚopen_spinner)ÚInstallationSubprocessError)ÚVERBOSEÚsubprocess_logger)Ú
HiddenTextz(----------------------------------------c                  G   s2   g }| D ]}t |tƒr| |¡ q| |¡ q|S )z&
    Create a CommandArgs object.
    N)Ú
isinstanceÚlistÚextendÚappend)ÚargsÚcommand_argsÚarg© r   úhC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\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   s2   � | ]}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>N)Újoin©r   r   r   r   Úformat_command_args$   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>9   s     z'reveal_command_args.<locals>.<listcomp>Nr   r!   r   r   r   Úreveal_command_args4   s   r%   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.
    Ú zŸCommand errored out with exit status {exit_status}:
 command: {command_display}
     cwd: {cwd_display}
Complete output ({line_count} lines):
{output}{divider})Úexit_statusÚcommand_displayÚcwd_displayÚ
line_countÚoutputÚdividerN)r"   r    ÚformatÚlenÚLOG_DIVIDER)Úcmd_argsÚcwdÚlinesr'   Úcommandr+   Úmsgr   r   r   Úmake_subprocess_output_error<   s   
òr5   FÚraiseTc              
   C   s°  |du rg }|du rg }|rt j}tj}nt j}t}t  ¡ |k}| o&|du}|du r/t| ƒ}|d|ƒ tj	 
¡ }|r@| |¡ |D ]}| |d¡ qBztjt| ƒtjtj|
sZtjntj||dd�}W n tyy } z
|	rtt  d||¡ ‚ d}~ww g }|
sÏ|jsƒJ ‚|jsˆJ ‚|j ¡  	 |j ¡ }|s–q°| ¡ }| |d ¡ ||ƒ |r¯|s«J ‚| ¡  qŽz| ¡  W |jr¾|j ¡  n
|jrÈ|j ¡  w w d |¡}n(| ¡ \}}| ¡ D ]}||ƒ qÙ| |¡ | ¡ D ]}||ƒ qé| |¡ |}|joþ|j|v}|�r|�sJ ‚|�r|  d	¡ n|  d
¡ |�rV|dk�r7|�s1|	�r1t!| |||jd�}t  "|¡ t#|j|ƒ‚|dk�rGt  $d||j|¡ |S |dk�rO	 |S 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Ústderrr1   ÚenvÚerrorsz#Error %s while executing command %sTÚ
r&   ÚerrorÚdoner6   )r0   r1   r2   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Úcriticalr9   r8   ÚcloseÚreadlineÚrstripr   ÚspinÚwaitr    ÚcommunicateÚ
splitlinesÚ
returncodeÚfinishr5   r>   r   ÚwarningÚ
ValueError)ÚcmdÚshow_stdoutr1   Úon_returncodeÚextra_ok_returncodesÚcommand_descÚextra_environÚunset_environÚspinnerÚlog_failed_cmdÚstdout_onlyÚlog_subprocessÚ
used_levelÚshowing_subprocessÚuse_spinnerr;   ÚnameÚprocÚexcÚ
all_outputÚliner+   ÚoutÚerrÚout_lineÚerr_lineÚproc_had_errorr4   r   r   r   Úcall_subprocess`   sÌ   



ø
ý€ù



ô

€ÿÿ






ü

ü

üÿru   c                    s   		d‡ fdd„	}|S )zÜProvide 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.
    Nc                    s>   t ˆ ƒ�}t| |||d� W d   ƒ d S 1 sw   Y  d S )N)r1   rb   rd   )r
   ru   )r]   r1   rb   rd   ©Úmessager   r   Úrunner  s   
ü"ÿz+runner_with_spinner_message.<locals>.runner)NNr   )rw   rx   r   rv   r   Úrunner_with_spinner_message  s   
ýry   )
FNr6   NNNNNTF)rC   rG   r   rL   Útypingr   r   r   r   r   r   r   Úpip._internal.cli.spinnersr	   r
   Úpip._internal.exceptionsr   Úpip._internal.utils.loggingr   r   Úpip._internal.utils.miscr   r   ÚCommandArgsr/   r   r"   r%   r5   ru   ry   r   r   r   r   Ú<module>   s8    $&
õ $