
    #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j6                  d   Z G d d      Zej<                  dd       Z G d d      Z  G d dejB                        Z" G d d      Z# G d dejH                        Z%	 	 	 	 	 	 ddZ& G d d      Z' G d d      Z(y)    )annotationsN)TracebackType   )_compat)
formatting)termui)utils)_find_binary_reader)ReadableBuffer)Command)sysfdc                  Z    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y
)EchoingStdinc                .    || _         || _        d| _        y )NF)_input_output_paused)selfinputoutputs      c/home/mi/.openclaw/workspace/fridge-app/backend/.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.read+   s     zz$++**1-..r   c                V    | j                  | j                  j                  |            S r   )r$   r   read1r'   s     r   r*   zEchoingStdin.read1.   s     zz$++++A.//r   c                V    | j                  | j                  j                  |            S r   )r$   r   readliner'   s     r   r,   zEchoingStdin.readline1   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   r.   zEchoingStdin.readlines4   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>8   s     7aDJJqM7s   )iterr   r   s   `r   __iter__zEchoingStdin.__iter__7   s    74;;777r   c                ,    t        | j                        S r   )reprr   r4   s    r   __repr__zEchoingStdin.__repr__:   s    DKK  r   N)r   
t.BinaryIOr   r9   returnNone)r   strr:   t.Any)r#   bytesr:   r>   ))r(   intr:   r>   )r:   zlist[bytes])r:   zcabc.Iterator[bytes]r:   r<   )__name__
__module____qualname__r   r    r$   r&   r*   r,   r.   r5   r8    r   r   r   r      s0    
'/03@8!r   r   c              #  >   K   | d  y d| _         d  d| _         y w)NTF)r   )streams    r   _pause_echorH   >   s     ~s   c                  (    e Zd ZdZ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
    c                .    || _         d| _        d | _        y Nr?   )	_targetfdsaved_fd_tmpfile)r   targetfds     r   r   z_FDCapture.__init__S   s    !+/r   c                    t        j                  | j                        | _        t	        j
                  d      | _        t        j                  | j                  j                         | j                         y )Nr   )	buffering)	osduprM   rN   tempfileTemporaryFilerO   dup2filenor4   s    r   startz_FDCapture.startX   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 calledr?   r   )rO   rS   rW   rN   rM   closeseekr&   )r   datas     r   stopz_FDCapture.stop]   s    }}(M*MM(
t~~.
1}}!!#r   N)rP   r@   r:   r;   r:   r;   )r:   r>   )rB   rC   rD   __doc__r   rY   r^   rE   r   r   rJ   rJ   H   s    0
8
	r   rJ   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
    c                0    t         |           || _        y r   )superr   copy_to)r   re   	__class__s     r   r   zBytesIOCopy.__init__o   s    r   c                V    t         |           | j                  j                          y r   )rd   flushre   r   rf   s    r   rh   zBytesIOCopy.flushs   s    r   c                X    | j                   j                  |       t        |   |      S r   )re   r"   rd   )r   brf   s     r   r"   zBytesIOCopy.writew   s$    1w}Qr   )re   z
io.BytesIOr:   r;   r_   )rk   r   r:   r@   )rB   rC   rD   r`   r   rh   r"   __classcell__rf   s   @r   rb   rb   i   s    
   r   rb   c                      e Zd ZdZddZy)StreamMixerzMixes `<stdout>` and `<stderr>` streams.

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

    .. versionadded:: 8.2
    c                    t        j                         | _        t        | j                        | _        t        | j                        | _        y )N)re   )ioBytesIOr   rb   stdoutstderrr4   s    r   r   zStreamMixer.__init__   s/    "$**,"-dkk"B"-dkk"Br   Nr_   )rB   rC   rD   r`   r   rE   r   r   ro   ro   |   s    Cr   ro   c                  p     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.
    c                P    t        |   |fi | || _        || _        d| _        y rL   )rd   r   _name_mode_original_fd)r   buffernamemodekwargsrf   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
        NrE   r4   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   )rz   rd   rX   ri   s    r   rX   z_NamedTextIOWrapper.fileno   s,     !$$$w~r   c                    | j                   S r   )rx   r4   s    r   r|   z_NamedTextIOWrapper.name       zzr   c                    | j                   S r   )ry   r4   s    r   r}   z_NamedTextIOWrapper.mode   r   r   )
r{   r9   r|   r<   r}   r<   r~   r=   r:   r;   r_   )r:   r@   rA   )rB   rC   rD   r`   r   r[   rX   propertyr|   r}   rl   rm   s   @r   rv   rv      so    	
$
$ 
$ 	
$
 
$ 

$     r   rv   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<   encoderq   rr   )r   charsetr#   s      r   make_input_streamr      sj     uf u!=>>IHII}	E3	W%::er   c                  x    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	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``.
    Nc	                t    || _         || _        || _        || _        || _        || _        || _        || _        y r   runnerstdout_bytesstderr_bytesoutput_bytesreturn_value	exit_code	exceptionexc_info)	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   r4   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   r4   s    r   rs   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   r4   s    r   rt   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   r7   typerB   )r   exc_strs     r   r8   zResult.__repr__  s8    *...$t~~&f4:&&'q	33r   r   )r   	CliRunnerr   r>   r   r>   r   r>   r   r=   r   r@   r   zBaseException | Noner   z?tuple[type[BaseException], BaseException, TracebackType] | NonerA   )
rB   rC   rD   r`   r   r   r   rs   rt   r8   rE   r   r   r   r      s    > !! ! 	!
 ! ! ! (!!* 	
 	
 
 
 
 
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		 	 	 	 	 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.
    Nc                    |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   win32z( is not supported on Windows. Use 'sys'.)
ValueErrorr   platformr   env
echo_stdincatch_exceptionscapture)r   r   r   r   r   r   s         r   r   zCliRunner.__init__D  s~     -'7+%NO  d?s||w67+%MN  25)$ 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_nameZ  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_enva  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   rs   r"   nextrstripStopIterationEOFErrorrh   )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   rs   r"   rh   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&   rs   r"   rh   )echochars     r   _getcharz%CliRunner.isolation.<locals>._getchar  s>    99>>!$D

  &JJKr   c                    | S | S r   rE   )rG   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   rs   )r   	__stdin__
__stdout__)r   r   r   rs   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   boolr:   r<   )NN)rG   zt.IO[t.Any] | Noner   bool | Noner:   r   )tabNN)r   zpdb.Pdbr   r<   r   t.IO[str] | Noners   r   r~   r=   r:   r;   )"r   r   r   r   rs   rt   r   FORCED_WIDTHr   ro   r   r   r   BinaryIOr   rv   _CHUNK_SIZErH   r   visible_prompt_funchidden_prompt_funcr   r	   r   r   pdbPdbr   itemsrS   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||<
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_namerE   )argsr   zint | t.Any | Noner   r   )r   r   rJ   rY   OSErrorr   rN   r   rs   rz   rt   r   r<   shlexsplitpopKeyErrorr   main
SystemExitr   r   r   coder@   r"   r   rh   r^   getvaluer   )r   r   r   r   r   r   r   extrar   cap_outcap_err
outstreamsr   r   r   r   r   e_codefd_outfd_errrs   rt   r   s                          r   invokezCliRunner.invoke0  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   )rS   getcwdrU   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   CaptureModer:   r;   )r   r   r:   r<   r   )r   r  r:   zcabc.Mapping[str, str | None])NNF)r    str | bytes | t.IO[t.Any] | Noner   r  r   r   r:   z8cabc.Iterator[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
  r=   r:   r   )r  zstr | os.PathLike[str] | Noner:   zcabc.Iterator[str])rB   rC   rD   r`   r   r   r   
contextlibcontextmanagerr   r  r  rE   r   r   r   r     sg   "L 48 !%$,, 2, 	,
 , , 
,," AE=	&  3748	C,/C, 2C, 	C,
 
BC, C,P 152648(,O
O
 .O
 0	O

 2O
 &O
 O
 O
 
O
b 8<5	 r   r   )rG   zEchoingStdin | Noner:   zcabc.Iterator[None])r   r  r   r<   r:   r9   ))
__future__r   collections.abcabccabcr   rq   rS   r   r  r   rU   typingr   typesr   r   r   r   r   r	   r
   TYPE_CHECKING	_typeshedr   corer   Literalr  r   r!  rH   rJ   rr   rb   ro   TextIOWrapperrv   r   r   r   rE   r   r   <module>r-     s    "   	 	 
  
        (??(ii$! !D   B "**  &C C0"** 0f+69(K4 K4\A Ar   