o �J�h�0�@s�ddlmZmZmZmZmZmZmZmZddl m Z ddl m Z ddl mZmZed�Zed�ZGdd �d e�ZGd d �d e�ZGd d �d ee�ZGdd�dee�ZGdd�dee�ZGdd�dee�ZGdd�dee�Zedkr�ddlm Z ej!ddd�r� ej!ddd�Z"e"dkr�e"dkr�ne d�q�e de"��� ej!d dd!�Z#e$e#�dkr�ne d"�q�e d#e#���ej!d$gd%�d&�Z%e d'e%���ej!d(gd)�d*d+�Z&e d,e&���d.Se d-�d.Sd.S)/�)�Any�Generic�List�Optional�TextIO�TypeVar�Union�overload�)� get_console)�Console)�Text�TextType� PromptType� DefaultTypec@seZdZdZdS)� PromptErrorz/Exception base class for prompt related errors.N)�__name__� __module__� __qualname__�__doc__�rr�IC:\pinokio\api\whisper-webui.git\app\env\lib\site-packages\rich\prompt.pyr src@s0eZdZdZdeddfdd�Zdefdd�ZdS) �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�returnNcCs ||_dS�N�r)�selfrrrr�__init__s zInvalidResponse.__init__cCs|jSrr�rrrr�__rich__szInvalidResponse.__rich__)rrrrrrr rrrrrsrc@s�eZdZUdZeZeed<dZdZ dZ dZ e e eed< d4dd dd d d d �d ed e edede e ededededdfdd�Zee d4dd dd d d dd�d ed e edede e ededededede edeeeffdd���Zee d4dd dd d d dd�d ed e edede e edededede edefdd���Ze d4dd dd d d ddd�d ed e edede e ededededede edefdd��Zdedefdd�Zdedefd d!�Ze d5d ed edede edef d"d#��Zd$edefd%d&�Zd$edefd'd(�Zd$ed)e ddfd*d+�Z!d6d,d-�Z"edd.�de edefd/d0��Z#edd.�dede edeeeffd1d0��Z#ddd2�dede edefd3d0�Z#dS)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*rcCsT|pt�|_t|t�rtj|dd�n||_||_|dur||_||_ ||_ ||_ dS)Nr+��style) r r&� isinstance�strr � from_markupr+r'r#r(r)r*)rr+r&r'r#r(r)r*rrrr6s �� zPromptBase.__init__)r&r'r#r(r)r*�stream�defaultr1c C�dSrr) �clsr+r&r'r#r(r)r*r2r1rrr�askNszPromptBase.askc Cr3rr) r4r+r&r'r#r(r)r*r1rrrr5_s.)r&r'r#r(r)r*r2r1c Cs"||||||||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%�r2r1r) r4r+r&r'r#r(r)r*r2r1�_promptrrrr5os� cCstd|�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 )rr2rrr�render_default�s zPromptBase.render_defaultcCs�|j��}d|_|jr%|jr%d�|j�}d|�d�}|�d�|�|d�|dkrC|jrCt|t |j f�rC|�d�|� |�}|�|�|�|j �|S)z�Make prompt text. Args: default (DefaultType): Default value. Returns: Text: Text to display in prompt. r$�/�[�]� zprompt.choices.) r+�copy�endr*r#�join�appendr)r.r/r"r;� prompt_suffix)rr2r+Z_choicesr#�_defaultrrr� make_prompt�s"      ��    zPromptBase.make_promptcCs|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)r4r&r+r'r1rrr� get_input�szPromptBase.get_input�valuecCs>|jdusJ�|jr|��|jvS|����dd�|jD�vS)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. NcS�g|]}|���qSr��lower��.0�choicerrr� <listcomp>��z+PromptBase.check_choice.<locals>.<listcomp>)r#r(�striprL�rrIrrr� check_choice�s zPromptBase.check_choicecCs~|��}z|�|�}Wn tyt|j��w|jdur=|�|�s't|j��|js=|�|jdd�|jD�� |� ���}|S)aProcess 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. NcSrJrrKrMrrrrP�rQz/PromptBase.process_response.<locals>.<listcomp>) rRr"� ValueErrorr�validate_error_messager#rT�illegal_choice_messager(�indexrL)rrI� return_valuerrr�process_response�s    �   ��zPromptBase.process_response�errorcCs|j�|�dS)z�Called to handle validation error. Args: value (str): String entered by user. error (InvalidResponse): Exception instance the initiated the error. N)r&�print)rrIr[rrr�on_validate_errorszPromptBase.on_validate_errorcCsdS)z,Hook to display something before the prompt.Nrrrrr� pre_prompt szPromptBase.pre_prompt�r1cCr3rr)rr1rrr�__call__szPromptBase.__call__cCr3rr)rr2r1rrrr`sr6c Cs� |��|�|�}|j|j||j|d�}|dkr|dkr|Sz|�|�}W|Sty?}z |�||�WYd}~qd}~ww)z�Run the prompt loop. Args: default (Any, optional): Optional default value. Returns: PromptType: Processed value. Tr_r$.N)r^rFrHr&r'rZrr])rr2r1r+rIrYr[rrrr`s   �  ��)r$r)rN)$rrrrr/r"�type�__annotations__rVrWrDr#rrrr �boolr� classmethodr rrrrr5rr r;rFrHrTrZrr]r^r`rrrrr!s<  ������ ��� � ������ ��� � � � ������ ��� � � ������ ��� � � � �' ����� � ���  �&r!c@seZdZdZeZdS)�PromptzbA prompt that returns a str. Example: >>> name = Prompt.ask("Enter your name") N)rrrrr/r"rrrrre0srec@�eZdZdZeZdZdS)� 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)rrrr�intr"rVrrrrrg<�rgc@rf)� FloatPromptzyA prompt that returns a float. Example: >>> temperature = FloatPrompt.ask("Enter desired temperature") z%[prompt.invalid]Please enter a numberN)rrrr�floatr"rVrrrrrjHrirjc@sReZdZUdZeZdZddgZee e d<de de fdd �Z d e defd d �Zd S)�ConfirmzuA yes / no confirmation prompt. Example: >>> if Confirm.ask("Continue"): run_job() z#[prompt.invalid]Please enter Y or N�y�nr#r2rcCs4|j\}}t|rd|�d�dd�Sd|�d�dd�S)z8Render the default as (y) or (n) rather than True/False.r8r9r:r,)r#r )rr2�yes�norrrr;as *zConfirm.render_defaultrIcCs.|����}||jvrt|j��||jdkS)zConvert choices to a bool.r)rRrLr#rrVrSrrrrZfs   zConfirm.process_responseN)rrrrrcr"rVr#rr/rbrr r;rZrrrrrlTs rl�__main__)r\zRun [i]prompt[/i] tests?T)r2z6:rocket: Enter a number between [b]1[/b] and [b]10[/b]�� z=:pile_of_poo: [prompt.invalid]Number must be between 1 and 10znumber=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#zfruit=z'What's the best Dog? (Case INSENSITIVE))zBorder TerrierZCollieZ LabradoodleF)r#r(zdoggie=z[b]OK :loudly_crying_face:N)'�typingrrrrrrrr r$r r&r �textr rrr� Exceptionrrr!r/rerhrgrkrjrcrlr�richr\r5�resultr'�lenZfruitZdoggierrrr�<module>s^(      ��� �� �
Memory