
    GjZg                    X   U d dl mZ 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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 dd	lmZ ej,                  rd d
lmZ ddlmZ e
j6                  dk(  rej8                  d   Zded<   nej8                  d   Zded<   ee e!   e!ef   Z"ded<    G d d      Z#ejH                  d"d       Z% G d d      Z& G d dejN                        Z( G d d      Z) G d dejT                        Z+	 	 	 	 	 	 d#dZ, G d d      Z- G d  d!      Z.y)$    )annotationsN)TracebackType   )_compat)
formatting)termui)utils)_find_binary_reader)ReadableBuffer)Commandwin32syszt.TypeAliasCaptureMode)r   fdExceptionInfoc                  z    e Zd ZU ded<   ded<   ded<   ddZddZddZddd	Zddd
ZdddZ	ddZ
ddZddZy)EchoingStdin
t.BinaryIO_input_outputbool_pausedc                .    || _         || _        d| _        y )NF)r   r   r   )selfinputoutputs      S/var/www/python/quitsure-support/venv/lib/python3.12/site-packages/click/testing.py__init__zEchoingStdin.__init__%   s        c                .    t        | j                  |      S N)getattrr   r   xs     r   __getattr__zEchoingStdin.__getattr__*   s    t{{A&&r   c                T    | j                   s| j                  j                  |       |S r!   )r   r   write)r   rvs     r   _echozEchoingStdin._echo-   s     ||LLr"	r   c                V    | j                  | j                  j                  |            S r!   )r)   r   readr   ns     r   r+   zEchoingStdin.read3   s     zz$++**1-..r   c                V    | j                  | j                  j                  |            S r!   )r)   r   read1r,   s     r   r/   zEchoingStdin.read16   s     zz$++++A.//r   c                V    | j                  | j                  j                  |            S r!   )r)   r   readliner,   s     r   r1   zEchoingStdin.readline9   s     zz$++..q122r   c                z    | j                   j                         D cg c]  }| j                  |       c}S c c}w r!   )r   	readlinesr)   r#   s     r   r3   zEchoingStdin.readlines<   s+    '+{{'<'<'>?!

1???s   8c                @     t         fd j                  D              S )Nc              3  @   K   | ]  }j                  |        y wr!   )r)   ).0r$   r   s     r   	<genexpr>z(EchoingStdin.__iter__.<locals>.<genexpr>@   s     7aDJJqM7s   )iterr   r   s   `r   __iter__zEchoingStdin.__iter__?   s    74;;777r   c                ,    t        | j                        S r!   )reprr   r9   s    r   __repr__zEchoingStdin.__repr__B   s    DKK  r   N)r   r   r   r   returnNone)r$   strr>   t.Any)r(   bytesr>   rB   ))r-   intr>   rB   )r>   zlist[bytes])r>   zcabc.Iterator[bytes]r>   r@   )__name__
__module____qualname____annotations__r   r%   r)   r+   r/   r1   r3   r:   r=    r   r   r   r       sA    M
'/03@8!r   r   c              #  >   K   | d  y d| _         d  d| _         y w)NTF)r   )streams    r   _pause_echorM   F   s     ~s   c                  H    e Zd ZU dZded<   ded<   ded<   ddZddZdd	Zy
)
_FDCaptureaV  Redirect a file descriptor to a temporary file for capture.

    Saves the current target of *targetfd* via :func:`os.dup`, then
    redirects it to a temporary file via :func:`os.dup2`. On
    :meth:`stop`, restores the original ``fd`` and returns the captured
    bytes. Inspired by Pytest's ``FDCapture``.

    .. versionadded:: 8.4.0
    rD   	_targetfdsaved_fdzt.BinaryIO | None_tmpfilec                .    || _         d| _        d | _        y NrC   )rP   rQ   rR   )r   targetfds     r   r   z_FDCapture.__init___   s    !r   c                    t        j                  | j                        | _        t	        j
                  d      | _        t        j                  | j                  j                         | j                         y )Nr   )	buffering)	osduprP   rQ   tempfileTemporaryFilerR   dup2filenor9   s    r   startz_FDCapture.startd   sG    t~~. ..;
$$&7r   c                x   | j                   J d       t        j                  | j                  | j                         t        j
                  | j                         d| _        | j                   j                  d       | j                   j                         }| j                   j                          d | _         |S )Nz!_FDCapture.start() was not calledrC   r   )rR   rX   r\   rQ   rP   closeseekr+   )r   datas     r   stopz_FDCapture.stopi   s    }}(M*MM(
t~~.
1}}!!#r   N)rU   rD   r>   r?   r>   r?   )r>   rB   )rF   rG   rH   __doc__rI   r   r^   rc   rJ   r   r   rO   rO   P   s(     NM
8
	r   rO   c                  H     e Zd ZU dZded<   d fdZd fdZd	 fdZ xZS )
BytesIOCopyzdPatch ``io.BytesIO`` to let the written stream be copied to another.

    .. versionadded:: 8.2
    
io.BytesIOcopy_toc                0    t         |           || _        y r!   )superr   ri   )r   ri   	__class__s     r   r   zBytesIOCopy.__init__}   s    r   c                V    t         |           | j                  j                          y r!   )rk   flushri   r   rl   s    r   rn   zBytesIOCopy.flush   s    r   c                X    | j                   j                  |       t        |   |      S r!   )ri   r'   rk   )r   brl   s     r   r'   zBytesIOCopy.write   s$    1w}Qr   )ri   rh   r>   r?   rd   )rq   r   r>   rD   )	rF   rG   rH   re   rI   r   rn   r'   __classcell__rl   s   @r   rg   rg   u   s$    
    r   rg   c                  8    e Zd ZU dZded<   ded<   ded<   d	dZy)
StreamMixerzMixes `<stdout>` and `<stderr>` streams.

    The result is available in the ``output`` attribute.

    .. versionadded:: 8.2
    rh   r   rg   stdoutstderrc                    t        j                         | _        t        | j                        | _        t        | j                        | _        y )N)ri   )ioBytesIOr   rg   rv   rw   r9   s    r   r   zStreamMixer.__init__   s/    jjl!$++6!$++6r   Nrd   )rF   rG   rH   re   rI   r   rJ   r   r   ru   ru      s      7r   ru   c                       e Zd ZU dZded<   ded<   ded<   	 	 	 	 	 	 	 	 	 	 d fdZddZd fd	Zedd
       Z	edd       Z
 xZS )_NamedTextIOWrappera  A :class:`~io.TextIOWrapper` with custom ``name`` and ``mode``
    that does not close its underlying buffer.

    When ``CliRunner`` runs in ``fd`` mode, ``_original_fd`` is patched to
    point at the saved (pre-redirection) ``fd``, so C-level consumers that call
    :meth:`fileno` (like ``faulthandler`` or ``subprocess``) keep working. In
    the default ``sys`` mode ``_original_fd`` stays at ``-1`` and
    :meth:`fileno` raises :exc:`io.UnsupportedOperation`, matching the
    pre-``8.3.3`` behavior.
    r@   _name_moderD   _original_fdc                P    t        |   |fi | || _        || _        d| _        y rT   )rk   r   r}   r~   r   )r   buffernamemodekwargsrl   s        r   r   z_NamedTextIOWrapper.__init__   s-     	*6*

r   c                     y)zThe buffer this object contains belongs to some other object,
        so prevent the default ``__del__`` implementation from closing
        that buffer.

        .. versionadded:: 8.3.2
        NrJ   r9   s    r   r`   z_NamedTextIOWrapper.close   s    r   c                V    | j                   dk\  r| j                   S t        | 	         S )zReturn the file descriptor of the saved original stream when
        ``CliRunner`` runs in ``fd`` mode. Otherwise delegate to
        :class:`~io.TextIOWrapper`, which raises
        :exc:`io.UnsupportedOperation` for a ``BytesIO``-backed buffer.
        r   )r   rk   r]   ro   s    r   r]   z_NamedTextIOWrapper.fileno   s,     !$$$w~r   c                    | j                   S r!   )r}   r9   s    r   r   z_NamedTextIOWrapper.name       zzr   c                    | j                   S r!   )r~   r9   s    r   r   z_NamedTextIOWrapper.mode   r   r   )
r   r   r   r@   r   r@   r   rA   r>   r?   rd   )r>   rD   rE   )rF   rG   rH   re   rI   r   r`   r]   propertyr   r   rr   rs   s   @r   r|   r|      s    	 JJ

 
 	

 
 

     r   r|   c                    t        | d      r.t        t        j                  d|             }||S t	        d      | d} n!t        | t              r| j                  |      } t        j                  |       S )Nr+   zt.IO[t.Any]z.Could not find binary reader for input stream.r   )
hasattrr
   tcast	TypeError
isinstancer@   encodery   rz   )r   charsetr(   s      r   make_input_streamr      sj     uf u!=>>IHII}	E3	W%::er   c                      e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       Zedd       Zedd       Z	ddZ
y)ResultaC  Holds the captured result of an invoked CLI script.

    :param runner: The runner that created the result
    :param stdout_bytes: The standard output as bytes.
    :param stderr_bytes: The standard error as bytes.
    :param output_bytes: A mix of ``stdout_bytes`` and ``stderr_bytes``, as the
        user would see  it in its terminal.
    :param return_value: The value returned from the invoked command.
    :param exit_code: The exit code as integer.
    :param exception: The exception that happened if one did.
    :param exc_info: Exception information (exception type, exception instance,
        traceback type).

    .. versionchanged:: 8.2
        ``stderr_bytes`` no longer optional, ``output_bytes`` introduced and
        ``mix_stderr`` has been removed.

    .. versionadded:: 8.0
        Added ``return_value``.
    	CliRunnerrunnerrB   stdout_bytesstderr_bytesoutput_bytesrA   return_valuerD   	exit_codeBaseException | None	exceptionExceptionInfo | Noneexc_infoNc	                t    || _         || _        || _        || _        || _        || _        || _        || _        y r!   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   s	            r   r   zResult.__init__  s@     (((("" r   c                    | j                   j                  | j                  j                  d      j	                  dd      S )a  The terminal output as unicode string, as the user would see it.

        .. versionchanged:: 8.2
            No longer a proxy for ``self.stdout``. Now has its own independent stream
            that is mixing `<stdout>` and `<stderr>`, in the order they were written.
        replace

)r   decoder   r   r   r9   s    r   r   zResult.output  s9       ''(;(;YGOOD
 	
r   c                    | j                   j                  | j                  j                  d      j	                  dd      S )z&The standard output as unicode string.r   r   r   )r   r   r   r   r   r9   s    r   rv   zResult.stdout&  s9       ''(;(;YGOOD
 	
r   c                    | j                   j                  | j                  j                  d      j	                  dd      S )zThe standard error as unicode string.

        .. versionchanged:: 8.2
            No longer raise an exception, always returns the `<stderr>` string.
        r   r   r   )r   r   r   r   r   r9   s    r   rw   zResult.stderr-  s9       ''(;(;YGOOD
 	
r   c                    | j                   rt        | j                         nd}dt        |       j                   d| dS )Nokay< >)r   r<   typerF   )r   exc_strs     r   r=   zResult.__repr__8  s8    *...$t~~&f4:&&'q	33r   r!   )r   r   r   rB   r   rB   r   rB   r   rA   r   rD   r   r   r   r   r>   r?   rE   )rF   rG   rH   re   rI   r   r   r   rv   rw   r=   rJ   r   r   r   r      s    * N##"" *.!! ! 	!
 ! ! ! (! '! 
!( 	
 	
 
 
 
 
4r   r   c                  &   e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 d	 	 	 ddZej                  	 	 	 d	 	 	 	 	 	 	 dd       Z
	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZej                  	 d	 	 	 dd       Zy)r   a  The CLI runner provides functionality to invoke a Click command line
    script for unittesting purposes in a isolated environment.  This only
    works in single-threaded systems without any concurrency as it changes the
    global interpreter state.

    :param charset: the character set for the input and output data.
    :param env: a dictionary with environment variables for overriding.
    :param echo_stdin: if this is set to `True`, then reading from `<stdin>` writes
                       to `<stdout>`.  This is useful for showing examples in
                       some circumstances.  Note that regular prompts
                       will automatically echo the input.
    :param catch_exceptions: Whether to catch any exceptions other than
                             ``SystemExit`` when running :meth:`~CliRunner.invoke`.
    :param capture: Selects the output capture strategy. ``sys`` (default)
        captures Python-level writes only and leaves
        :meth:`sys.stdout.fileno` raising :exc:`io.UnsupportedOperation`, so
        user code that calls :func:`os.dup2` on ``sys.stdout.fileno()`` cannot
        clobber the host runner's stdout. ``fd`` redirects file descriptors
        ``1`` and ``2`` via :func:`os.dup2` to a temporary file, also catching
        output from stale stream references, C extensions, and subprocesses.
        ``fd`` is not supported on Windows.

    .. versionchanged:: 8.4.0
        Added the ``capture`` parameter. The default ``sys`` mode no longer
        exposes the original fd through :meth:`fileno`, reverting the change
        introduced in ``8.3.3`` that broke Pytest's ``fd``-level capture
        teardown. Use ``capture="fd"`` to restore that behavior with proper
        isolation. :issue:`3384`

    .. versionchanged:: 8.2
        Added the ``catch_exceptions`` parameter.

    .. versionchanged:: 8.2
        ``mix_stderr`` parameter has been removed.
    r@   r   cabc.Mapping[str, str | None]envr   
echo_stdincatch_exceptionsr   captureNc                    |dvrt        d|d      |dk(  r"t        j                  dk(  rt        d|d      || _        |xs i | _        || _        || _        || _        y )N>   r   r   zcapture=z) is not valid. Choose from 'sys' or 'fd'.r   r   z( is not supported on Windows. Use 'sys'.)
ValueErrorr   platformr   r   r   r   r   )r   r   r   r   r   r   s         r   r   zCliRunner.__init__h  s~     -'7+%NO  d?s||w67+%MN  9"$ 0r   c                "    |j                   xs dS )zGiven a command object it will return the default program name
        for it.  The default is the `name` attribute or ``"root"`` if not
        set.
        root)r   )r   clis     r   get_default_prog_namezCliRunner.get_default_prog_name~  s    
 xx!6!r   c                V    t        | j                        }|r|j                  |       |S )z8Returns the environment overrides for invoking a script.)dictr   update)r   	overridesr(   s      r   make_envzCliRunner.make_env  s%     $((^IIi 	r   c              #  @	  K   t        || j                        }d}t        j                  }t        j                  }t        j
                  }t        j                  }	dt        _        | j                  |      }t               }
| j                  r:t        j                  t        j                  t        ||
j                              x}}t        || j                  dd      xt        _        | j                  rd_        t        |
j                  | j                  dd      t        _        t        |
j
                  | j                  d	dd
      t        _        t#        |      ddfd       }t#        |      ddfd       }t#        |      dd       }|	 d	 	 	 	 	 dfd}t$        j&                  }t$        j(                  }t$        j*                  }t,        j.                  }t0        j.                  }t2        j4                  j6                  |t$        _        |t$        _        |t$        _        |t,        _        |t0        _        	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dfd}|t2        j4                  _        i }	 |j9                         D ]O  \  }}t:        j<                  j?                  |      ||<   |	 t:        j<                  |= =|t:        j<                  |<   Q |
j                  |
j
                  |
jB                  f |j9                         D ]-  \  }}|	 t:        j<                  |= |t:        j<                  |<   / |t        _        |t        _        |t        _        |t$        _        |t$        _        |t$        _        |t,        _        |t0        _        |	t        _        t2        j4                  _        y# t@        $ r Y <w xY w# t@        $ r Y w xY w# |j9                         D ]<  \  }}|"	 t:        j<                  |= # t@        $ r Y &w xY w|t:        j<                  |<   > |t        _        |t        _        |t        _        |t$        _        |t$        _        |t$        _        |t,        _        |t0        _        |	t        _        t2        j4                  _        w xY ww)a\  A context manager that sets up the isolation for invoking of a
        command line tool.  This sets up `<stdin>` with the given input data
        and `os.environ` with the overrides from the given dictionary.
        This also rebinds some internals in Click to be mocked (like the
        prompt functionality).

        This is automatically done in the :meth:`invoke` method.

        :param input: the input stream to put into `sys.stdin`.
        :param env: the environment overrides as dictionary.
        :param color: whether the output should contain color codes. The
                      application can still override this explicitly.

        .. versionadded:: 8.2
            An additional output stream is returned, which is a mix of
            `<stdout>` and `<stderr>` streams.

        .. versionchanged:: 8.2
            Always returns the `<stderr>` stream.

        .. versionchanged:: 8.0
            `<stderr>` is opened with ``errors="backslashreplace"``
            instead of the default ``"strict"``.

        .. versionchanged:: 4.0
            Added the ``color`` parameter.
        NP   z<stdin>r)encodingr   r   r   z<stdout>wz<stderr>backslashreplace)r   r   r   errorsc                <   t         j                  j                  | xs d       	 t              j	                  d      }t         j                  j                  | d       t         j                  j                          |S # t
        $ r}t               |d }~ww xY w)N r   r   )r   rv   r'   nextrstripStopIterationEOFErrorrn   )promptvale
text_inputs      r   visible_inputz*CliRunner.isolation.<locals>.visible_input  s~    JJV\r*(:&--f5 JJuBZ(JJJ	 ! (ja'(s   B 	BBBc                    t         j                  j                  | xs d d       t         j                  j                          	 t	              j                  d      S # t        $ r}t               |d }~ww xY w)Nr   r   r   )r   rv   r'   rn   r   r   r   r   )r   r   r   s     r   hidden_inputz)CliRunner.isolation.<locals>.hidden_input  se    JJ"~R01JJ(J'..v66  (ja'(s   A! !	A:*A55A:c                    t         j                  j                  d      }| rt         j                  j	                  |       t         j                  j                          |S )Nr   )r   stdinr+   rv   r'   rn   )echochars     r   _getcharz%CliRunner.isolation.<locals>._getchar  s>    99>>!$D

  &JJKr   c                    | S | S r!   rJ   )rL   colordefault_colors     r   should_strip_ansiz.CliRunner.isolation.<locals>.should_strip_ansi  s     }(((9r   c                h    |t         j                  }|t         j                  } | f|||d| y)ab  Default ``pdb.Pdb`` to real terminal streams during
            ``CliRunner`` isolation.

            Without this patch, ``pdb.Pdb.__init__`` inherits from
            ``cmd.Cmd`` which falls back to ``sys.stdin``/``sys.stdout``
            when no explicit streams are provided. During isolation
            those are ``BytesIO``-backed wrappers, so the debugger
            reads from an empty buffer and writes to captured output,
            making interactive debugging impossible.

            By defaulting to ``sys.__stdin__``/``sys.__stdout__`` (the
            original terminal streams Python preserves regardless of
            redirection), debuggers can interact with the user while
            ``click.echo`` output is still captured normally.

            This covers ``pdb.set_trace()``, ``breakpoint()``,
            ``pdb.post_mortem()``, and debuggers that subclass
            ``pdb.Pdb`` (ipdb, pdbpp). Explicit ``stdin``/``stdout``
            arguments are honored and not overridden. Debuggers that
            do not subclass ``pdb.Pdb`` (pudb, debugpy) are not
            covered.
            N)completekeyr   rv   )r   	__stdin__
__stdout__)r   r   r   rv   r   old_pdb_inits        r   _patched_pdb_initz.CliRunner.isolation.<locals>._patched_pdb_init  s@    : }~"-U6MSr   r!   )r   z
str | Noner>   r@   )r   r   r>   r@   )NN)rL   zt.IO[t.Any] | Noner   bool | Noner>   r   )tabNN)r   zpdb.Pdbr   r@   r   t.IO[str] | Nonerv   r   r   rA   r>   r?   )"r   r   r   r   rv   rw   r   FORCED_WIDTHr   ru   r   r   r   BinaryIOr   r|   _CHUNK_SIZErM   r   visible_prompt_funchidden_prompt_funcr   r	   r   r   pdbPdbr   itemsrX   environget	Exceptionr   )r   r   r   r   bytes_input
echo_input	old_stdin
old_stdout
old_stderrold_forced_widthstream_mixerr   r   r   r   old_visible_prompt_funcold_hidden_prompt_funcold__getchar_funcold_should_strip_ansiold__compat_should_strip_ansir   old_envkeyvaluer   r   r   s                           @@@r   	isolationzCliRunner.isolation  s)    D (t||<
II	ZZ
ZZ
%22"$
mmC "}??'(vv

Ll6I6IJ( K* "5$,,YS"
 	
	J ?? &'J"(\\	

 )\\%

 
Z	 	 
!	 
Z	 	( 
!	( 
Z	 	 
!	  EI	&	6A		 #)"<"<!'!:!:"OO % 7 7(/(A(A%ww''%2"$0!""3$5!  %&*'+	#	#	#	 $#	 %	#	
 #	 #	J -	,!iik ,
U!zz~~c2=JJsO ',BJJsO,  &&(;(;\=P=PQQ%mmo ,
U=JJsO ',BJJsO, $CJ#CJ!CI)@F&(>F%/FO&;E#(EG%&6J#+CGG/ %  % 	 &mmo ,
U=JJsO$  ',BJJsO, $CJ#CJ!CI)@F&(>F%/FO&;E#(EG%&6J#+CGGs   I-R3:O .N3?;O :RO$BR3	O <O ?O  O 	ORORR,O>=R>	P
	R	P
	
BRRc           
        d}|| j                   }d}	d}
| j                  dk(  r7t        d      }	t        d      }
	 |	j                          |
j                          | j                  |||      5 }|	@|
>|	j                  t        j                  _	        |
j                  t        j                  _	        d}d}d}t        |t              rt        j                  |      }	 |j                  d      }	  |j$                  d|xs d|d	|}t        j                  j7                          t        j                  j7                          |	N|
L|	j9                         }|
j9                         }|r|d   j3                  |       |r|d   j3                  |       |d   j;                         }|d   j;                         }|d   j;                         }	 ddd       t=        | |      S # t        $ r dx}	}
Y w xY w# t         $ r | j#                  |      }Y ,w xY w# t&        $ r}t        j(                         }t+        j,                  d
|j.                        }|d}|dk7  r|}t        |t0              sIt        j                  j3                  t        |             t        j                  j3                  d       d}|}Y d}~d}~wt4        $ r&}|s |}d}t        j(                         }Y d}~d}~ww xY w# t        j                  j7                          t        j                  j7                          |	N|
L|	j9                         }|
j9                         }|r|d   j3                  |       |r|d   j3                  |       |d   j;                         }|d   j;                         }|d   j;                         }w xY w# 1 sw Y   xY w)a{  Invokes a command in an isolated environment.  The arguments are
        forwarded directly to the command line script, the `extra` keyword
        arguments are passed to the :meth:`~clickpkg.Command.main` function of
        the command.

        This returns a :class:`Result` object.

        :param cli: the command to invoke
        :param args: the arguments to invoke. It may be given as an iterable
                     or a string. When given as string it will be interpreted
                     as a Unix shell command. More details at
                     :func:`shlex.split`.
        :param input: the input data for `sys.stdin`.
        :param env: the environment overrides.
        :param catch_exceptions: Whether to catch any other exceptions than
                                 ``SystemExit``. If :data:`None`, the value
                                 from :class:`CliRunner` is used.
        :param extra: the keyword arguments to pass to :meth:`main`.
        :param color: whether the output should contain color codes. The
                      application can still override this explicitly.

        .. versionadded:: 8.2
            The result object has the ``output_bytes`` attribute with
            the mix of ``stdout_bytes`` and ``stderr_bytes``, as the user would
            see it in its terminal.

        .. versionchanged:: 8.2
            The result object always returns the ``stderr_bytes`` stream.

        .. versionchanged:: 8.0
            The result object has the ``return_value`` attribute with
            the value returned from the invoked command.

        .. versionchanged:: 4.0
            Added the ``color`` parameter.

        .. versionchanged:: 3.0
            Added the ``catch_exceptions`` parameter.

        .. versionchanged:: 3.0
            The result object has the ``exc_info`` attribute with the
            traceback if available.
        Nr   r      )r   r   r   r   	prog_namerJ   )argsr  zint | t.Any | Noner   r   )r   r   rO   r^   OSErrorr  rQ   r   rv   r   rw   r   r@   shlexsplitpopKeyErrorr   main
SystemExitr   r   r   coderD   r'   r   rn   rc   getvaluer   )r   r   r  r   r   r   r   extrar   cap_outcap_err
outstreamsr   r   r   r  r   e_codefd_outfd_errrv   rw   r   s                          r   invokezCliRunner.invokeT  so   j ##44 &*%)<<4 mG mG) ^^%S^> >	2* "w':*1*:*:

'*1*:*:

'L.2II$${{4(<!IIk2	*2'sxxVTZR9VPUV2 

  "

  "
 &7+>$\\^F$\\^F"1++F3"1++F3#A//1#A//1#A//1}>	2@ %	
 		
G  )$((')(  < 66s;	<
  #<<> 4aff=>FQ; !I!&#.JJ$$S[1JJ$$T*F"	 *'		<<>* 

  "

  "
 &7+>$\\^F$\\^F"1++F3"1++F3#A//1#A//1#A//1}>	2 >	2s    G* /A.OG>0H	CO*G;:G;>HOHO	K:(BKK=K:K5/K=5K::K==COOOc              #    K   t        j                         }t        j                  |      }t        j                  |       	 | t        j                  |       |ddl}	 |j                  |       yy# t        $ r Y yw xY w# t        j                  |       |&ddl}	 |j                  |       w # t        $ r Y w w xY ww xY ww)a  A context manager that creates a temporary directory and
        changes the current working directory to it. This isolates tests
        that affect the contents of the CWD to prevent them from
        interfering with each other.

        :param temp_dir: Create the temporary directory under this
            directory. If given, the created directory is not removed
            when exiting.

        .. versionchanged:: 8.0
            Added the ``temp_dir`` parameter.
        )dirNr   )rX   getcwdrZ   mkdtempchdirshutilrmtreer  )r   temp_dircwddtr  s        r   isolated_filesystemzCliRunner.isolated_filesystem  s       iik(+
	HHHSMMM"%	  
   HHSMMM"%   sf   A CB C#A6 4C6	B?CBCC"B43C4	C =C?C  CC)zutf-8NFTr   )r   r@   r   $cabc.Mapping[str, str | None] | Noner   r   r   r   r   r   r>   r?   )r   r   r>   r@   r!   )r   r$  r>   r   )NNF)r    str | bytes | t.IO[t.Any] | Noner   r$  r   r   r>   z9cabc.Generator[tuple[io.BytesIO, io.BytesIO, io.BytesIO]])NNNNF)r   r   r  zstr | cabc.Sequence[str] | Noner   r%  r   r$  r   r   r   r   r  rA   r>   r   )r   zstr | os.PathLike[str] | Noner>   zcabc.Generator[str])rF   rG   rH   re   rI   r   r   r   
contextlibcontextmanagerr  r  r#  rJ   r   r   r   r   =  s   "H L	&& 48 !%$ 2 	
   
," AE=	&  3748	C,/C, 2C, 	C,
 
CC, C,P 152648(,O
O
 .O
 0	O

 2O
 &O
 O
 O
 
O
b 8<5	 r   r   )rL   zEchoingStdin | Noner>   zcabc.Generator[None])r   r%  r   r@   r>   r   )/
__future__r   collections.abcabccabcr&  ry   rX   r   r	  r   rZ   typingr   typesr   r   r   r   r   r	   r
   TYPE_CHECKING	_typeshedr   corer   r   Literalr   rI   tupler   BaseExceptionr   r   r'  rM   rO   rz   rg   ru   TextIOWrapperr|   r   r   r   rJ   r   r   <module>r5     s"   "   	 	 
  
        (??(<<7 yy/K/ yy5K5"4#6}#TU{ U#! #!L  " "J "**  *7 7$4"** 4n+69(S4 S4lG Gr   