a
    ibòf+,  ã                   @   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�r0e!dk�r0�q<edƒ �q
ede!› �ƒ ej d dd!�Z"e#e"ƒdk�rj�qved"ƒ �qJed#e"›�ƒ ej d$g d%¢d&�Z$ed'e$›�ƒ ned(ƒ 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   úT/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_vendor/rich/prompt.pyr      s   r   c                   @   s.   e Zd ZdZeddœdd„Zedœ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.
    N)ÚmessageÚreturnc                 C   s
   || _ d S ©N©r   )Úselfr   r   r   r   Ú__init__   s    zInvalidResponse.__init__©r   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                   @   s4  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œeee eeee  eeddœdd„Zeed4dd	dd
d
ddœeee eeee  eeeee eeef dœ	dd„ƒƒZeed5dd	dd
d
ddœeee eeee  eeee edœdd„ƒƒZed6dd	dd
d
dddœeee eeee  eeeee edœ	dd„ƒZeedœdd„Zeedœdd„Zed7eeeee edœdd„ƒZeed œd!d"„Zeed œd#d$„Zee dd%œd&d'„Z!dd(œd)d*„Z"edd+œee ed,œd-d.„ƒZ#edd+œeee eeef d/œd0d.„ƒZ#ddd1œeee ed/œd2d.„Z#dS )8Ú
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*   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)	r+   r'   r(   r$   r)   r*   Údefaultr1   r   c          	      C   s   d S r   r   )	Úclsr+   r'   r(   r$   r)   r*   r2   r1   r   r   r   ÚaskK   s    zPromptBase.ask)r+   r'   r(   r$   r)   r*   r1   r   c                C   s   d S r   r   )r3   r+   r'   r(   r$   r)   r*   r1   r   r   r   r4   [   s    .)r'   r(   r$   r)   r*   r2   r1   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&   ©r2   r1   r   )
r3   r+   r'   r(   r$   r)   r*   r2   r1   Z_promptr   r   r   r4   j   s    ú©r2   r   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   r2   r   r   r   Úrender_default�   s    	zPromptBase.render_defaultc                 C   s–   | j  ¡ }d|_| jrJ| jrJd | j¡}d|› d�}| d¡ | |d¡ |dkr†| jr†t|t	| j
fƒr†| 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   r2   r+   Z_choicesr$   Ú_defaultr   r   r   Úmake_promptš   s$    	

ÿþý


zPromptBase.make_prompt)r'   r+   r(   r1   r   c                 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(   r1   )Úinput)r3   r'   r+   r(   r1   r   r   r   Ú	get_input¹   s    zPromptBase.get_input©Úvaluer   c                 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   sV   |  ¡ }z|  |¡}W n ty2   t| jƒ‚Y n0 | jdurR|  |¡sRt| 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)rI   Úerrorr   c                 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_errorr   c                 C   s   dS )z,Hook to display something before the prompt.Nr   r    r   r   r   Ú
pre_promptù   s    zPromptBase.pre_prompt©r1   )r1   r   c                C   s   d S r   r   )r   r1   r   r   r   Ú__call__ü   s    zPromptBase.__call__)r2   r1   r   c                C   s   d S r   r   )r   r2   r1   r   r   r   rW      s    r5   c             
   C   s’   |   ¡  |  |¡}| j| j|| j|d�}|dkr<|dkr<|S z|  |¡}W n< ty† } z$|  ||¡ W Y d}~q W Y d}~q d}~0 0 |S q dS )z¤Run the prompt loop.

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

        Returns:
            PromptType: Processed value.
        rV   r%   .N)rU   rE   rG   r'   r(   rQ   r   rT   )r   r2   r1   r+   rI   rP   rR   r   r   r   rW     s    

")r%   )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:   rE   rG   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                   @   s   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]   *  s   r]   c                   @   s   e Zd ZdZeZdZdS )Ú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   r_   6  s   r_   c                   @   sN   e Zd ZU dZeZdZddgZee	 e
d< eedœdd„Ze	ed	œ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$   r6   c                 C   s.   | j \}}t|rd|› d�n
d|› d�dd�S )z8Render the default as (y) or (n) rather than True/False.r7   r8   r9   r,   )r$   r   )r   r2   ÚyesÚnor   r   r   r:   O  s    
zConfirm.render_defaultrH   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   ra   B  s   
ra   Ú__main__)rS   zRun [i]prompt[/i] tests?T)r2   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)ÚappleZ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]   r_   rZ   ra   r   Úpip._vendor.richrS   r4   Úresultr(   ÚlenZfruitr   r   r   r   Ú<module>   sF   (  
ÿþ