§
    ŒŸj¯  ã                  ó(  — d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ g d	¢Z G d
„ de¦  «        Z G d„ de¬¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )zV
Input validation for a `Buffer`.
(Validators will be called before accepting input.)
é    )Úannotations)ÚABCMetaÚabstractmethod)ÚCallable©Úrun_in_executor_with_contexté   )ÚDocument)ÚFilterOrBoolÚ	to_filter)ÚConditionalValidatorÚValidationErrorÚ	ValidatorÚThreadedValidatorÚDummyValidatorÚDynamicValidatorc                  ó.   ‡ — e Zd ZdZddˆ fd
„Zdd„Zˆ xZS )r   z›
    Error raised by :meth:`.Validator.validate`.

    :param cursor_position: The cursor position where the error occurred.
    :param message: Text.
    r   Ú Úcursor_positionÚintÚmessageÚstrÚreturnÚNonec                óf   •— t          ¦   «                              |¦  «         || _        || _        d S ©N)ÚsuperÚ__init__r   r   )Úselfr   r   Ú	__class__s      €úf/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/prompt_toolkit/validation.pyr   zValidationError.__init__"   s.   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!Ø.ˆÔØˆŒˆˆó    c                ó@   — | j         j        › d| j        ›d| j        ›d�S )Nz(cursor_position=z
, message=ú))r    Ú__name__r   r   ©r   s    r!   Ú__repr__zValidationError.__repr__'   s-   € Ø”.Ô)ÐoÐo¸DÔ<PÐoÐoÐ^bÔ^jÐoÐoÐoÐor"   )r   r   )r   r   r   r   r   r   ©r   r   )r%   Ú
__module__Ú__qualname__Ú__doc__r   r'   Ú__classcell__)r    s   @r!   r   r      sh   ø€ € € € € ðð ðð ð ð ð ð ð ð
pð pð pð pð pð pð pð pr"   r   c                  óP   — e Zd ZdZedd„¦   «         Zdd„Ze	 	 ddd„¦   «         ZdS )r   a–  
    Abstract base class for an input validator.

    A validator is typically created in one of the following two ways:

    - Either by overriding this class and implementing the `validate` method.
    - Or by passing a callable to `Validator.from_callable`.

    If the validation takes some time and needs to happen in a background
    thread, this can be wrapped in a :class:`.ThreadedValidator`.
    Údocumentr
   r   r   c                ó   — dS )z·
        Validate the input.
        If invalid, this should raise a :class:`.ValidationError`.

        :param document: :class:`~prompt_toolkit.document.Document` instance.
        N© ©r   r.   s     r!   ÚvalidatezValidator.validate8   s	   € ð 	ˆr"   c              ƒ  óT   K  — 	 |                       |¦  «         dS # t          $ r ‚ w xY w)z²
        Return a `Future` which is set when the validation is ready.
        This function can be overloaded in order to provide an asynchronous
        implementation.
        N)r2   r   r1   s     r!   Úvalidate_asynczValidator.validate_asyncB   sA   è è € ð	Ø�MŠM˜(Ñ#Ô#Ð#Ð#Ð#øÝð 	ð 	ð 	Øð	øøøs   „ ›'úInvalid inputFÚvalidate_funcúCallable[[str], bool]Úerror_messager   Úmove_cursor_to_endÚboolc                ó$   — t          |||¦  «        S )aF  
        Create a validator from a simple validate callable. E.g.:

        .. code:: python

            def is_valid(text):
                return text in ['hello', 'world']
            Validator.from_callable(is_valid, error_message='Invalid input')

        :param validate_func: Callable that takes the input string, and returns
            `True` if the input is valid input.
        :param error_message: Message to be displayed if the input is invalid.
        :param move_cursor_to_end: Move the cursor to the end of the input, if
            the input is invalid.
        )Ú_ValidatorFromCallable)Úclsr6   r8   r9   s       r!   Úfrom_callablezValidator.from_callableM   s   € õ, & m°]ÐDVÑWÔWÐWr"   N©r.   r
   r   r   )r5   F)r6   r7   r8   r   r9   r:   r   r   )	r%   r)   r*   r+   r   r2   r4   Úclassmethodr>   r0   r"   r!   r   r   +   s†   € € € € € ð
ð 
ð ðð ð ñ „^ðð	ð 	ð 	ð 	ð ð -Ø#(ð	Xð Xð Xð Xñ „[ðXð Xð Xr"   r   )Ú	metaclassc                  ó*   — e Zd ZdZdd
„Zdd„Zdd„ZdS )r<   z0
    Validate input from a simple callable.
    Úfuncr7   r8   r   r9   r:   r   r   c                ó0   — || _         || _        || _        d S r   )rC   r8   r9   )r   rC   r8   r9   s       r!   r   z_ValidatorFromCallable.__init__k   s!   € ð ˆŒ	Ø*ˆÔØ"4ˆÔÐÐr"   c                ó   — d| j         ›d�S )NzValidator.from_callable(r$   )rC   r&   s    r!   r'   z_ValidatorFromCallable.__repr__r   s   € Ø8¨$¬)Ð8Ð8Ð8Ð8r"   r.   r
   c                ó¢   — |                       |j        ¦  «        s4| j        rt          |j        ¦  «        }nd}t	          || j        ¬¦  «        ‚d S )Nr   )r   r   )rC   Útextr9   Úlenr   r8   )r   r.   Úindexs      r!   r2   z_ValidatorFromCallable.validateu   s\   € Ø�yŠy˜œÑ'Ô'ð 	UØÔ&ð Ý˜HœMÑ*Ô*��à�å!°%ÀÔASÐTÑTÔTÐTð	Uð 	Ur"   N)rC   r7   r8   r   r9   r:   r   r   r(   r?   )r%   r)   r*   r+   r   r'   r2   r0   r"   r!   r<   r<   f   s`   € € € € € ðð ð5ð 5ð 5ð 5ð9ð 9ð 9ð 9ðUð Uð Uð Uð Uð Ur"   r<   c                  ó*   — e Zd ZdZdd„Zdd	„Zdd
„ZdS )r   z²
    Wrapper that runs input validation in a thread.
    (Use this to prevent the user interface from becoming unresponsive if the
    input validation takes too much time.)
    Ú	validatorr   r   r   c                ó   — || _         d S r   )rK   )r   rK   s     r!   r   zThreadedValidator.__init__†   s   € Ø"ˆŒˆˆr"   r.   r
   c                ó:   — | j                              |¦  «         d S r   )rK   r2   r1   s     r!   r2   zThreadedValidator.validate‰   s   € ØŒ×Ò Ñ)Ô)Ð)Ð)Ð)r"   c              ƒ  óF   ‡ ‡K  — dˆˆ fd„}t          |¦  «        ƒ d{V —† dS )z:
        Run the `validate` function in a thread.
        r   r   c                 ó.   •— ‰                      ‰ ¦  «        S r   )r2   )r.   r   s   €€r!   Úrun_validation_threadz?ThreadedValidator.validate_async.<locals>.run_validation_thread‘   s   ø€ Ø—=’= Ñ*Ô*Ð*r"   N)r   r   r   )r   r.   rP   s   `` r!   r4   z ThreadedValidator.validate_asyncŒ   sT   øøè è € ð
	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+õ +Ð+@ÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAÐAr"   N)rK   r   r   r   r?   ©r%   r)   r*   r+   r   r2   r4   r0   r"   r!   r   r      s`   € € € € € ðð ð#ð #ð #ð #ð*ð *ð *ð *ðBð Bð Bð Bð Bð Br"   r   c                  ó   — e Zd ZdZdd„ZdS )	r   z1
    Validator class that accepts any input.
    r.   r
   r   r   c                ó   — d S r   r0   r1   s     r!   r2   zDummyValidator.validateœ   s   € Øˆr"   Nr?   )r%   r)   r*   r+   r2   r0   r"   r!   r   r   —   s2   € € € € € ðð ðð ð ð ð ð r"   r   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )r   zq
    Validator that can be switched on/off according to
    a filter. (This wraps around another validator.)
    rK   r   Úfilterr   r   r   c                ó<   — || _         t          |¦  «        | _        d S r   )rK   r   rU   )r   rK   rU   s      r!   r   zConditionalValidator.__init__¦   s   € Ø"ˆŒÝ Ñ'Ô'ˆŒˆˆr"   r.   r
   c                óf   — |                       ¦   «         r| j                             |¦  «         d S d S r   )rU   rK   r2   r1   s     r!   r2   zConditionalValidator.validateª   s8   € à�;Š;‰=Œ=ð 	.ØŒN×#Ò# HÑ-Ô-Ð-Ð-Ð-ð	.ð 	.r"   N)rK   r   rU   r   r   r   r?   )r%   r)   r*   r+   r   r2   r0   r"   r!   r   r       sF   € € € € € ðð ð
(ð (ð (ð (ð.ð .ð .ð .ð .ð .r"   r   c                  ó*   — e Zd ZdZdd„Zdd	„Zdd
„ZdS )r   z–
    Validator class that can dynamically returns any Validator.

    :param get_validator: Callable that returns a :class:`.Validator` instance.
    Úget_validatorúCallable[[], Validator | None]r   r   c                ó   — || _         d S r   )rY   )r   rY   s     r!   r   zDynamicValidator.__init__·   s   € Ø*ˆÔÐÐr"   r.   r
   c                ót   — |                       ¦   «         pt          ¦   «         }|                     |¦  «         d S r   )rY   r   r2   ©r   r.   rK   s      r!   r2   zDynamicValidator.validateº   s8   € Ø×&Ò&Ñ(Ô(Ð<­NÑ,<Ô,<ˆ	Ø×Ò˜8Ñ$Ô$Ð$Ð$Ð$r"   c              ƒ  ó„   K  — |                       ¦   «         pt          ¦   «         }|                     |¦  «        ƒ d {V —† d S r   )rY   r   r4   r]   s      r!   r4   zDynamicValidator.validate_async¾   sN   è è € Ø×&Ò&Ñ(Ô(Ð<­NÑ,<Ô,<ˆ	Ø×&Ò& xÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0r"   N)rY   rZ   r   r   r?   rQ   r0   r"   r!   r   r   °   sZ   € € € € € ðð ð+ð +ð +ð +ð%ð %ð %ð %ð1ð 1ð 1ð 1ð 1ð 1r"   r   N)r+   Ú
__future__r   Úabcr   r   Útypingr   Úprompt_toolkit.eventloopr   r.   r
   Úfiltersr   r   Ú__all__Ú	Exceptionr   r   r<   r   r   r   r   r0   r"   r!   ú<module>rf      sñ  ððð ð
 #Ð "Ð "Ð "Ð "Ð "à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð à AÐ AÐ AÐ AÐ AÐ Aà Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð €ðpð pð pð pð p�iñ pô pð pð"8Xð 8Xð 8Xð 8Xð 8X˜'ð 8Xñ 8Xô 8Xð 8XðvUð Uð Uð Uð U˜Yñ Uô Uð Uð2Bð Bð Bð Bð B˜	ñ Bô Bð Bð0ð ð ð ð �Yñ ô ð ð.ð .ð .ð .ð .˜9ñ .ô .ð .ð 1ð 1ð 1ð 1ð 1�yñ 1ô 1ð 1ð 1ð 1r"   