
    dB                    |    d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ  G d	 d
          ZdS )    )annotationsN)Any)TextIO)shell_quote)CleoMissingArgumentsError)CleoValueError)
Definitionc                  <   e Zd ZdZd6d7dZed8d	            Zed8d
            Zed9d            Zed:d            Z	ed:d            Z
d;d<dZd=d<dZd>dZd?dZd?dZd@dAdZdBd Zd>d!ZdCd$ZdDd&ZdEd'ZdCd(ZdDd)ZdEd*ZdFd,ZdGd.Z	 dHdId3Z	 	 dJdKd4Zd>d5ZdS )LInputzJ
    This class is the base class for concrete Input implementations.
    N
definitionDefinition | NonereturnNonec                    |  d | _         i | _        i | _        d | _        |t	                      | _        d S |                     |           |                                  d S N)_stream_options
_arguments_interactiver	   _definitionbindvalidateselfr   s     X/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/cleo/io/inputs/input.py__init__zInput.__init__   s`    $#(**,)-)||DIIj!!!MMOOOOO    dict[str, Any]c                ,    i | j         j        | j        S r   )r   argument_defaultsr   r   s    r   	argumentszInput.arguments    s    H$"4HHHr   c                ,    i | j         j        | j        S r   )r   option_defaultsr   r!   s    r   optionszInput.options$   s    D$"2DdmDDr   r   c                    | j         S r   r   r!   s    r   streamzInput.stream(   s
    |r   
str | Nonec                    t                      )zR
        Returns the first argument from the raw parameters (not parsed).
        NotImplementedErrorr!   s    r   first_argumentzInput.first_argument,   s    
 "###r   c                    t                      r   r+   r!   s    r   script_namezInput.script_name3   s    !###r    lengthintdefaultstrc                b    |                                  s|S | j                            |          S )zM
        Reads the given amount of characters from the input stream.
        )is_interactiver   readr   r1   r3   s      r   r7   z
Input.read7   s3     ""$$ 	N|  (((r   c                b    |                                  s|S | j                            |          S )z5
        Reads a line from the input stream.
        )r6   r   readliner8   s      r   	read_linezInput.read_line@   s3     ""$$ 	N|$$V,,,r   c                8    | j                                          dS )z#
        Closes the input.
        N)r   closer!   s    r   r>   zInput.closeI   s     	r   boolc                    | j         j        S )z6
        Returns whether the input is closed.
        )r   closedr!   s    r   	is_closedzInput.is_closedO   s     |""r   c                "    | j         dn| j         S )NTr   r!   s    r   r6   zInput.is_interactiveU   s    (0ttd6GGr   Tinteractivec                    || _         d S r   rD   )r   rE   s     r   rE   zInput.interactiveX   s    'r   r	   c                X    i | _         i | _        || _        |                                  dS )zm
        Binds the current Input instance with
        the given definition's arguments and options.
        N)r   r   r   _parser   s     r   r   z
Input.bind[   s+    
 %r   c                    g }| j         j        D ]>}|j        | j        vr.|                                r|                    |j                   ?|r&t          dd                    |           d          d S )Nz Not enough arguments (missing: "z, z"))r   r"   namer   is_requiredappendr   join)r   missing_argumentsarguments      r   r   zInput.validatef   s    (2 	8 	8H}DO338L8L8N8N3!((777 	+S499=N3O3OSSS  	 	r   rJ   r   c                    | j                             |          st          d| d          || j        v r| j        |         S | j                             |          j        S NzThe argument "" does not exist)r   has_argumentr   r   rO   r3   r   rJ   s     r   rO   zInput.argumentr   sj    ,,T22 	J !H$!H!H!HIII4?""?4((((..66r   valuec                t    | j                             |          st          d| d          || j        |<   d S rQ   )r   rS   r   r   r   rJ   rU   s      r   set_argumentzInput.set_argument{   sH    ,,T22 	J !H$!H!H!HIII %r   c                6    | j                             |          S r   )r   rS   rT   s     r   rS   zInput.has_argument   s    ,,T222r   c                    | j                             |          st          d| d          || j        v r| j        |         S | j                             |          j        S NzThe option "--rR   )r   
has_optionr   r   optionr3   rT   s     r   r]   zInput.option   sj    **400 	J !H$!H!H!HIII4=  =&&&&t,,44r   c                t    | j                             |          st          d| d          || j        |<   d S r[   )r   r\   r   r   rW   s      r   
set_optionzInput.set_option   sH    **400 	J !H$!H!H!HIII#dr   c                6    | j                             |          S r   )r   r\   rT   s     r   r\   zInput.has_option   s    **4000r   tokenc                N    t          j        d|          r|S t          |          S )Nz^[\w-]+$)rematchr   )r   ra   s     r   escape_tokenzInput.escape_token   s)    8K'' 	L5!!!r   r(   c                    || _         d S r   r'   )r   r(   s     r   
set_streamzInput.set_stream   s    r   Fvaluesstr | list[str]only_paramsc                    t                      )zR
        Returns true if the raw parameters (not parsed) contain a value.
        r+   )r   rh   rj   s      r   has_parameter_optionzInput.has_parameter_option   s     "###r   c                    t                      )zA
        Returns the value of a raw option (not parsed).
        r+   )r   rh   r3   rj   s       r   parameter_optionzInput.parameter_option   s     "###r   c                    t                      r   r+   r!   s    r   rH   zInput._parse   s    !###r   r   )r   r   r   r   )r   r   )r   r   )r   r)   )r0   )r1   r2   r3   r4   r   r4   )r9   r0   )r   r   )r   r?   )T)rE   r?   r   r   )r   r	   r   r   )rJ   r4   r   r   )rJ   r4   rU   r   r   r   )rJ   r4   r   r?   )ra   r4   r   r4   )r(   r   r   r   )F)rh   ri   rj   r?   r   r?   )FF)rh   ri   r3   r   rj   r?   r   r   )__name__
__module____qualname____doc__r   propertyr"   r%   r(   r-   r/   r7   r<   r>   rB   r6   rE   r   r   rO   rX   rS   r]   r_   r\   re   rg   rl   rn   rH    r   r   r   r      s             I I I XI E E E XE    X $ $ $ X$ $ $ $ X$) ) ) ) )- - - - -   # # # #H H H H( ( ( ( (	 	 	 	
 
 
 
7 7 7 7& & & &3 3 3 35 5 5 5$ $ $ $1 1 1 1" " " "    <A$ $ $ $ $ !		$ 	$ 	$ 	$ 	$$ $ $ $ $ $r   r   )
__future__r   rc   typingr   r   cleo._compatr   cleo.exceptionsr   r   cleo.io.inputs.definitionr	   r   ru   r   r   <module>r{      s    " " " " " " 				             $ $ $ $ $ $ 5 5 5 5 5 5 * * * * * * 0 0 0 0 0 0e$ e$ e$ e$ e$ e$ e$ e$ e$ e$r   