o
    h0                     @   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rd dlm Z  ej!dddr	 ej!dddZ"e"dkre"dkrqe d qe de"  	 ej!d dd!Z#e$e#dkrqe d" qe d#e# ej!d$g d%d&Z%e d'e% ej!d(g d)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   ]/home/www/facesmatcher.com/frenv_anti/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 )	InvalidResponsezException 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< 	d4dd	dd
d
d
ddedee dedeee  dedededdfddZee	d4d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dee deeef fddZee	d4d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e	d4dd	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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	d5d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!d6d,d-Z"edd.dee defd/d0Z#edd.dedee deeef fd1d0Z#ddd2dedee defd3d0Z#dS )7
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.
        case_sensitive (bool, optional): Matching of choices should be case-sensitive. Defaults to True.
        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#   case_sensitiveshow_defaultshow_choicespromptr&   r'   r(   r)   r*   r   c                C   sT   |pt  | _t|trtj|ddn|| _|| _|d ur|| _|| _	|| _
|| _d S )Nr+   style)r   r&   
isinstancestrr   Zfrom_markupr+   r'   r#   r(   r)   r*   )r   r+   r&   r'   r#   r(   r)   r*   r   r   r   r   6   s   
zPromptBase.__init__)r&   r'   r#   r(   r)   r*   streamdefaultr0   c          
      C      d S r   r   )
clsr+   r&   r'   r#   r(   r)   r*   r1   r0   r   r   r   askN   s   zPromptBase.askc          	      C   r2   r   r   )	r3   r+   r&   r'   r#   r(   r)   r*   r0   r   r   r   r4   _   s   .)r&   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.
            case_sensitive (bool, optional): Matching of choices should be case-sensitive. Defaults to True.
            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)   r*   r1   r0   Z_promptr   r   r   r4   o   s   	c                 C   s   t d| ddS )zTurn 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 )zMake 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"   r9   prompt_suffix)r   r1   r+   Z_choicesr#   _defaultr   r   r   make_prompt   s$   
	



zPromptBase.make_promptc                 C   s   |j |||dS )zGet 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r| | j v S |  dd | j D v S )zCheck value is in the list of valid choices.

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

        Returns:
            bool: True if choice was valid, otherwise False.
        Nc                 S      g | ]}|  qS r   lower.0choicer   r   r   
<listcomp>       z+PromptBase.check_choice.<locals>.<listcomp>)r#   r(   striprJ   r   rG   r   r   r   check_choice   s   	zPromptBase.check_choicec                 C   s~   |  }z| |}W n ty   t| jw | jdur=| |s't| j| js=| | jdd | jD 	|
  }|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.
        Nc                 S   rH   r   rI   rK   r   r   r   rN      rO   z/PromptBase.process_response.<locals>.<listcomp>)rP   r"   
ValueErrorr   validate_error_messager#   rR   illegal_choice_messager(   indexrJ   )r   rG   return_valuer   r   r   process_response   s    



zPromptBase.process_responseerrorc                 C   s   | j | dS )zCalled to handle validation error.

        Args:
            value (str): String entered by user.
            error (InvalidResponse): Exception instance the initiated the error.
        N)r&   print)r   rG   rY   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   r^     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 )zRun the prompt loop.

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

        Returns:
            PromptType: Processed value.
        Tr]   r$   .N)r\   rD   rF   r&   r'   rX   r   r[   )r   r1   r0   r+   rG   rW   rY   r   r   r   r^     s   	
)r$   r   )r   N)$r   r   r   r   r/   r"   type__annotations__rT   rU   rB   r#   r   r   r   r   boolr   classmethodr	   r   r   r   r   r4   r   r   r9   rD   rF   rR   rX   r   r[   r\   r^   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   rc   0  s    rc   c                   @      e Zd ZdZeZdZdS )	IntPromptzA 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"   rT   r   r   r   r   re   <      re   c                   @   rd   )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"   rT   r   r   r   r   rh   H  rg   rh   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.r6   r7   r8   r,   )r#   r   )r   r1   yesnor   r   r   r9   a  s   
*zConfirm.render_defaultrG   c                 C   s.   |   }|| jvrt| j|| jd kS )zConvert choices to a bool.r   )rP   rJ   r#   r   rT   rQ   r   r   r   rX   f  s   

zConfirm.process_responseN)r   r   r   r   ra   r"   rT   r#   r   r/   r`   r   r   r9   rX   r   r   r   r   rj   T  s   
 rj   __main__)rZ   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)ZappleZorangeZpear)r#   zfruit=z'What's the best Dog? (Case INSENSITIVE))zBorder TerrierZCollieZLabradoodleF)r#   r(   zdoggie=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/   rc   rf   re   ri   rh   ra   rj   r   Zpip._vendor.richrZ   r4   resultr'   lenZfruitZdoggier   r   r   r   <module>   s^   (   