
    +hb                         d dl Z d dlmZ d dlmZ d dlmZ dZ G d de      Z G d d	e      Z	 G d
 de	      Z
 G d de	      Zy)    N)widgets)Field)ValidationError)SelectFieldSelectMultipleField
RadioFieldc                   r     e Zd Z ej                         Z	 d fd	Zd Zd Zd Z	d Z
 G d de      Z xZS )	SelectFieldBasec                 <    t        |   ||fi | ||| _        y y N)super__init__option_widget)selflabel
validatorsr   kwargs	__class__s        I/var/www/html/venv/lib/python3.12/site-packages/wtforms/fields/choices.pyr   zSelectFieldBase.__init__   s*    
5f5$!.D %    c                     t               )z
        Provides data for choice widget rendering. Must return a sequence or
        iterable of (value, label, selected, render_kw) tuples.
        NotImplementedErrorr   s    r   iter_choiceszSelectFieldBase.iter_choices   s    
 "##r   c                      y)NF r   s    r   
has_groupszSelectFieldBase.has_groups%   s    r   c                     t               r   r   r   s    r   iter_groupszSelectFieldBase.iter_groups(   s    !##r   c              #     K   t        | j                  | j                  | j                  | j                  d | j
                        }t        | j                               D ]f  \  }}t        |      dk(  r|\  }}}}n|\  }}}i } | j                  d|d| j                  |fz  d||}|j                  d |       ||_        | h y w)N)widgetr   name	render_kw_form_meta   z%s-%d)r   idr   )dictr   r   r#   r$   meta	enumerater   len_Optionr(   processchecked)	r   optsichoicevaluer   r/   r$   opts	            r   __iter__zSelectFieldBase.__iter__+   s     %%nn))
 #4#4#4#67 	IAv6{a390ugy(.%ug	$,, 477A, 6:>BKC KKe$!CKI	s   CC	c                       e Zd ZdZd Zy)SelectFieldBase._OptionFc                 ,    t        | j                        S r   )strdatar   s    r   _valuezSelectFieldBase._Option._valueE   s    tyy>!r   N)__name__
__module____qualname__r/   r;   r   r   r   r-   r7   B   s    	"r   r-   )NNN)r<   r=   r>   r   Optionr   r   r   r   r    r5   r   r-   __classcell__r   s   @r   r
   r
      s@    "GNN$M/$$."% " "r   r
   c                   v     e Zd Z ej                         Zddeddf fd	Zd Zd Z	d Z
d Zd Zd	 Zd
 Z xZS )r   NTc                     t        |   ||fi | || _        t        |      r |       }|*t	        |t
              r|n
t        |      | _        || _        y d | _        || _        y r   )	r   r   coercecallable
isinstancer)   listchoicesvalidate_choice)r   r   r   rD   rH   rI   r   r   s          r   r   zSelectField.__init__L   sf     	
5f5GiG&0$&?7T']DL  /  DL.r   c                    | j                   sg }ngt        | j                   t              rAt        t        j
                  j                  | j                   j                                     }n| j                   }| j                  |      S r   )	rH   rF   r)   rG   	itertoolschainfrom_iterablevalues_choices_generator)r   rH   s     r   r   zSelectField.iter_choices_   s\    ||Gd+9??889L9L9NOPGllG&&w//r   c                 6    t        | j                  t              S r   )rF   rH   r)   r   s    r   r   zSelectField.has_groupsi   s    $,,--r   c              #      K   t        | j                  t              r8| j                  j                         D ]  \  }}|| j	                  |      f  y y wr   )rF   rH   r)   itemsrO   )r   r   rH   s      r   r    zSelectField.iter_groupsl   sQ     dllD)"&,,"4"4"6 @wd55g>??@ *s   AAc              #      K   |sg }n(t        |d   t        t        f      r|}nt        ||      }|D ];  ^}}}t	        |      r|d   ni }||| j                  |      | j                  k(  |f = y wNr   )rF   rG   tuplezipr,   rD   r:   )r   rH   _choicesr3   r   
other_argsr$   s          r   rO   zSelectField._choices_generatorq   s}     H
T5M2H 7G,H)1 	M%E5:),Z
1bI%U!3tyy!@)LL	Ms   A/A1c                 ~    	 || j                  |      | _        y d | _        y # t        t        f$ r
 d | _        Y y w xY wr   )rD   r:   
ValueError	TypeErrorr   r3   s     r   process_datazSelectField.process_data   s=    	.3.?E*DITDII& 	DI	s   # # <<c                     |sy 	 | j                  |d         | _        y # t        $ r }t        | j                  d            |d }~ww xY w)Nr   z!Invalid Choice: could not coerce.)rD   r:   rZ   gettextr   	valuelistexcs      r   process_formdatazSelectField.process_formdata   sL    	YIaL1DI 	YT\\*MNOUXX	Ys    	AAAc                     | j                   sy | j                  t        | j                  d            | j	                         D ]
  ^}}}}|s
 y  t        | j                  d            )NChoices cannot be None.zNot a valid choice.)rI   rH   r[   r_   r   r   )r   form_matchs       r   pre_validatezSelectField.pre_validate   sl    ##<<DLL)BCDD#002 	GOAq%!	G "$,,/D"EFFr   )r<   r=   r>   r   Selectr"   r9   r   r   r   r    rO   r]   rc   ri   r@   rA   s   @r   r   r   I   sN    W^^F /&0.@
MYGr   r   c                   N    e Zd ZdZ ej
                  d      Zd Zd Zd Z	d Z
y)	r   z
    No different from a normal select field, except this one can take (and
    validate) multiple choices.  You'll need to specify the HTML `size`
    attribute to the select field when rendering.
    T)multiplec              #     K   |sg }n(t        |d   t        t        f      r|}nt        ||      }|D ]L  ^}}}| j                  d uxr | j                  |      | j                  v }t        |      r|d   ni }||||f N y wrT   )rF   rG   rU   rV   r:   rD   r,   )r   rH   rW   r3   r   argsselectedr$   s           r   rO   z&SelectMultipleField._choices_generator   s     H
T5M2H 7G,H#+ 	6E54yy,PU1Ctyy1PH#&t9Q"I%955	6s   B Bc                 r     	 t         fd|D               _        y # t        t        f$ r
 d  _        Y y w xY w)Nc              3   @   K   | ]  }j                  |        y wr   rD   ).0vr   s     r   	<genexpr>z3SelectMultipleField.process_data.<locals>.<genexpr>   s     ;T[[^;   )rG   r:   rZ   r[   r\   s   ` r   r]   z SelectMultipleField.process_data   s5    	;U;;DII& 	DI	s    66c                      	 t         fd|D               _        y # t        $ r }t         j                  d            |d }~ww xY w)Nc              3   @   K   | ]  }j                  |        y wr   rr   )rs   xr   s     r   ru   z7SelectMultipleField.process_formdata.<locals>.<genexpr>   s     ?T[[^?rv   z@Invalid choice(s): one or more data inputs could not be coerced.)rG   r:   rZ   r_   r`   s   `  r   rc   z$SelectMultipleField.process_formdata   sK    	?Y??DI 	V 		s    	AAAc           	         | j                   r| j                  sy | j                  t        | j	                  d            | j                         D ch c]  }|d   	 c}t        fd| j                  D              rot        | j                        z
  D cg c]  }t        |       }}t        | j                  ddt        |            t        dj                  |            z        y c c}w c c}w )Nre   r   c              3   &   K   | ]  }|v 
 y wr   r   )rs   d
acceptables     r   ru   z3SelectMultipleField.pre_validate.<locals>.<genexpr>   s     6qq
"6s   z1'%(value)s' is not a valid choice for this field.z1'%(value)s' are not valid choices for this field.z', ')r3   )rI   r:   rH   r[   r_   r   anysetr9   r   ngettextr,   r)   join)r   rf   cr|   unacceptabler}   s        @r   ri   z SelectMultipleField.pre_validate   s    ##499<<DLL)BCDD$($5$5$78qad8
6DII66,/		NZ,GHqCFHLH!GG%
 V[[678  7 9Hs   C0C5N)r<   r=   r>   __doc__r   rj   r"   rO   r]   rc   ri   r   r   r   r   r      s-     W^^T*F6r   r   c                   X    e Zd ZdZ ej
                  d      Z ej                         Zy)r   z
    Like a SelectField, except displays a list of radio buttons.

    Iterating the field will produce subfields (each containing a label as
    well) in order to allow custom rendering of the individual radio fields.
    F)prefix_labelN)	r<   r=   r>   r   r   
ListWidgetr"   
RadioInputr   r   r   r   r   r      s+      WU3F&G&&(Mr   r   )rK   wtformsr   wtforms.fields.corer   wtforms.validatorsr   __all__r
   r   r   r   r   r   r   <module>r      sO      % .8"e 8"vQG/ QGh9+ 9x	) 	)r   