
    tni                        d dl mZ d dlmZmZmZmZ ddlmZ ddl	m
Z
mZ erddlmZ  G d de          Z G d	 d
ee          ZdS )    )annotations)TYPE_CHECKINGAnyOptionalProtocol   )TextInputHandler)CursorOffsetElement)	BaseStylec                      e Zd ZdZddZdS )	Validatora  Protocol for validators that can validate input values.

    Any object with a validate_python method can be used as a validator.
    This includes Pydantic's TypeAdapter or custom validators.

    Example with Pydantic TypeAdapter:
        >>> from pydantic import TypeAdapter
        >>> validator = TypeAdapter(int)
        >>> input_field = Input(validator=validator)

    Example with custom validator:
        >>> class MyValidator:
        ...     def validate_python(self, value):
        ...         if not value.startswith("x"):
        ...             raise ValueError("Must start with x")
        ...         return value
        >>> input_field = Input(validator=MyValidator())
    valuer   returnc                    dS )zValidate a Python value and return the validated result.

        Args:
            value: The value to validate

        Returns:
            The validated value

        Raises:
            ValidationError: If validation fails
        N )selfr   s     O/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/rich_toolkit/input.pyvalidate_pythonzValidator.validate_python!   s	     	    N)r   r   r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r      s2         &     r   r   c                       e Zd ZU dZded<   	 	 	 	 	 	 	 	 	 	 	 d!d" fdZed#d            Zed$d            Zed%d            Z	ed&d            Z
d Zd Zed#d            Zd#d Z xZS )'InputNOptional[str]labelTFplaceholderdefaultdefault_as_placeholderboolrequiredrequired_messagepasswordinlinenamestyleOptional[BaseStyle]	validatorOptional[Validator]metadatar   c                ,   |	| _         || _        || _        || _        || _        || _        || _        || _        d| _        d | _	        || _
        d | _        || _        t          j        | |
|           t                                                       d S )N )r(   r,   )r'   r   _placeholderr    r!   r#   r%   r&   textvalidr$   _validation_message
_validatorr   __init__super)r   r   r   r    r!   r#   r$   r%   r&   r'   r(   r*   r,   	__class__s                r   r4   zInput.__init__3   s     	
'&<#  	
 026 /8UX>>>>r   r   strc                >    | j         r| j        r| j        S | j        pdS Nr.   )r!   r    r/   r   s    r   r   zInput.placeholderT   s,    & 	 4< 	 < &B&r   c                4    | j         r| j         S | j        sJ d S N)r2   r1   r:   s    r   validation_messagezInput.validation_message[   s)    # 	,++ztr   r
   c                    | j         rdnd}d}| j         r| j        rt          | j                  dz   }t          || j        |z             S )Nr      r   )topleft)r&   r   lenr
   cursor_left)r   r@   left_offsets      r   cursor_offsetzInput.cursor_offsetd   sW    ;%aaA; 	.4: 	.dj//A-K$*:[*HIIIIr   c                    dS )NTr   r:   s    r   should_show_cursorzInput.should_show_cursoro   s    tr   c                .    |                                   d S r<   )on_validater:   s    r   on_blurzInput.on_blurs   s    r   c                   | j                                         }|s| j        rd| _        | j        pd| _        d S | j        roddlm} 	 | j        	                    |           nM# |$ rE}d| _        |
                                d                             dd          | _        Y d }~d S d }~ww xY wd | _        d| _        d S )NFzThis field is requiredr   )ValidationErrormsgzValidation failedT)r   stripr#   r1   r$   r2   r3   pydanticrL   r   errorsget)r   r   rL   es       r   rI   zInput.on_validatev   s    
  "" 	 	DJ'+'<'X@XD$F? 	000000//6666"   "
 ,-88::a=+<+<UDW+X+X( $( 


s   A# #B-(:B((B-c                "    | j         p| j        pdS r9   )r0   r    r:   s    r   r   zInput.value   s    y.DL.B.r   c                v    ddl m}  || j                  }| g|_        |                                 | j        S )Nr   )	Container)r(   )	containerrU   r(   elementsrunr   )r   rU   rV   s      r   askz	Input.ask   sG    ((((((IDJ///	"V	zr   )NNNTFNFFNNN)r   r   r   r   r    r   r!   r"   r#   r"   r$   r   r%   r"   r&   r"   r'   r   r(   r)   r*   r+   r,   r   )r   r7   )r   r   )r   r
   )r   r"   )r   r   r   r   __annotations__r4   propertyr   r=   rE   rG   rJ   rI   r   rY   __classcell__)r6   s   @r   r   r   0   sO        E  $%)!%'+*."%))-      B ' ' ' X'    X J J J XJ    X    2 / / / X/	 	 	 	 	 	 	 	r   r   N)
__future__r   typingr   r   r   r   _input_handlerr	   elementr
   r   styles.baser   r   r   r   r   r   <module>rb      s    " " " " " " 9 9 9 9 9 9 9 9 9 9 9 9 , , , , , , * * * * * * * * '&&&&&&               Fl l l l lg l l l l lr   