o
    Ëý°j+,  ã                   @   sª  d dl mZmZmZmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZ edƒZedƒZG dd	„ d	eƒZG d
d„ deƒZG dd„ dee ƒZG dd„ dee ƒZG dd„ dee ƒZG dd„ dee ƒZG dd„ dee ƒZedkrÓd dlmZ ej ddd�rÍ	 ej ddd�Z!e!dkr”e!dkr”nedƒ q„ede!› �ƒ 	 ej d dd!�Z"e#e"ƒdkr¯ned"ƒ q¡ed#e"›�ƒ ej d$g d%¢d&�Z$ed'e$›�ƒ d)S ed(ƒ d)S d)S )*é    )ÚAnyÚGenericÚListÚOptionalÚTextIOÚTypeVarÚUnionÚoverloadé   )Úget_console)ÚConsole)ÚTextÚTextTypeÚ
PromptTypeÚDefaultTypec                   @   s   e Zd ZdZdS )ÚPromptErrorz/Exception base class for prompt related errors.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_vendor/rich/prompt.pyr      s    r   c                   @   s0   e Zd ZdZdeddfdd„Zdefdd„ZdS )	ÚInvalidResponsezÌException to indicate a response was invalid. Raise this within process_response() to indicate an error
    and provide an error message.

    Args:
        message (Union[str, Text]): Error message.
    ÚmessageÚreturnNc                 C   s
   || _ d S ©N©r   )Úselfr   r   r   r   Ú__init__   s   
zInvalidResponse.__init__c                 C   s   | j S r   r   ©r   r   r   r   Ú__rich__   s   zInvalidResponse.__rich__)r   r   r   r   r   r   r    r   r   r   r   r      s    r   c                   @   s’  e Zd ZU dZeZeed< dZdZ	dZ
dZeee  ed< 	d3dd	dd
d
dœdedee dedeee  dededdfdd„Zee	d3dd	dd
d
ddœdedee dedeee  dedededee deeef fdd„ƒƒZee	d3dd	dd
d
ddœdedee dedeee  dededee defdd„ƒƒZe	d3dd	dd
d
dddœdedee dedeee  dedededee defdd„ƒZdedefdd„Zdedefdd „Ze	d4dedededee def
d!d"„ƒZd#edefd$d%„Zd#edefd&d'„Zd#ed(e ddfd)d*„Z!d5d+d,„Z"edd-œdee defd.d/„ƒZ#edd-œdedee deeef fd0d/„ƒZ#ddd1œdedee defd2d/„Z#dS )6Ú
PromptBasea€  Ask the user for input until a valid response is received. This is the base class, see one of
    the concrete classes for examples.

    Args:
        prompt (TextType, optional): Prompt text. Defaults to "".
        console (Console, optional): A Console instance or None to use global console. Defaults to None.
        password (bool, optional): Enable password input. Defaults to False.
        choices (List[str], optional): A list of valid choices. Defaults to None.
        show_default (bool, optional): Show default in prompt. Defaults to True.
        show_choices (bool, optional): Show choices in prompt. Defaults to True.
    Úresponse_typez*[prompt.invalid]Please enter a valid valuezA[prompt.invalid.choice]Please select one of the available optionsz: NÚchoicesÚ FT©ÚconsoleÚpasswordr#   Úshow_defaultÚshow_choicesÚpromptr&   r'   r(   r)   r   c                C   sN   |pt ƒ | _t|tƒrtj|dd�n|| _|| _|d ur|| _|| _	|| _
d S )Nr*   ©Ústyle)r   r&   Ú
isinstanceÚstrr   Úfrom_markupr*   r'   r#   r(   r)   )r   r*   r&   r'   r#   r(   r)   r   r   r   r   5   s   
ÿý
zPromptBase.__init__)r&   r'   r#   r(   r)   ÚstreamÚdefaultr0   c          	      C   ó   d S r   r   )	Úclsr*   r&   r'   r#   r(   r)   r1   r0   r   r   r   ÚaskK   s   zPromptBase.askc                C   r2   r   r   )r3   r*   r&   r'   r#   r(   r)   r0   r   r   r   r4   [   s   .)r&   r'   r#   r(   r)   r1   r0   c          
      C   s    | ||||||d�}	|	||d�S )a  Shortcut to construct and run a prompt loop and return the result.

        Example:
            >>> filename = Prompt.ask("Enter a filename")

        Args:
            prompt (TextType, optional): Prompt text. Defaults to "".
            console (Console, optional): A Console instance or None to use global console. Defaults to None.
            password (bool, optional): Enable password input. Defaults to False.
            choices (List[str], optional): A list of valid choices. Defaults to None.
            show_default (bool, optional): Show default in prompt. Defaults to True.
            show_choices (bool, optional): Show choices in prompt. Defaults to True.
            stream (TextIO, optional): Optional text file open for reading to get input. Defaults to None.
        r%   ©r1   r0   r   )
r3   r*   r&   r'   r#   r(   r)   r1   r0   Ú_promptr   r   r   r4   j   s   úc                 C   s   t d|› d�dƒS )zÊTurn the supplied default in to a Text instance.

        Args:
            default (DefaultType): Default value.

        Returns:
            Text: Text containing rendering of default value.
        ú(ú)úprompt.default)r   )r   r1   r   r   r   Úrender_default�   s   	zPromptBase.render_defaultc                 C   s–   | j  ¡ }d|_| jr%| jr%d | j¡}d|› d�}| d¡ | |d¡ |dkrC| jrCt|t	| j
fƒrC| d¡ |  |¡}| |¡ | | j¡ |S )zšMake prompt text.

        Args:
            default (DefaultType): Default value.

        Returns:
            Text: Text to display in prompt.
        r$   ú/ú[ú]ú zprompt.choices.)r*   ÚcopyÚendr)   r#   ÚjoinÚappendr(   r-   r.   r"   r:   Úprompt_suffix)r   r1   r*   Ú_choicesr#   Ú_defaultr   r   r   Úmake_promptš   s"   
	
ÿþ


zPromptBase.make_promptc                 C   s   |j |||d�S )zòGet input from user.

        Args:
            console (Console): Console instance.
            prompt (TextType): Prompt text.
            password (bool): Enable password entry.

        Returns:
            str: String from user.
        )r'   r0   )Úinput)r3   r&   r*   r'   r0   r   r   r   Ú	get_input¹   s   zPromptBase.get_inputÚvaluec                 C   s   | j dusJ ‚| ¡ | j v S )zÃCheck value is in the list of valid choices.

        Args:
            value (str): Value entered by user.

        Returns:
            bool: True if choice was valid, otherwise False.
        N)r#   Ústrip©r   rI   r   r   r   Úcheck_choiceÍ   s   	zPromptBase.check_choicec                 C   sR   |  ¡ }z|  |¡}W n ty   t| jƒ‚w | jdur'|  |¡s't| jƒ‚|S )a  Process response from user, convert to prompt type.

        Args:
            value (str): String typed by user.

        Raises:
            InvalidResponse: If ``value`` is invalid.

        Returns:
            PromptType: The value to be returned from ask method.
        N)rJ   r"   Ú
ValueErrorr   Úvalidate_error_messager#   rL   Úillegal_choice_message)r   rI   Úreturn_valuer   r   r   Úprocess_responseÙ   s   
ÿ
zPromptBase.process_responseÚerrorc                 C   s   | j  |¡ dS )z¼Called to handle validation error.

        Args:
            value (str): String entered by user.
            error (InvalidResponse): Exception instance the initiated the error.
        N)r&   Úprint)r   rI   rR   r   r   r   Úon_validate_errorð   s   zPromptBase.on_validate_errorc                 C   s   dS )z,Hook to display something before the prompt.Nr   r   r   r   r   Ú
pre_promptù   s    zPromptBase.pre_prompt©r0   c                C   r2   r   r   )r   r0   r   r   r   Ú__call__ü   s   zPromptBase.__call__c                C   r2   r   r   )r   r1   r0   r   r   r   rW      s   r5   c             
   C   s€   	 |   ¡  |  |¡}| j| j|| j|d�}|dkr|dkr|S z|  |¡}W |S  ty? } z|  ||¡ W Y d}~q d}~ww )z¤Run the prompt loop.

        Args:
            default (Any, optional): Optional default value.

        Returns:
            PromptType: Processed value.
        TrV   r$   .N)rU   rF   rH   r&   r'   rQ   r   rT   )r   r1   r0   r*   rI   rP   rR   r   r   r   rW     s   	
ü€þ)r$   r   )r   N)$r   r   r   r   r.   r"   ÚtypeÚ__annotations__rN   rO   rC   r#   r   r   r   r   Úboolr   Úclassmethodr	   r   r   r   r   r4   r   r   r:   rF   rH   rL   rQ   r   rT   rU   rW   r   r   r   r   r!      s$  
 ÿþøþüû
úùø	
÷þöþüû
úùø	÷
ö
õþ÷þüû
úùø	÷
öþöþüû
úùø	÷
öõ$ûþýüûú
	ÿÿÿ
þ&r!   c                   @   s   e Zd ZdZeZdS )ÚPromptzbA prompt that returns a str.

    Example:
        >>> name = Prompt.ask("Enter your name")


    N)r   r   r   r   r.   r"   r   r   r   r   r\     s    r\   c                   @   ó   e Zd ZdZeZdZdS )Ú	IntPromptz‰A prompt that returns an integer.

    Example:
        >>> burrito_count = IntPrompt.ask("How many burritos do you want to order")

    z3[prompt.invalid]Please enter a valid integer numberN)r   r   r   r   Úintr"   rN   r   r   r   r   r^   *  ó    r^   c                   @   r]   )ÚFloatPromptzyA prompt that returns a float.

    Example:
        >>> temperature = FloatPrompt.ask("Enter desired temperature")

    z%[prompt.invalid]Please enter a numberN)r   r   r   r   Úfloatr"   rN   r   r   r   r   ra   6  r`   ra   c                   @   sR   e Zd ZU dZeZdZddgZee	 e
d< dedefdd	„Zd
e	defdd„ZdS )ÚConfirmzuA yes / no confirmation prompt.

    Example:
        >>> if Confirm.ask("Continue"):
                run_job()

    z#[prompt.invalid]Please enter Y or NÚyÚnr#   r1   r   c                 C   s4   | j \}}t|rd|› d�dd�S d|› d�dd�S )z8Render the default as (y) or (n) rather than True/False.r7   r8   r9   r+   )r#   r   )r   r1   ÚyesÚnor   r   r   r:   O  s   
*zConfirm.render_defaultrI   c                 C   s.   |  ¡  ¡ }|| jvrt| jƒ‚|| jd kS )zConvert choices to a bool.r   )rJ   Úlowerr#   r   rN   rK   r   r   r   rQ   T  s   

zConfirm.process_responseN)r   r   r   r   rZ   r"   rN   r#   r   r.   rY   r   r   r:   rQ   r   r   r   r   rc   B  s   
 rc   Ú__main__)rS   zRun [i]prompt[/i] tests?T)r1   z6:rocket: Enter a number between [b]1[/b] and [b]10[/b]é   é
   z=:pile_of_poo: [prompt.invalid]Number must be between 1 and 10znumber=z=Please enter a password [cyan](must be at least 5 characters))r'   z"[prompt.invalid]password too shortz	password=zEnter a fruit)ÚappleÚorangeÚpear)r#   zfruit=z[b]OK :loudly_crying_face:N)%Útypingr   r   r   r   r   r   r   r	   r$   r   r&   r   Útextr   r   r   r   Ú	Exceptionr   r   r!   r.   r\   r_   r^   ra   rZ   rc   r   Úpip._vendor.richrS   r4   Úresultr'   ÚlenÚfruitr   r   r   r   Ú<module>   sR   (   ÿúþùä