
    d                        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	 erd dl
mZ  G d d	          Z G d
 de	          ZdS )    )annotationsN)TYPE_CHECKING)Any)CleoValueError)Question)IOc                      e Zd ZddZdd	Zd
S )SelectChoiceValidatorquestionChoiceQuestionreturnNonec                ,    || _         |j        | _        dS )z
        Constructor.
        N)	_questionchoices_values)selfr   s     [/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/cleo/ui/choice_question.py__init__zSelectChoiceValidator.__init__   s     "'    selected	str | intstr | list[str] | Nonec                   t          |t                    rt          |          }|dS | j                                        rm|                    dd          }t          j        d|          s,t          | j        j	        
                    |                    |                    d          }n|g}g }|D ](}g }t          | j                  D ] \  }}||k    r|                    |           !t          |          dk    r0t          dd                    d	 |D                        d
          || j        v r|}	n|                                rJdt          |          cxk    rt          | j                  k     rn n| j        t          |                   }	n,t          | j        j	        
                    |                    |                    |	           *| j                                        r|S |d         S )z$
        Validate a choice.
        N  z$^[a-zA-Z0-9_-]+(?:,[a-zA-Z0-9_-]+)*$,   z9The provided answer is ambiguous. Value should be one of z or c              3  4   K   | ]}t          |          V  d S Nstr).0rs     r   	<genexpr>z1SelectChoiceValidator.validate.<locals>.<genexpr>8   s(      9R9RQ#a&&9R9R9R9R9R9Rr   .r   )
isinstanceintr"   r   supports_multiple_choicesreplacerematchr   error_messageformatsplit	enumerater   appendlenjoinisdigit)
r   r   	_selectedselected_choicesmultiselect_choicesvalueresultskeychoiceresults
             r   validatezSelectChoiceValidator.validate   s"   
 h$$ 	%8}}H4>3355 	* ((b11I8BINN T$T^%A%H%H%R%RSSS(s33 (z % 	/ 	/EG(66 ( (VU??NN3'''7||a$V.4kk9R9R'9R9R9R.R.RV V V  
 $$ QQ#e**%H%H%H%Hs4<7H7H%H%H%H%H%Hc%jj1$T^%A%H%H%O%OPPP&&v....>3355 	'&&"1%%r   N)r   r   r   r   )r   r   r   r   )__name__
__module____qualname__r   r=    r   r   r
   r
      s<        ( ( ( (/& /& /& /& /& /&r   r
   c                  x     e Zd ZdZ	 dd fdZedd            Zedd            ZddZddZ	ddZ
ddZ xZS )r   z#
    Multiple choice question.
    Nr   r"   r   	list[str]default
Any | Noner   r   c                    t                                          ||           d| _        || _        t	          |           j        | _        || _        d| _        d| _	        d S )NFz > zValue "{}" is invalid)
superr   _multi_select_choicesr
   r=   
_validator_autocomplete_values_prompt_error_message)r   r   r   rD   	__class__s       r   r   zChoiceQuestion.__init__O   s]     	7+++"/55>$+!5r   c                    | j         S r    rM   r   s    r   r-   zChoiceQuestion.error_message[   s    ""r   c                    | j         S r    )rI   rQ   s    r   r   zChoiceQuestion.choices_   s
    }r   boolc                    | j         S r    rH   rQ   s    r   r)   z(ChoiceQuestion.supports_multiple_choicesc   s    !!r   multi_selectc                    || _         d S r    rU   )r   rV   s     r   set_multi_selectzChoiceQuestion.set_multi_selectf   s    )r   messagec                    || _         d S r    rP   )r   rY   s     r   set_error_messagez ChoiceQuestion.set_error_messagei   s    %r   ior   c           	        | j         }| j        }|d| d}n| j        rx| j        }|                    d          }t          |          D ]/\  }}|t          |                                                   ||<   0d| dd                    |           d}n#| j        }d| d|t          |                    d}t          | j                  dk    r9t          t          t          d	 t          | j                  D                        }nd}|g}t          | j                  D ]$\  }	}|                    d
|	d| d|            %|                    d                    |                     | j        }|                    |           dS )z.
        Outputs the question prompt.
        Nz
<question>z</question>: r   z</question> [<comment>z, z</comment>]:r   c                2    g | ]\  }}t          |          S rA   r!   )r#   k_s      r   
<listcomp>z0ChoiceQuestion._write_prompt.<locals>.<listcomp>   s"    "O"O"Oda3q66"O"O"Or   z [<comment>r   z</>] 
)r   _defaultrH   rI   r/   r0   r(   stripr3   r2   maxmapr1   write_error_linerL   write_error)
r   r\   rY   rD   r   ir8   widthmessagesr:   s
             r   _write_promptzChoiceQuestion._write_promptl   s    .-?97999GG 	mGmmC((G%g.. 9 95$S%7%78

>W > >!YYw//> > > G
 mGAW A A$S\\2A A A 
 t}!!S"O"Oi6N6N"O"O"OPPQEEE9#DM22 	F 	FJCOOD#DDDDDUDDEEEE
DIIh//000,
wr   r    )r   r"   r   rC   rD   rE   r   r   )r   r"   )r   rC   )r   rS   )rV   rS   r   r   )rY   r"   r   r   )r\   r   r   r   )r>   r?   r@   __doc__r   propertyr-   r   r)   rX   r[   rl   __classcell__)rN   s   @r   r   r   J   s         
 HL
6 
6 
6 
6 
6 
6 
6 # # # X#    X" " " "* * * *& & & &(  (  (  (  (  (  (  ( r   r   )
__future__r   r+   typingr   r   cleo.exceptionsr   cleo.ui.questionr   
cleo.io.ior   r
   r   rA   r   r   <module>ru      s    " " " " " " 				                   * * * * * * % % % % % %  7& 7& 7& 7& 7& 7& 7& 7&tJ  J  J  J  J X J  J  J  J  J r   