
    恕f;                     0   d dl mZ d dlmZ d dl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 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 G d de      Z G d de      Zy)    )Markup)string_types)helpersc                   8    e Zd ZdZd Zd Zed        Zdi fdZy)BaseRulezV
        Base form rule. All form formatting rules should derive from `BaseRule`.
    c                      d | _         d | _        y Nparentrule_setselfs    U/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/flask_admin/form/rules.py__init__zBaseRule.__init__   s        c                 "    || _         || _        | S )z
            Configure rule and assign to rule set.

            :param rule_set:
                Rule set
            :param parent:
                Parent rule (if any)
        r
   )r   r   r   s      r   	configurezBaseRule.configure   s      r   c                     g S )zB
            A list of visible fields for the given rule.
         r   s    r   visible_fieldszBaseRule.visible_fields   s	    
 	r   Nc                     t               )a  
            Render rule.

            :param form:
                Form object
            :param form_opts:
                Form options
            :param field_args:
                Optional arguments that should be passed to template or the field
        )NotImplementedErrorr   form	form_opts
field_argss       r   __call__zBaseRule.__call__#   s     "##r   )	__name__
__module____qualname____doc__r   r   propertyr   r   r   r   r   r   r      s1       (, $r   r   c                   T     e Zd ZdZg df fd	Z fdZed        Zd Zdi fdZ	 xZ
S )	
NestedRulezC
        Nested rule. Can contain child rules and render them.
     c                 X    t         t        |           t        |      | _        || _        y)z
            Constructor.

            :param rules:
                Child rule list
            :param separator:
                Default separator between rules when rendering them.
        N)superr$   r   listrules	separator)r   r)   r*   	__class__s      r   r   zNestedRule.__init__5   s$     	j$(*%[
"r   c                 n    |j                  | j                  |       | _        t        t        |   ||      S z
            Configure rule.

            :param rule_set:
                Rule set
            :param parent:
                Parent rule (if any)
        )configure_rulesr)   r'   r$   r   r   r   r   r+   s      r   r   zNestedRule.configureB   s1     --djj$?
Z06BBr   c                 p    g }| j                   D ]$  }|j                  D ]  }|j                  |        & |S )z@
            Return visible fields for all child rules.
        r)   r   appendr   r   rulefields       r   r   zNestedRule.visible_fieldsN   sG    
 JJ 	-D,, -%%e,-	- r   c                     | j                   S )z#
            Return rules.
        r)   r   s    r   __iter__zNestedRule.__iter__Y   s     zzr   Nc                     g }| j                   D ]  }|j                   ||||              t        | j                  j	                  |            S )a  
            Render all children.

            :param form:
                Form object
            :param form_opts:
                Form options
            :param field_args:
                Optional arguments that should be passed to template or the field
        )r)   r2   r   r*   join)r   r   r   r   resultrs         r   r   zNestedRule.__call___   sM      	:AMM!D)Z89	: dnn))&122r   )r   r   r    r!   r   r   r"   r   r8   r   __classcell__r+   s   @r   r$   r$   1   s?      2 #
C   (, 3r   r$   c                   0     e Zd ZdZd fd	Zdi fdZ xZS )Textz8
        Render text (or HTML snippet) from string.
    c                 F    t         t        |           || _        || _        y)z
            Constructor.

            :param text:
                Text to render
            :param escape:
                Should text be escaped or not. Default is `True`.
        N)r'   r@   r   textescape)r   rB   rC   r+   s      r   r   zText.__init__v   s      	dD"$	r   Nc                 \    | j                   r| j                  S t        | j                        S r	   )rC   rB   r   r   s       r   r   zText.__call__   s"    ;;99dii  r   )T)r   r   r    r!   r   r   r=   r>   s   @r   r@   r@   r   s     (, !r   r@   c                   "     e Zd ZdZ fdZ xZS )HTMLzD
        Shortcut for `Text` rule with `escape` set to `False`.
    c                 0    t         t        |   |d       y )NF)rC   )r'   rF   r   )r   htmlr+   s     r   r   zHTML.__init__   s    dD"4"6r   r   r   r    r!   r   r=   r>   s   @r   rF   rF      s    7 7r   rF   c                   4     e Zd ZdZ fdZd Zdi fdZ xZS )MacrozC
        Render macro by its name from current Jinja2 context.
    c                 F    t         t        |           || _        || _        y)z
            Constructor.

            :param macro_name:
                Macro name
            :param kwargs:
                Default macro parameters
        N)r'   rK   r   
macro_namedefault_args)r   rM   kwargsr+   s      r   r   zMacro.__init__   s!     	eT#%$"r   c                     |j                  d      }	 |j                  |d         }|sy|dd D ]  }t	        ||d      }|r|c S  |S # t        $ r t        d      w xY w)z
            Resolve macro in a Jinja2 context

            :param context:
                Jinja2 context
            :param name:
                Macro name. May be full path (with dots)
        .r   zAYour template is missing "{% set render_ctx = h.resolve_ctx() %}"N   )splitresolveAttributeError	Exceptiongetattr)r   contextnamepartsr5   ps         r   _resolvezMacro._resolve   s     

3	HOOE!H-E
 qr 	AE1d+E		   	H G H H	Hs   A	 	ANc                     t        j                         }| j                  || j                        }|st	        d| j                  z        t        | j                        }|j                  |        |di |S )z
            Render macro rule.

            :param form:
                Form object
            :param form_opts:
                Form options
            :param field_args:
                Optional arguments that should be passed to the macro
        z(Cannot find macro %s in current context.r   )r   get_render_ctxr\   rM   
ValueErrordictrN   update)r   r   r   r   rX   macrooptss          r   r   zMacro.__call__   sf     ((*gt7G$//YZZD%%&J}t}r   )r   r   r    r!   r   r\   r   r=   r>   s   @r   rK   rK      s    #8 (, r   rK   c                   L     e Zd ZdZ fdZ fdZed        Zdi f fd	Z xZ	S )	Containerz1
        Render container around child rule.
    c                 <    t        t        | 
  |fi | || _        y)a   
            Constructor.

            :param macro_name:
                Macro name that will be used as a container
            :param child_rule:
                Child rule to be rendered inside of container
            :param kwargs:
                Container macro arguments
        N)r'   re   r   
child_rule)r   rM   rg   rO   r+   s       r   r   zContainer.__init__   s      	i'
=f=$r   c                 d    | j                   j                  ||        t        t        |   ||      S r-   )rg   r   r'   re   r/   s      r   r   zContainer.configure   s-     	!!(D1Y/&AAr   c                 .    | j                   j                  S r	   )rg   r   r   s    r   r   zContainer.visible_fields   s    ---r   Nc                      t        j                          fd}t        |      }||d<   t        t           |      S )a	  
            Render container.

            :param form:
                Form object
            :param form_opts:
                Form options
            :param field_args:
                Optional arguments that should be passed to template or the field
        c                  @    j                  j                  |       S r	   )callrg   )rO   rX   r   r   r   s    r   callerz"Container.__call__.<locals>.caller  s    <<y&IIr   rm   )r   r^   r`   r'   re   r   )r   r   r   r   rm   argsrX   r+   s   ```   @r   r   zContainer.__call__   sD     ((*	J JXY.tYEEr   )
r   r   r    r!   r   r   r"   r   r   r=   r>   s   @r   re   re      s:    %
B . . (, F Fr   re   c                   D     e Zd ZdZd fd	Zed        Zdi f fd	Z xZS )Fieldz
        Form field rule.
    c                 :    t         t        |   |       || _        y)z
            Constructor.

            :param field_name:
                Field name to render
            :param render_field:
                Macro that will be used to render the field.
        N)r'   rp   r   
field_name)r   rr   render_fieldr+   s      r   r   zField.__init__  s     	eT#L1$r   c                     | j                   gS r	   )rr   r   s    r   r   zField.visible_fields  s      r   Nc                 6   t        || j                  d      }|t        d|d| j                        i }|r5|j                  |j                  j                  | j                  i              |j                  |       |||d}t        t        | #  |||      S )  
            Render field.

            :param form:
                Form object
            :param form_opts:
                Form options
            :param field_args:
                Optional arguments that should be passed to template or the field
        NForm  does not have field r   r5   rO   )	rW   rr   r_   ra   widget_argsgetr'   rp   r   )r   r   r   r   r5   rc   paramsr+   s          r   r   zField.__call__#  s     doot4=tWXXKK	--11$//2FGJ 
 UD*4FCCr   )lib.render_field)	r   r   r    r!   r   r"   r   r   r=   r>   s   @r   rp   rp     s4    
% ! ! (, D Dr   rp   c                   $     e Zd ZdZd fd	Z xZS )Headerz!
        Render header text.
    c                 0    t         t        |   ||       y)z
            Constructor.

            :param text:
                Text to render
            :param header_macro:
                Header rendering macro
        )rB   N)r'   r   r   )r   rB   header_macror+   s      r   r   zHeader.__init__G  s     	fd$\$=r   )zlib.render_headerrI   r>   s   @r   r   r   C  s    	> 	>r   r   c                   $     e Zd ZdZd fd	Z xZS )FieldSetz$
        Field set with header.
    c                 |    |rt        |      gt        |      z   }nt        |      }t        t        |   ||       y)z
            Constructor.

            :param rules:
                Child rules
            :param header:
                Header text
            :param separator:
                Child rule separator
        )r*   N)r   r(   r'   r   r   )r   r)   headerr*   r   r+   s        r   r   zFieldSet.__init__W  s:     v'$u+5HE{Hh&x9&Er   )Nr%   rI   r>   s   @r   r   r   S  s    F Fr   r   c                   *     e Zd Z fdZdi fdZ xZS )Rowc                 8    t         t        |           || _        y r	   )r'   r   r   r)   )r   columnskwr+   s      r   r   zRow.__init__k  s    c4!#
r   Nc                 "   g }| j                   D ]b  }|j                  r;|j                  j                  |j                  d   i       }|j                  dd       |j	                   ||||             d t        ddj                  |      z        S )Nr   column_classcolz<div class="form-row">%s</div>r%   )r)   r   rz   
setdefaultr2   r   r:   )r   r   r   r   colsr   w_argss          r   r   zRow.__call__o  s    :: 	:C!!"..99#:L:LQ:OQST!!.%8KKD)Z89		: 6FGGr   )r   r   r    r   r   r=   r>   s   @r   r   r   j  s     (, Hr   r   c                   @     e Zd Zd fd	Zed        Zdi f fd	Z xZS )GroupNc                 ~   |j                  dd      }t        t        |   |       || _        g | _        |rxt        |t        t        f      s|g}|D ]Z  }t        |t              r | j
                  j                  dd|d       3|d   dv s;d|d<   | j
                  j                  |       \ |rxt        |t        t        f      s|g}|D ]Z  }t        |t              r | j
                  j                  d	d|d       3|d   dv s;d	|d<   | j
                  j                  |       \ t        | j
                         y
)z,
            Bootstrap Input group.
        rs   r}   prependrB   )postyperB   r   )r5   rH   rB   r   r2   N)r{   r'   r   r   rr   _addons
isinstancetupler(   strr2   print)r   rr   r   r2   rO   rs   cnfr+   s          r   r   zGroup.__init__|  s?    zz.2DEeT#L1$gt}5") -c3'LL''( & #) 
 v;";;!*CJLL'',- fudm4  -c3'LL''' & #) 
 v;";;!)CJLL'',- 	dllr   c                 |    | j                   g}| j                  D ]  }|d   dk(  s|j                  |d          ! |S )Nr   r5   rY   )rr   r   r2   )r   fieldsr   s      r   r   zGroup.visible_fields  sD    //"<< 	+C6{g%c&k*	+ r   c                 l   t        || j                  d      }|t        d|d| j                        |r|j                  }ni }i }g }g }| j                  D ]  }	d}
|	d   }|dk(  rq|	d   }|j
                  j                  |d      }|rf|j                  |i       }|j                  dv r|j                  dd	       n|j                  dd
        |di |}
n|dk(  r	d|	d   z  }
n
|dk(  r|	d   }
|
s|	d   dk(  r|j                  |
       |j                  |
        |rt        dj                  |            |d<   |rt        dj                  |            |d<   |j                  |j                  | j                  i              |j                  |       |||d}t        t        | ?  |||      S )rv   Nrw   rx   r   r5   rY   )BooleanField
RadioFieldclasszform-check-inputzform-controlrB   z(<span class="input-group-text">%s</span>rH   r   r   r%   r2   ry   r   )rW   rr   r_   rz   r   _fieldsr{   r   r   r2   r   r:   ra   r'   r   r   )r   r   r   r   r5   rz   rc   r   r2   r   ctntyprY   fldr   r|   r+   s                   r   r   zGroup.__call__  s    doot4=tWXX#//KK<< 	'CCf+Cg~6{ll&&tT2(33D"=Fxx#AA))'3EF))'>B--C@3v;N&ku:*NN3'MM#&-	'0 $RWWW%56DO#BGGFO4DNKOODOOR89J 
 UD*4FCCr   )NN)r   r   r    r   r"   r   r   r=   r>   s   @r   r   r   z  s0    +Z   (, ?D ?Dr   r   c                   :    e Zd ZdZd Zed        Zd ZddZd Z	y)	RuleSetz
        Rule set.
    c                 >    || _         | j                  |      | _        y)z
            Constructor.

            :param view:
                Administrative view
            :param rules:
                Rule list
        N)viewr.   r)   )r   r   r)   s      r   r   zRuleSet.__init__  s     	))%0
r   c                 p    g }| j                   D ]$  }|j                  D ]  }|j                  |        & |S r	   r1   r3   s       r   r   zRuleSet.visible_fields  sE    JJ 	-D,, -%%e,-	- r   c                     t        |      S )zk
            Convert string to rule.

            Override this method to change default behavior.
        )rp   )r   values     r   convert_stringzRuleSet.convert_string  s     U|r   Nc                    g }|D ]  }t        |t              r1|j                  | j                  |      j	                  | |             Dt        |t
        t        f      r*t        | }|j                  |j	                  | |             	 |j                  |j	                  | |              |S # t        $ r t        dt        |      z        w xY w)a  
            Configure all rules recursively - bind them to current RuleSet and
            convert string references to `Field` rules.

            :param rules:
                Rule list
            :param parent:
                Parent rule (if any)
        zCould not convert "%s" to rule)r   r   r2   r   r   r   r(   r   rU   	TypeErrorrepr)r   r)   r   r;   r<   rows         r   r.   zRuleSet.configure_rules  s      
	PA!\*d11!4>>tVLMAt}-1gcmmD&9:PMM!++dF";<
	P  & P#$DtAw$NOOPs   
!B//!Cc              #   6   K   | j                   D ]  }|  yw)z7
            Iterate through registered rules.
        Nr7   )r   r<   s     r   r8   zRuleSet.__iter__-  s        	AG	s   r	   )
r   r   r    r!   r   r"   r   r   r.   r8   r   r   r   r   r     s/    
1  4r   r   N)
markupsafer   flask_admin._compatr   flask_adminr   objectr   r$   r@   rF   rK   re   rp   r   r   r   r   r   r   r   r   <module>r      s     , '$v '$T>3 >3B!8 !274 7AH AH5F 5Fp1DE 1Dh>U > Fz F.H* H vDE vDr?f ?r   