
    D6iY                     J    d dl m Z  d dlmZ d dlmZ ddlmZ  G d de      Zy)	    )copy)SelectField)ValidationError   )SelectWidgetc                   \     e Zd ZdZ e       Z fdZd Zed        Z	ed        Z
d Z xZS )r   a  
    Add support of ``optgroup``'s' to default WTForms' ``SelectField`` class.

    So, next choices would be supported as well::

        (
            ('Fruits', (
                ('apple', 'Apple'),
                ('peach', 'Peach'),
                ('pear', 'Pear')
            )),
            ('Vegetables', (
                ('cucumber', 'Cucumber'),
                ('potato', 'Potato'),
                ('tomato', 'Tomato'),
            ))
        )

    Also supports lazy choices (callables that return an iterable)
    c                     |j                  dd       }t        |      r t        |   |i | t	        |      | _        y t        |   |d|i| y )Nchoices)popcallablesuper__init__r   r
   )selfargskwargsr
   	__class__s       c/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/wtforms_components/fields/select.pyr   zSelectField.__init__!   sO    **Y-GGd-f-=DLGd>G>v>    c              #   p   K   | j                   D ]#  \  }}||| j                  | j                  fi f % yw)z
        We should update how choices are iter to make sure that value from
        internal list or tuple should be selected.
        N)concrete_choicescoercedata)r   valuelabels      r   iter_choiceszSelectField.iter_choices)   s=     
 !11 	?LE5%$++tyy!92>>	?s   46c                 d    t        | j                        r| j                         S | j                  S N)r   r
   )r   s    r   r   zSelectField.concrete_choices1   s$    DLL!<<>!||r   c                     g }| j                   D ]H  \  }}t        |t        t        f      r|D ]  \  }}|j	                  |        8|j	                  |       J |S r   )r   
isinstancelisttupleappend)r   valuesr   r   subvaluesublabels         r   choice_valueszSelectField.choice_values7   sc     11 	%LE5%$/*/ ,&HhMM(+, e$	% r   c                     | j                   }| j                  d|v s| j                  |v ryt        | j                  d            )zK
        Don't forget to validate also values from embedded lists.
         TzNot a valid choice)r&   r   r   gettext)r   formr#   s      r   pre_validatezSelectField.pre_validateB   sB     ##II",4993Fdll+?@AAr   )__name__
__module____qualname____doc__r   widgetr   r   propertyr   r&   r+   __classcell__)r   s   @r   r   r   	   sI    * ^F??  
  Br   r   N)r   wtformsr   _SelectFieldwtforms.validatorsr   widgetsr    r   r   <module>r8      s!     / . "AB, ABr   