a
    0h?                     @   s*  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rdd	lmZ G d
d dZe jeje ejd dddZG dd dejZejejeeejej f  eej dddZ!G dd dZ"G dd dZ#dS )    N)TracebackType   )_compat)
formatting)termui)utils)_find_binary_reader)BaseCommandc                   @   s   e Zd ZejejddddZeejdddZe	e	dd	d
Z
dee	dddZdee	dddZdee	dddZeje	 dddZeje	 dddZedddZdS )EchoingStdinN)inputoutputreturnc                 C   s   || _ || _d| _d S )NF)_input_output_paused)selfr   r    r   ;/var/www/auris/lib/python3.9/site-packages/click/testing.py__init__   s    zEchoingStdin.__init__)xr   c                 C   s   t | j|S N)getattrr   )r   r   r   r   r   __getattr__   s    zEchoingStdin.__getattr__)rvr   c                 C   s   | j s| j| |S r   )r   r   write)r   r   r   r   r   _echo   s    zEchoingStdin._echo)nr   c                 C   s   |  | j|S r   )r   r   readr   r   r   r   r   r   $   s    zEchoingStdin.readc                 C   s   |  | j|S r   )r   r   read1r   r   r   r   r    '   s    zEchoingStdin.read1c                 C   s   |  | j|S r   )r   r   readliner   r   r   r   r!   *   s    zEchoingStdin.readliner   c                    s    fdd j  D S )Nc                    s   g | ]}  |qS r   r   .0r   r   r   r   
<listcomp>.       z*EchoingStdin.readlines.<locals>.<listcomp>)r   	readlinesr&   r   r&   r   r)   -   s    zEchoingStdin.readlinesc                    s   t  fdd jD S )Nc                 3   s   | ]}  |V  qd S r   r#   r$   r&   r   r   	<genexpr>1   r(   z(EchoingStdin.__iter__.<locals>.<genexpr>)iterr   r&   r   r&   r   __iter__0   s    zEchoingStdin.__iter__c                 C   s
   t | jS r   )reprr   r&   r   r   r   __repr__3   s    zEchoingStdin.__repr__)r   )r   )r   )__name__
__module____qualname__tBinaryIOr   strAnyr   bytesr   intr   r    r!   Listr)   Iteratorr,   r.   r   r   r   r   r
      s   r
   )streamr   c                 c   s&   | d u rd V  nd| _ d V  d| _ d S )NTF)r   )r:   r   r   r   _pause_echo7   s
    r;   c                       sR   e Zd Zejeeejdd fddZeedddZ	eeddd	Z
  ZS )
_NamedTextIOWrapperN)buffernamemodekwargsr   c                    s$   t  j|fi | || _|| _d S r   )superr   _name_mode)r   r=   r>   r?   r@   	__class__r   r   r   B   s    z_NamedTextIOWrapper.__init__r"   c                 C   s   | j S r   )rB   r&   r   r   r   r>   I   s    z_NamedTextIOWrapper.namec                 C   s   | j S r   )rC   r&   r   r   r   r?   M   s    z_NamedTextIOWrapper.mode)r/   r0   r1   r2   r3   r4   r5   r   propertyr>   r?   __classcell__r   r   rD   r   r<   A   s   r<   )r   charsetr   c                 C   sb   t | dr6tttjtj | }|d ur.|S td| d u rDd} nt| trX| 	|} t
| S )Nr   z.Could not find binary reader for input stream.r(   )hasattrr   r2   castIOr5   	TypeError
isinstancer4   encodeioBytesIO)r   rH   r   r   r   r   make_input_streamR   s    


rQ   c                   @   s   e Zd ZdZddeeje ejeeje	 ejej
eje	 e	ef  dddZeeddd	Zeedd
dZeedddZedddZdS )Resultz3Holds the captured result of an invoked CLI script.N	CliRunnerrunnerstdout_bytesstderr_bytesreturn_value	exit_code	exceptionexc_infoc                 C   s.   || _ || _|| _|| _|| _|| _|| _d S r   rT   )r   rU   rV   rW   rX   rY   rZ   r[   r   r   r   r   i   s    zResult.__init__r"   c                 C   s   | j S )z(The (standard) output as unicode string.)stdoutr&   r   r   r   r      s    zResult.outputc                 C   s   | j | jjdddS )z&The standard output as unicode string.replace

)rV   decoderU   rH   r]   r&   r   r   r   r\      s    zResult.stdoutc                 C   s,   | j du rtd| j | jjdddS )z%The standard error as unicode string.Nzstderr not separately capturedr]   r^   r_   )rW   
ValueErrorr`   rU   rH   r]   r&   r   r   r   stderr   s
    
zResult.stderrc                 C   s,   | j rt| j nd}dt| j d| dS )Nokay< >)rZ   r-   typer/   )r   Zexc_strr   r   r   r.      s    zResult.__repr__)N)r/   r0   r1   __doc__r6   r2   Optionalr5   r7   BaseExceptionTupleTyper   r   rF   r4   r   r\   rb   r.   r   r   r   r   rR   f   s(    rR   c                
   @   s  e Zd ZdZdeejejeeje f  eeddddZ	d	ed
ddZ
dejejeeje f  ejeeje f dddZejdejejeeejej f  ejejeeje f  eejejejejej f  dddZdd	ejejeeje f  ejejeeejej f  ejejeeje f  eeejedddZejdejejedf  eje dddZdS )rS   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 mix_stderr: if this is set to `False`, then stdout and stderr are
                       preserved as independent streams.  This is useful for
                       Unix-philosophy apps that have predictable stdout and
                       noisy stderr, such that each may be measured
                       independently
    utf-8NFT)rH   env
echo_stdin
mix_stderrr   c                 C   s    || _ |pi | _|| _|| _d S r   )rH   rn   ro   rp   )r   rH   rn   ro   rp   r   r   r   r      s    
zCliRunner.__init__r	   )clir   c                 C   s
   |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   rq   r   r   r   get_default_prog_name   s    zCliRunner.get_default_prog_name)	overridesr   c                 C   s   t | j}|r|| |S )z8Returns the environment overrides for invoking a script.)dictrn   update)r   rt   r   r   r   r   make_env   s    

zCliRunner.make_env)r   rn   colorr   c                 #   s  t || j}d}tj}tj}tj}tj}	dt_| |}t	
 }
| jr^ttjt||
 }}t|| jddd t_| jrd_t|
| jdddt_d}| jrtjt_nt	
 }t|| jd	dd
dt_t|dtjt tdfdd}t|dtjt tdfdd}t|ttddd}| dtjtjtj  tjt td fdd}tj}tj}tj}tj}tj}|t_|t_|t_|t_|t_i }z|  D ]R\}}t!j"#|||< |du rzt!j"|= W n t$y   Y n0 n
|t!j"|< q|
|fV  W |  D ]B\}}|du r@zt!j"|= W n t$y<   Y n0 n
|t!j"|< q
|t_|t_|t_|t_|t_|t_|t_|t_|	t_n|  D ]B\}}|du rzt!j"|= W n t$y   Y n0 n
|t!j"|< q|t_|t_|t_|t_|t_|t_|t_|t_|	t_0 dS )an  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.

        .. 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)promptr   c                    s>   t j| pd   d}t j| d t j  |S )N r^   r_   )sysr\   r   r!   rstripflush)r   val
text_inputr   r   visible_input  s
    
z*CliRunner.isolation.<locals>.visible_inputc                    s.   t j| pd d t j    dS )Nr   r_   r^   )r   r\   r   r   r!   r   )r   r   r   r   hidden_input  s    
z)CliRunner.isolation.<locals>.hidden_input)echor   c                 S   s*   t jd}| rt j| t j  |S )Nr   )r   stdinr   r\   r   r   )r   charr   r   r   _getchar$  s
    
z%CliRunner.isolation.<locals>._getchar)r:   rx   r   c                    s   |d u r  S | S r   r   )r:   rx   )default_colorr   r   should_strip_ansi0  s    z.CliRunner.isolation.<locals>.should_strip_ansi)N)N)NN)%rQ   rH   r   r   r\   rb   r   ZFORCED_WIDTHrw   rO   rP   ro   r2   rJ   r3   r
   r<   _CHUNK_SIZErp   r;   ri   r4   boolrK   r5   r   Zvisible_prompt_funcZhidden_prompt_funcr   r   r   r   itemsosenvironget	Exception)r   r   rn   rx   Zbytes_inputZ
echo_inputZ	old_stdinZ
old_stdoutZ
old_stderrZold_forced_widthZbytes_outputZbytes_errorr   r   r   r   Zold_visible_prompt_funcZold_hidden_prompt_funcZold__getchar_funcZold_should_strip_ansiZold__compat_should_strip_ansiZold_envkeyvaluer   )r   r   r   	isolation   s    



	 


zCliRunner.isolation)rq   argsr   rn   catch_exceptionsrx   extrar   c                 K   s  d}| j |||d}	d}
d}d}t|tr8t|}z|d}W n tyb   | |}Y n0 z&z|jf |pvd|d|}
W n t	y } z|t
 }ttjtjttjf  |j}|du rd}|dkr|}t|tst
jt| t
jd d}|}W Y d}~nFd}~0  tyX } z$|s4 |}d}t
 }W Y d}~n
d}~0 0 W t
j  |	d  }| jrd}n|	d  }n2t
j  |	d  }| jrd}n|	d  }0 W d   n1 s0    Y  t| |||
|||d	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``.
        :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.

        .. 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.
        N)r   rn   rx   r   	prog_namer   )r   r   r_   r   rT   )r   rM   r4   shlexsplitpopKeyErrorrs   main
SystemExitr   r[   r2   rJ   ri   Unionr7   r5   coder\   r   r   r   getvaluerp   rR   )r   rq   r   r   rn   r   rx   r   r[   Z
outstreamsrX   rZ   rY   r   eZe_coder\   rb   r   r   r   invokea  sd    ,

  

.zCliRunner.invokezos.PathLike[str])temp_dirr   c                 c   s   t  }tj|d}t | z>|V  W t | |du rzt| W q tyZ   Y q0 n6t | |du rzt| W n ty   Y n0 0 dS )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.
        )dirN)r   getcwdtempfilemkdtempchdirshutilrmtreeOSError)r   r   cwddtr   r   r   isolated_filesystem  s"    


zCliRunner.isolated_filesystem)rm   NFT)N)NNF)NNNTF)N)r/   r0   r1   rh   r4   r2   ri   Mappingr   r   rs   rw   
contextlibcontextmanagerr   r6   rK   r5   r9   rk   rO   rP   r   SequencerR   r   r   r   r   r   r   rS      sd        	         e rS   )$r   rO   r   r   r   r   r   typingr2   typesr   r   r   r   r   r   r   TYPE_CHECKINGcorer	   r
   r   ri   r9   r;   TextIOWrapperr<   r   r4   r6   rK   r5   r3   rQ   rR   rS   r   r   r   r   <module>   s0   "	: