
    恕f                         d dl Z d dlmZ d dlmZmZmZ 	 d dlmZ d dlmZ ddlmZmZmZ  G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Zy# e	$ r	 d dl
mZ Y Uw xY w)    N)ValidationError)	FieldList	FormFieldSelectFieldBase)_unset_value)unset_value)	iteritems   )InlineFieldListWidgetInlineFormWidgetAjaxSelect2Widgetc                   h     e Zd Z e       Z fdZd Zd Zedf fd	Z	 e
       fdZd Zd Z xZS )	InlineFieldListc                 ,    t        t        | 
  |i | y N)superr   __init__)selfargskwargs	__class__s      W/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/flask_admin/model/fields.pyr   zInlineFieldList.__init__   s    ot-t>v>    c                 (   t        | dd       }|r| j                  j                  d d|      }n| j                  j                  d d      }t        |t              rd|_        |j                  d         | j                  | f|| j                  d|S )Nmeta )formname_meta)r   r   )templatecheck)	getattrunbound_fieldbind
isinstancer   	separatorprocesswidgetdisplay_row_controls)r   r   r   r    s       r   __call__zInlineFieldList.__call__   s    tVT*))..Dr.NH))..Dr.BHh	*!#Ht{{4 %$,!%!:!:% $% 	%r   c                      yNT r   fields     r   r)   z$InlineFieldList.display_row_controls(   s    r   Nc                     t         t        |   ||      }|r)| j                  D ]  }d|j                  z  }||v |_         |S )Nzdel-%s)r   r   r'   entriesid_should_delete)r   formdatadataextra_filtersresfkeyr   s          r   r'   zInlineFieldList.process+   sQ    OT2d \\ 3o#&(? 3 
r   c                 X   g | _         | j                  D ]K  }| j                  |      r|j                  |      r'| j                   j	                  |j                          M t        j                  | j                  |      }| j                  ||       t        | j                         dk(  S )z
            Validate this FieldList.

            Note that FieldList validation differs from normal field validation in
            that FieldList validates all its enclosed fields first before running any
            of its own validators.
        r   )
errorsr1   should_deletevalidateappend	itertoolschain
validators_run_validation_chainlen)r   r   extra_validatorssubfieldr@   s        r   r=   zInlineFieldList.validate7   s       	4H%%h/8I8I$8O""8??3	4 1AB""4/4;;1$$r   c                     t        |dd      S )Nr3   F)r"   r.   s     r   r<   zInlineFieldList.should_deleteK   s    u.66r   c                    t        ||d       }	 t        |      }t        j                  |t        j
                  d             }t        t        d      t        fi       }g }t        | j                  |      D ]R  \  }}	| j                  |      r |       }
|	|
_        |j                  |
d       |j                  |
j                         T t        |||       y # t        $ r t        g       }Y w xY w)N_faker5   )r"   iter	TypeErrorr?   r@   repeattypestrobjectzipr1   r<   r5   populate_objr>   setattr)r   objr   valuesivalues
candidatesrH   outputr/   r5   fake_objs              r   rP   zInlineFieldList.populate_objN   s    dD)	6lG __Wi.>.>t.DE
S\F:r2t||Z8 	-KE4%%e, 7 $""8V4hmm,	- 	T6"  	2hG	s   C C0/C0)__name__
__module____qualname__r   r(   r   r*   r)   r   r'   tupler=   r<   rP   __classcell__r   s   @r   r   r      s<    "$F?%$ &1 
 /4g %(7#r   r   c                       e Zd ZdZ e       Zy)InlineFormFieldz9
        Inline version of the ``FormField`` widget.
    N)rX   rY   rZ   __doc__r   r(   r-   r   r   r_   r_   c   s     Fr   r_   c                   >     e Zd ZdZ e       Zd fd	Zd Zd Z xZ	S )InlineModelFormFieldz
        Customized ``FormField``.

        Excludes model primary key from the `populate_obj` and
        handles `should_delete` flag.
    c                 J    t        t        | 
  |fi | || _        || _        y r   )r   rb   r   _pk	form_opts)r   
form_classpkre   r   r   s        r   r   zInlineModelFormField.__init__s   s&    "D2:HH"r   c                      t         j                  t        t        f      rt         fd j                  D              S t	         j
                   j                        j                  S )Nc              3   ^   K   | ]$  }t        j                  |      j                   & y wr   )r"   r   r5   ).0rg   r   s     r   	<genexpr>z.InlineModelFormField.get_pk.<locals>.<genexpr>|   s"     HB/44Hs   *-)r%   rd   r[   listr"   r   r5   )r   s   `r   get_pkzInlineModelFormField.get_pky   sE    dhh.HtxxHHHtyy$((+000r   c                     t        | j                  j                        D ]'  \  }}|| j                  k7  s|j	                  ||       ) y r   )r	   r   _fieldsrd   rP   )r   rR   r   r/   s       r   rP   z!InlineModelFormField.populate_obj   s@    $TYY%6%67 	.KD%txx""3-	.r   r   )
rX   rY   rZ   r`   r   r(   r   rm   rP   r\   r]   s   @r   rb   rb   j   s!     F#1.r   rb   c                   f     e Zd ZdZ e       ZdZd	 fd	Zd Zd Z	 e
ee	      Zd Zd Zd Z xZS )
AjaxSelectFieldz%
        Ajax Model Select Field
    ,c                 Z    t        t        | 
  ||fi | || _        || _        || _        y r   )r   rq   r   loaderallow_blank
blank_text)r   rt   labelrA   ru   rv   r   r   s          r   r   zAjaxSelectField.__init__   s/    ot-eZJ6J&$r   c                     | j                   r8| j                  j                  | j                         }|| j                  |       | j                  S r   )	_formdatart   get_one	_set_data_data)r   models     r   	_get_datazAjaxSelectField._get_data   s=    >>KK''7E u%zzr   c                      || _         d | _        y r   r|   ry   r   r5   s     r   r{   zAjaxSelectField._set_data       
r   c                 b    | j                   j                  | j                        }|d   |d   dfS )Nr   r
   T)rt   formatr5   )r   itemvalues      r   _format_itemzAjaxSelectField._format_item   s/    ""499-a%(D))r   c                 d    |r.| j                   r|d   dk(  rd | _        y d | _        |d   | _        y y )Nr   __None)ru   r5   r|   ry   )r   	valuelists     r   process_formdataz AjaxSelectField.process_formdata   s7    IaLI$= 	!
!*1 r   c                 j    | j                   s'| j                  t        | j                  d            y y NzNot a valid choice)ru   r5   r   gettextr   r   s     r   pre_validatezAjaxSelectField.pre_validate   s1    DII$5!$,,/D"EFF %6r   )NNFr   )rX   rY   rZ   r`   r   r(   r&   r   r~   r{   propertyr5   r   r   r   r\   r]   s   @r   rq   rq      sD      FI% Iy)D*.Gr   rq   c                   `     e Zd ZdZ ed      Zd	 fd	Zd Zd Z e	ee      Z
d Zd Z xZS )
AjaxSelectMultipleFieldz4
        Ajax-enabled model multi-select field.
    T)multiplec                 L    |g }t        t        | 
  |||fd|i| d| _        y )NdefaultF)r   r   r   _invalid_formdata)r   rt   rw   rA   r   r   r   s         r   r   z AjaxSelectMultipleField.__init__   s5    ?G%t5feZkY`kdjk!&r   c                     | j                   }|rTg }|D ]<  }|r| j                  j                  |      nd }|r|j                  |       6d| _        > | j                  |       | j                  S r,   )ry   rt   rz   r>   r   r{   r|   )r   r4   r5   r   r}   s        r   r~   z!AjaxSelectMultipleField._get_data   sk    >>D ! 259++D1tKK&-1D*2 NN4 zzr   c                      || _         d | _        y r   r   r   s     r   r{   z!AjaxSelectMultipleField._set_data   r   r   c                     t               | _        |D ]=  }|j                  | j                        D ]  }| j                  j	                  |        ? y r   )setry   splitr&   add)r   r   r/   ns       r   r   z(AjaxSelectMultipleField.process_formdata   sH     	&E[[0 &""1%&	&r   c                 P    | j                   rt        | j                  d            y r   )r   r   r   r   s     r   r   z$AjaxSelectMultipleField.pre_validate   s%    !!!$,,/D"EFF "r   )NNN)rX   rY   rZ   r`   r   r(   r   r~   r{   r   r5   r   r   r\   r]   s   @r   r   r      s<     -F'$ Iy)D&Gr   r   )r?   wtforms.validatorsr   wtforms.fieldsr   r   r   r   r   ImportErrorwtforms.utilsflask_admin._compatr	   widgetsr   r   r   r   r_   rb   rq   r   r-   r   r   <module>r      s     . @ @*: *) )P#i P#f i  .9 .8,Go ,G^.Go .G[  *)*s   A$ $A21A2