
     jud                       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j        d         Z G d d          Zej        d&d            Z G d d          Z  G d dej!                  Z" G d d          Z# G d dej$                  Z%d'd!Z& G d" d#          Z' G d$ d%          Z(dS )(    )annotationsN)TracebackType   )_compat)
formatting)termui)utils)_find_binary_reader)ReadableBuffer)Command)sysfdc                  \    e Zd Z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dS )"EchoingStdininput
t.BinaryIOoutputreturnNonec                0    || _         || _        d| _        d S )NF)_input_output_paused)selfr   r   s      Q/home/jworkman/hermes-web-chat/venv/lib/python3.11/site-packages/click/testing.py__init__zEchoingStdin.__init__   s        xstrt.Anyc                ,    t          | j        |          S N)getattrr   )r   r   s     r   __getattr__zEchoingStdin.__getattr__"   s    t{A&&&r   rvbytesc                H    | j         s| j                            |           |S r"   )r   r   write)r   r%   s     r   _echozEchoingStdin._echo%   s'    | 	#Lr"""	r   nintc                \    |                      | j                            |                    S r"   )r)   r   readr   r+   s     r   r.   zEchoingStdin.read+   s$    zz$+**1--...r   c                \    |                      | j                            |                    S r"   )r)   r   read1r/   s     r   r1   zEchoingStdin.read1.   s$    zz$+++A..///r   c                \    |                      | j                            |                    S r"   )r)   r   readliner/   s     r   r3   zEchoingStdin.readline1   s$    zz$+..q11222r   list[bytes]c                N      fd j                                         D             S )Nc                :    g | ]}                     |          S  r)   .0r   r   s     r   
<listcomp>z*EchoingStdin.readlines.<locals>.<listcomp>5   s#    ???!

1???r   )r   	readlinesr   s   `r   r<   zEchoingStdin.readlines4   s+    ????t{'<'<'>'>????r   cabc.Iterator[bytes]c                D     t           fd j        D                       S )Nc              3  B   K   | ]}                     |          V  d S r"   r8   r9   s     r   	<genexpr>z(EchoingStdin.__iter__.<locals>.<genexpr>8   s-      77aDJJqMM777777r   )iterr   r=   s   `r   __iter__zEchoingStdin.__iter__7   s(    77774;777777r   c                *    t          | j                  S r"   )reprr   r=   s    r   __repr__zEchoingStdin.__repr__:   s    DK   r   N)r   r   r   r   r   r   )r   r   r   r    )r%   r&   r   r&   )r*   )r+   r,   r   r&   )r   r4   )r   r>   r   r   )__name__
__module____qualname__r   r$   r)   r.   r1   r3   r<   rC   rF   r7   r   r   r   r      s           
' ' ' '   / / / / /0 0 0 0 03 3 3 3 3@ @ @ @8 8 8 8! ! ! ! ! !r   r   streamEchoingStdin | Noner   cabc.Iterator[None]c              #  >   K   | d V  d S d| _         d V  d| _         d S )NTF)r   )rK   s    r   _pause_echorO   >   s3      ~r   c                  *    e Zd ZdZddZddZdd	Zd
S )
_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
    targetfdr,   r   r   c                0    || _         d| _        d | _        d S Nr*   )	_targetfdsaved_fd_tmpfile)r   rR   s     r   r   z_FDCapture.__init__S   s    !+/r   c                    t          j        | j                  | _        t	          j        d          | _        t          j        | j                                        | j                   d S )Nr   )	buffering)	osduprU   rV   tempfileTemporaryFilerW   dup2filenor=   s    r   startz_FDCapture.startX   sR    t~.. .;;;
$$&&77777r   r&   c                L   | j         
J d            t          j        | j        | j                   t          j        | j                   d| _        | j                             d           | j                                         }| j                                          d | _         |S )Nz!_FDCapture.start() was not calledr*   r   )rW   rZ   r^   rV   rU   closeseekr.   )r   datas     r   stopz_FDCapture.stop]   s    }((*M(((
t~...
1}!!##r   N)rR   r,   r   r   r   r   )r   r&   )rH   rI   rJ   __doc__r   r`   re   r7   r   r   rQ   rQ   H   sZ         0 0 0 0
8 8 8 8
	 	 	 	 	 	r   rQ   c                  <     e Zd ZdZ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
    copy_to
io.BytesIOr   r   c                V    t                                                       || _        d S r"   )superr   rj   )r   rj   	__class__s     r   r   zBytesIOCopy.__init__o   s$    r   c                z    t                                                       | j                                         d S r"   )rm   flushrj   r   rn   s    r   rp   zBytesIOCopy.flushs   s.    r   br   r,   c                z    | j                             |           t                                          |          S r"   )rj   r(   rm   )r   rr   rn   s     r   r(   zBytesIOCopy.writew   s/    1ww}}Qr   )rj   rk   r   r   rf   )rr   r   r   r,   )rH   rI   rJ   rg   r   rp   r(   __classcell__rn   s   @r   ri   ri   i   s         
                             r   ri   c                      e Zd ZdZddZdS )StreamMixerzMixes `<stdout>` and `<stderr>` streams.

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

    .. versionadded:: 8.2
    r   r   c                    t          j                    | _        t          | j                  | _        t          | j                  | _        d S )N)rj   )ioBytesIOr   ri   stdoutstderrr=   s    r   r   zStreamMixer.__init__   s;    "$*,,"-dk"B"B"B"-dk"B"B"Br   Nrf   )rH   rI   rJ   rg   r   r7   r   r   rw   rw   |   s8         C C C C C Cr   rw   c                  h     e Zd ZdZ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.
    bufferr   namer   modekwargsr    r   r   c                f     t                      j        |fi | || _        || _        d| _        d S rT   )rm   r   _name_mode_original_fd)r   r   r   r   r   rn   s        r   r   z_NamedTextIOWrapper.__init__   s@     	**6***

!#r   c                    dS )zThe buffer this object contains belongs to some other object,
        so prevent the default ``__del__`` implementation from closing
        that buffer.

        .. versionadded:: 8.3.2
        Nr7   r=   s    r   rb   z_NamedTextIOWrapper.close   s      r   r,   c                h    | 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   rm   r_   rq   s    r   r_   z_NamedTextIOWrapper.fileno   s0     !!$$ww~~r   c                    | j         S r"   )r   r=   s    r   r   z_NamedTextIOWrapper.name   
    zr   c                    | j         S r"   )r   r=   s    r   r   z_NamedTextIOWrapper.mode   r   r   )
r   r   r   r   r   r   r   r    r   r   rf   )r   r,   rG   )rH   rI   rJ   rg   r   rb   r_   propertyr   r   rt   ru   s   @r   r~   r~      s        	 	
$ 
$ 
$ 
$ 
$ 
$                  X    X    r   r~   r    str | bytes | t.IO[t.Any] | Nonecharsetr   r   c                   t          | d          r5t          t          j        d|                     }||S t	          d          | d} n*t          | t                    r|                     |          } 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   r   r%   s      r   make_input_streamr      s     uf J u!=!=>>>IHIII}	E3		 &W%%:er   c                  n    e Zd ZdZ	 dddZedd            Zedd            Zedd            ZddZ	dS )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``.
    Nrunner	CliRunnerstdout_bytesr&   stderr_bytesoutput_bytesreturn_valuer    	exit_coder,   	exceptionBaseException | Noneexc_info?tuple[type[BaseException], BaseException, TracebackType] | Nonec	                v    || _         || _        || _        || _        || _        || _        || _        || _        d S r"   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   s	            r   r   zResult.__init__   sD     (((("" r   r   r   c                t    | j                             | j        j        d                              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   r=   s    r   r   zResult.output   s9      ''(;YGGOOD
 
 	
r   c                t    | j                             | j        j        d                              dd          S )z&The standard output as unicode string.r   r   r   )r   r   r   r   r   r=   s    r   r{   zResult.stdout  s9      ''(;YGGOOD
 
 	
r   c                t    | j                             | j        j        d                              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   r=   s    r   r|   zResult.stderr  s9      ''(;YGGOOD
 
 	
r   c                r    | j         rt          | j                   nd}dt          |           j         d| dS )Nokay< >)r   rE   typerH   )r   exc_strs     r   rF   zResult.__repr__  s?    *..D$t~&&&f34::&333333r   r"   )r   r   r   r&   r   r&   r   r&   r   r    r   r,   r   r   r   r   rG   )
rH   rI   rJ   rg   r   r   r   r{   r|   rF   r7   r   r   r   r      s         > ! ! ! ! !* 	
 	
 	
 X	
 
 
 
 X
 
 
 
 X
4 4 4 4 4 4r   r   c                      e Zd ZdZ	 	 	 	 	 d)d*dZd+dZ	 d,d-dZej        	 	 	 d.d/d            Z		 	 	 	 	 d0d1d$Z
ej        	 d,d2d(            ZdS )3r   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.
    utf-8NFTr   r   r   env$cabc.Mapping[str, str | None] | None
echo_stdinboolcatch_exceptionscaptureCaptureModer   r   c                    |dvrt          d|d          |dk    r#t          j        dk    rt          d|d          || _        |pi | _        || _        || _        || _        d S )N>   r   r   zcapture=z) is not valid. Choose from 'sys' or 'fd'.r   win32z( 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__D  s     -''O7OOO   d??s|w66N7NNN   25)$ 0$+r   clir   c                    |j         p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   r   s     r   get_default_prog_namezCliRunner.get_default_prog_nameZ  s    
 x!6!r   	overridescabc.Mapping[str, str | None]c                \    t          | j                  }|r|                    |           |S )z8Returns the environment overrides for invoking a script.)dictr   update)r   r   r%   s      r   make_envzCliRunner.make_enva  s0     $(^^ 	!IIi   	r   r   r   color8cabc.Iterator[tuple[io.BytesIO, io.BytesIO, io.BytesIO]]c              #    K   t          || j                  }d}t          j        }t          j        }t          j        }t          j        }	dt          _        |                     |          }t                      }
| j
        r4t          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          j        j        |t$          _        |t$          _        |t$          _        |t,          _        |t0          _        	 	 	 d*d+fd$}|t2          j        _        i }	 |                                D ]W\  }}t:          j                            |          ||<   |	 t:          j        |= 8# t@          $ r Y Dw xY w|t:          j        |<   X|
j        |
j        |
j!        fV  |                                D ]5\  }}|	 t:          j        |= # t@          $ r Y "w xY w|t:          j        |<   6|t          _        |t          _        |t          _        |t$          _        |t$          _        |t$          _        |t,          _        |t0          _        |	t          _        t2          j        _        dS # |                                D ]5\  }}|	 t:          j        |= # t@          $ r Y "w xY w|t:          j        |<   6|t          _        |t          _        |t          _        |t$          _        |t$          _        |t$          _        |t,          _        |t0          _        |	t          _        t2          j        _        w xY 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   errorsprompt
str | Noner   r   c                T   t           j                            | pd           	 t                                        d          }n!# t
          $ r}t                      |d }~ww xY wt           j                            | d           t           j                                         |S )N r   r   )r   r{   r(   nextrstripStopIterationEOFErrorrp   )r   vale
text_inputs      r   visible_inputz*CliRunner.isolation.<locals>.visible_input  s    JV\r***(:&&--f55  ( ( (jja'(JZZZ(((JJs   "A 
A%A  A%c                   t           j                            | pd d           t           j                                         	 t	                                        d          S # t          $ r}t                      |d }~ww xY w)Nr   r   r   )r   r{   r(   rp   r   r   r   r   )r   r   r   s     r   hidden_inputz)CliRunner.isolation.<locals>.hidden_input  s    J"000111J(J''..v666  ( ( (jja'(s   !A' '
B1B  Bechor   c                    t           j                            d          }| rt           j                            |           t           j                                         |S )Nr   )r   stdinr.   r{   r(   rp   )r   chars     r   _getcharz%CliRunner.isolation.<locals>._getchar  sL    9>>!$$D '
  &&&JKr   rK   t.IO[t.Any] | Noner   bool | Nonec                    | S | S r"   r7   )rK   r   default_colors     r   should_strip_ansiz.CliRunner.isolation.<locals>.should_strip_ansi  s     }(((9r   tabr   pdb.Pdbcompletekeyr   t.IO[str] | Noner{   r   r    r   c                Z    |t           j        }|t           j        } | f|||d| dS )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)r   r   r{   )r   	__stdin__
__stdout__)r   r   r   r{   r   old_pdb_inits        r   _patched_pdb_initz.CliRunner.isolation.<locals>._patched_pdb_init  sW    : }~L"-U6 MS    r   r"   )r   r   r   r   )r   r   r   r   )NN)rK   r   r   r   r   r   )r   NN)r   r   r   r   r   r   r{   r   r   r    r   r   )"r   r   r   r   r{   r|   r   FORCED_WIDTHr   rw   r   r   r   BinaryIOr   r~   _CHUNK_SIZErO   r   visible_prompt_funchidden_prompt_funcr   r	   r   r   pdbPdbr   itemsrZ   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.isolationj  s     D (t|<<
I	Z
Z
%2"$
mmC  "}}? 	'(v
Ll6IJJ( ( K* "5$,YS"
 "
 "
 	
	J ? 	' &'J"(\	
 
 

 )\%
 
 

 
Z	 	 	 	 	 	 	 	 
!	 	 
Z	 	 	( 	( 	( 	( 	( 	( 
!	 	( 
Z	 	 	 	 	 
!	 	  EI	 	 	 	 	 	 	 #)"<!'!:"O % 7(/(A%w'%2"$0!""3$5!  %&*'+	#	 #	 #	 #	 #	 #	 #	J -	,!iikk , ,
U!z~~c22=JsOO$    ',BJsOO&(;\=PQQQQ%mmoo , ,
U=JsOO$    ',BJsOO#CJ#CJ!CI)@F&(>F%/FO&;E#(EG%&6J#+CG# &mmoo , ,
U=JsOO$    ',BJsOO#CJ#CJ!CI)@F&(>F%/FO&;E#(EG%&6J#+CG++++sg   :=N 8JN 
JN J)N K&&
K32K3Q"N0/Q0
N=	:Q<N=	=BQargsstr | cabc.Sequence[str] | Noner   extrar    r   c           
     h   d}|| j         }d}	d}
| j        dk    r\t          d          }	t          d          }
	 |	                                 |
                                 n# t          $ r dx}	}
Y nw xY w|                     |||          5 }|	.|
,|	j        t          j        _	        |
j        t          j
        _	        d}d}d}t          |t                    rt          j        |          }	 |                    d          }n%# t           $ r |                     |          }Y nw xY w	  |j        d|pd|d	|}n# t&          $ r}t          j                    }t+          j        d
|j                  }|d}|dk    r|}t          |t0                    sMt          j                            t          |                     t          j                            d           d}|}Y d}~n4d}~wt4          $ r$}|s |}d}t          j                    }Y d}~nd}~ww xY wt          j                                         t          j
                                         |	d|
b|	                                }|
                                }|r|d                             |           |r|d                             |           |d                                         }|d                                         }|d                                         }n# t          j                                         t          j
                                         |	d|
b|	                                }|
                                }|r|d                             |           |r|d                             |           |d                                         }|d                                         }|d                                         }w xY w	 ddd           n# 1 swxY w Y   t=          | |||||||          S )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_namer7   )r  r  zint | t.Any | Noner   r   )r   r   rQ   r`   OSErrorr  rV   r   r{   r   r|   r   r   shlexsplitpopKeyErrorr   main
SystemExitr   r   r   coder,   r(   r   rp   re   getvaluer   )r   r   r  r   r   r   r   r  r   cap_outcap_err
outstreamsr   r   r   r  r   e_codefd_outfd_errr{   r|   r   s                          r   invokezCliRunner.invoke0  s   j ##4 &*%)<4 mmG mmG) ) ) )$((''') ^^%S^>> >	2* "w':*1*:
'*1*:
'L.2II$$$ ){4((<!IIk22		 < < < 66s;;			<*2'sxVTZR9VVPUVV # # #<>> 4af==>FQ;; !I!&#.. J$$S[[111J$$T***F"						 * * *' 		<>>* 
  """
  """
 &7+>$\\^^F$\\^^F 4"1++F333 4"1++F333#A//11#A//11#A//11! 
  """
  """
 &7+>$\\^^F$\\^^F 4"1++F333 4"1++F333#A//11#A//11#A//111111}>	2 >	2 >	2 >	2 >	2 >	2 >	2 >	2 >	2 >	2 >	2 >	2 >	2 >	2 >	2@ %	
 	
 	
 		
s   (A# #A43A4A P0DPD(%P'D((P,D?>L?
H	BG+&L+H8HLHLC1PC2PPPPtemp_dirstr | os.PathLike[str] | Nonecabc.Iterator[str]c              #    K   t          j                    }t          j        |          }t          j        |           	 |V  t          j        |           |-ddl}	 |                    |           dS # t          $ r Y dS w xY wdS # t          j        |           |+ddl}	 |                    |           w # t          $ r Y w w xY ww xY 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   )rZ   getcwdr\   mkdtempchdirshutilrmtreer  )r   r&  cwddtr.  s        r   isolated_filesystemzCliRunner.isolated_filesystem  s       ikk(+++
	HHHHSMMMMM"%%%%%   DD   HSMMMMM"%%%%   D  sB    B	 A6 6
BB	C%B;:C;
CCCC)r   NFTr   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r"   )r   r   r   r   )NNF)r   r   r   r   r   r   r   r   )NNNNF)r   r   r  r  r   r   r   r   r   r   r   r   r  r    r   r   )r&  r'  r   r(  )rH   rI   rJ   rg   r   r   r   
contextlibcontextmanagerr  r%  r2  r7   r   r   r   r     s       " "L 48 !%$, , , , ,," " " " AE      3748	C, C, C, C, C,P 152648(,O
 O
 O
 O
 O
b 8<      r   r   )rK   rL   r   rM   )r   r   r   r   r   r   ))
__future__r   collections.abcabccabcr3  ry   rZ   r   r  r   r\   typingr   typesr   r   r   r   r   r	   r
   TYPE_CHECKING	_typeshedr   corer   Literalr   r   r4  rO   rQ   rz   ri   rw   TextIOWrapperr~   r   r   r   r7   r   r   <module>r@     s   " " " " " "           				 				 



  



                                    ( ( ( ( ( (? ((((((i$! ! ! ! ! ! ! !D           B         "*      &C C C C C C C C0 0 0 0 0"* 0 0 0f   (K4 K4 K4 K4 K4 K4 K4 K4\A A A A A A A A A Ar   