Ë
    Q^(h  ã                   óT  — d 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  ee«      Zed	eeddf   fd
„«       Z	 	 ddeeee   f   deeee	f      d	ej.                  fd„Ze	 ddeeee   f   deeee	f      d	eeee   ee   f   ddf   fd„«       Zy)zFContains utilities to easily handle subprocesses in `huggingface_hub`.é    N)Úcontextmanager)ÚStringIO)ÚPath)ÚIOÚ	GeneratorÚListÚOptionalÚTupleÚUnioné   )Ú
get_loggerÚreturnc               #   ó–   K  — t        «       } t        j                  }| t        _        	 | –— |t        _        y# |t        _        w xY w­w)a  Capture output that is printed to terminal.

    Taken from https://stackoverflow.com/a/34738440

    Example:
    ```py
    >>> with capture_output() as output:
    ...     print("hello world")
    >>> assert output.getvalue() == "hello world
"
    ```
    N)r   ÚsysÚstdout)ÚoutputÚprevious_outputs     ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/huggingface_hub/utils/_subprocess.pyÚcapture_outputr      s7   è ø€ ô ‹Z€FÜ—j‘j€OØ„C„Jð%ØŠà$Œ�
ø�_Œ�
üs   ‚&A	©9 ­A	¹AÁA	ÚcommandÚfolderc           
      ó  — t        | t        «      r| j                  «       } t        |t        «      rt        |«      }t	        j
                  | ft        j                  t        j                  |dd|xs t        j                  «       dœ|¤ŽS )aX  
    Method to run subprocesses. Calling this will capture the `stderr` and `stdout`,
    please call `subprocess.run` manually in case you would like for them not to
    be captured.

    Args:
        command (`str` or `List[str]`):
            The command to execute as a string or list of strings.
        folder (`str`, *optional*):
            The folder in which to run the command. Defaults to current working
            directory (from `os.getcwd()`).
        check (`bool`, *optional*, defaults to `True`):
            Setting `check` to `True` will raise a `subprocess.CalledProcessError`
            when the subprocess has a non-zero exit code.
        kwargs (`Dict[str]`):
            Keyword arguments to be passed to the `subprocess.run` underlying command.

    Returns:
        `subprocess.CompletedProcess`: The completed process.
    úutf-8Úreplace)Ústderrr   ÚcheckÚencodingÚerrorsÚcwd)	Ú
isinstanceÚstrÚsplitr   Ú
subprocessÚrunÚPIPEÚosÚgetcwd)r   r   r   Úkwargss       r   Úrun_subprocessr)   5   st   € ô4 �'œ3ÔØ—-‘-“/ˆä�&œ$ÔÜ�V“ˆä�>‰>Øð	ä�‰Ü�‰ØØØØÒ!”b—i‘i“kñ	ð ñ	ð 	ó    c           
   +   ó°  K  — t        | t        «      r| j                  «       } t        j                  | ft        j
                  t        j
                  t        j                  dd|xs t        j                  «       dœ|¤Ž5 }|j                  €J d«       ‚|j                  €J d«       ‚|j                  |j                  f–— ddd«       y# 1 sw Y   yxY w­w)a›  Run a subprocess in an interactive mode in a context manager.

    Args:
        command (`str` or `List[str]`):
            The command to execute as a string or list of strings.
        folder (`str`, *optional*):
            The folder in which to run the command. Defaults to current working
            directory (from `os.getcwd()`).
        kwargs (`Dict[str]`):
            Keyword arguments to be passed to the `subprocess.run` underlying command.

    Returns:
        `Tuple[IO[str], IO[str]]`: A tuple with `stdin` and `stdout` to interact
        with the process (input and output are utf-8 encoded).

    Example:
    ```python
    with _interactive_subprocess("git credential-store get") as (stdin, stdout):
        # Write to stdin
        stdin.write("url=hf.co
username=obama
".encode("utf-8"))
        stdin.flush()

        # Read from stdout
        output = stdout.read().decode("utf-8")
    ```
    r   r   )Ústdinr   r   r   r   r   Nz'subprocess is opened as subprocess.PIPE)r    r!   r"   r#   ÚPopenr%   ÚSTDOUTr&   r'   r,   r   )r   r   r(   Úprocesss       r   Úrun_interactive_subprocessr0   a   sÁ   è ø€ ô@ �'œ3ÔØ—-‘-“/ˆä	×	Ñ	Øð	
ä�o‰oÜ�‰Ü× Ñ ØØØÒ!”b—i‘i“kñ	
ð ñ	
ð ,ð 
Ø�}‰}Ð(ÐSÐ*SÓSÐ(Ø�~‰~Ð)ÐTÐ+TÓTÐ)Ø�m‰m˜WŸ^™^Ð+Ò+÷,÷ ,ñ ,üs   ‚A>CÂ AC
Ã	CÃ
CÃC)NT)N)Ú__doc__r&   r#   r   Ú
contextlibr   Úior   Úpathlibr   Útypingr   r   r   r	   r
   r   Úloggingr   Ú__name__Úloggerr   r!   ÚCompletedProcessr)   r0   © r*   r   ú<module>r;      s  ðñ Mã 	Û Û 
Ý %Ý Ý ß >× >å ñ 
�HÓ	€ð ð%˜	 (¨D°$Ð"6Ñ7ò %ó ð%ð. *.Ø
ñ)Ø�3˜˜S™	�>Ñ"ð)à�U˜3 ˜9Ñ%Ñ&ð)ð
 × Ñ ó)ðX ð *.ñ.,Ø�3˜˜S™	�>Ñ"ð.,à�U˜3 ˜9Ñ%Ñ&ð.,ð ˆu�R˜‘W˜b ™gÐ%Ñ&¨¨dÐ2Ñ3ò	.,ó ñ.,r*   