
    d                        d dl mZ d dlZd dl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 erd dlmZ eegef         Zeegef         Z G d	 d
          ZdS )    )annotationsN)TYPE_CHECKING)Any)Callable)Style)StreamOutput)IOc                      e Zd ZdZd+d,d	Zed-d
            Zed.d            Zed/d            Zed0d            Z	d1dZ
d2d3dZd4dZd5dZd6dZd7dZd7dZd8d Zd9d#Zd:d$Zd:d%Zd;d(Zd:d)Zd1d*ZdS )<Questionz5
    A question that will be asked in a Console.
    Nquestionstrdefaultr   returnNonec                    || _         || _        d | _        d| _        d| _        g | _        d | _        d | _        d| _        d S )NFTc                    | S N ss    T/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/cleo/ui/question.py<lambda>z#Question.__init__.<locals>.<lambda>#   s    q     c                    | S r   r   r   s    r   r   z#Question.__init__.<locals>.<lambda>$   s     r   zValue "{}" is invalid)		_question_default	_attempts_hidden_hidden_fallback_autocomplete_values
_validator_normalizer_error_message)selfr   r   s      r   __init__zQuestion.__init__   sO    !%) $/1!%0['2{5r   c                    | j         S r   )r   r$   s    r   r   zQuestion.question'   
    ~r   c                    | j         S r   )r   r'   s    r   r   zQuestion.default+   s
    }r   	list[str]c                    | j         S r   )r    r'   s    r   autocomplete_valueszQuestion.autocomplete_values/   s    ((r   
int | Nonec                    | j         S r   r   r'   s    r   max_attemptszQuestion.max_attempts3   r(   r   boolc                    | j         S r   )r   r'   s    r   	is_hiddenzQuestion.is_hidden7   s
    |r   Thiddenc                H    |du r| j         rt          d          || _        d S )NT/A hidden question cannot use the autocompleter.)r    RuntimeErrorr   )r$   r4   s     r   hidezQuestion.hide:   s,    T>>d7>PQQQr   r,   c                Z    |                                  rt          d          || _        d S )Nr6   )r3   r7   r    )r$   r,   s     r   set_autocomplete_valuesz Question.set_autocomplete_values@   s2    >> 	RPQQQ$7!!!r   attemptsc                    || _         d S r   r/   )r$   r;   s     r   set_max_attemptszQuestion.set_max_attemptsF   s    !r   	validator	Validatorc                    || _         d S r   )r!   )r$   r>   s     r   set_validatorzQuestion.set_validatorI   s    #r   ior	   c                p                                      s j        S                       fd          S )0
        Asks the question to the user.
        c                 .                                    S r   )_do_ask)rB   r$   s   r   r   zQuestion.ask.<locals>.<lambda>R   s    t||B/?/? r   )is_interactiver   _validate_attemptsr$   rB   s   ``r   askzQuestion.askL   sE       "" 	 <&&'?'?'?'?'?DDDr   c                   |                      |           | j        r|                                 s]d}|                                 r/	 |                     |          }n# t
          $ r | j        s Y nw xY w|s|                     |          }n|                     |          }t          |          dk    r| j
        }|                     |          S )rD   Nr   )_write_promptr    _has_stty_availabler3   _get_hidden_responser7   r   _read_from_input_autocompletelenr   r"   r$   rB   rets      r   rF   zQuestion._do_askT   s     	2( 	)0H0H0J0J 	)"C~~ 33B77CC#   0    0++B//$$R((Cs88q==-C$$$s   A A32A3c                B    |                     d| j         d           dS )z.
        Outputs the question prompt.
        z
<question>z</question> N)write_errorr   rI   s     r   rL   zQuestion._write_promptn   s*     	@DN@@@AAAAAr   error	Exceptionc                R    |                     dt          |           d           dS )z+
        Outputs an error message.
        z<error>z</error>N)write_error_liner   )r$   rB   rV   s      r   _write_errorzQuestion._write_errort   s0     	:c%jj:::;;;;;r   c                (   | j         }d}d}d}t          |          }t          |          }t          dg          }|j        j                            d|           t          j        ddg          	                                
                    d	          }	t          j        g d
           	 	 |                    d          }
|
dk    r[|dk    r |dk    r|dz  }|                    d           |dk    r!d}t          |          }t          |          }nd}|d|         }nA|
dk    rg|
|                    d          z  }
|
d         dk    s|
d         dk    r6|
d         dk    r|dk    rd}|dk    r||
d         dk    rdndz  }||z   |z  }nt          |
          dk     rd|
dv r^|dk    r:|dk    r4||         }|                    ||d                    t          |          }|
d	k    r|                    |
           nd}[|                    |
           ||
z  }|dz  }d}d}|D ]7}|                    |          r |t          |          k    r|dz  }|||dz
  <   8|                    d           |dk    rY|dk    rS|                    d           |                    d||         |d         z   dz              |                    d           -	 t          j        d|	 g           n# t          j        d|	 g           w xY w|S )z*
        Autocomplete a question.
         r   reverse)optionshlsttyz-g
)ra   z-icanonz-echoT   z[1DN   AB    )	rb   z[Kz7z<hl>z</hl>z8)r    listrQ   r   error_output	formatter	set_style
subprocesscheck_outputdecoderstripreadrU   ord
startswithcall)r$   rB   autocompleterS   iofsmatchesnum_matchesstyle	stty_modecvalues               r   rP   zQuestion._autocompletez   s}    0|$$'ll yk***
!++D%888+VTN;;BBDDKKDQQ	 	 < < <===L	6H,GGAJJ ;;"a''AFFQy111Avv "&|"4"4&)'ll&' bqb'CC&[[OA ts{{adckkQ43;;3"99"#C&!++$QqTS[[rra7*S0K?VVb[[L((&??sbyy")#,CNN3qrr7333 #CA99NN1---!&'NN1%%%1HCFA"#KC!- = = !++C00 =Q#e**__'1,K7<GK!O4 x(((??sbyyNN7+++NN6GCL,<#<w#FGGGNN7+++QH,V "> OV	^45555JOV	^45555
s   /H.K6 6Lc                ~    d}t          |j        t                    r|j        j        }t	          j        d|          S )z3
        Gets a hidden response from user.
        Nr\   )stream)
isinstancerl   r   r   getpass)r$   rB   r   s      r   rN   zQuestion._get_hidden_response   s<     bo|44 	,_+Fr&1111r   interviewerCallable[[], Any]c                    d}| j         }||rZ||                     ||           	 |                      |                      S # t          $ r}|}Y d}~nd}~ww xY w||dz  }|X|Z|sJ |)z'
        Validates an attempt.
        Nrc   )r   rZ   r!   rW   )r$   r   rB   rV   r;   es         r   rH   zQuestion._validate_attempts   s     >( !!"e,,,{{}}555    #A ( s   A 
AAAc                v    |                     d          }|st          d          |                                S )z"
        Read user input.
        i   Aborted)	read_liner7   striprR   s      r   rO   zQuestion._read_from_input   s9     ll4   	*y)))yy{{r   c                    t          t          j        d          5 }	 t          j        dg||          }n# t
          $ r d}Y nw xY wd d d            n# 1 swxY w Y   |dk    S )Nwra   )stdoutstderrrf   r   )openosdevnullro   rv   rW   )r$   r   	exit_codes      r   rM   zQuestion._has_stty_available
  s    "*c"" 	g&OVHWWUUU		   				 	 	 	 	 	 	 	 	 	 	 	 	 	 	 A~s1   A6AAAAAAAr   )r   r   r   r   r   r   )r   r   )r   r   )r   r*   )r   r-   )r   r1   )T)r4   r1   r   r   )r,   r*   r   r   )r;   r-   r   r   )r>   r?   r   r   )rB   r	   r   r   )rB   r	   r   r   )rB   r	   rV   rW   r   r   )rB   r	   r   r   )r   r   rB   r	   r   r   )__name__
__module____qualname____doc__r%   propertyr   r   r,   r0   r3   r8   r:   r=   rA   rJ   rF   rL   rZ   rP   rN   rH   rO   rM   r   r   r   r   r      s        
6 
6 
6 
6 
6    X    X ) ) ) X)    X       8 8 8 8" " " "$ $ $ $E E E E% % % %4B B B B< < < <d d d dL2 2 2 2   ,	 	 	 	     r   r   )
__future__r   r   r   ro   typingr   r   r   cleo.formatters.styler   cleo.io.outputs.stream_outputr   
cleo.io.ior	   r   r?   
Normalizerr   r   r   r   <module>r      s   " " " " " "  				                             ' ' ' ' ' ' 6 6 6 6 6 6  cUCZ 	seSj!
{ { { { { { { { { {r   