
    g/4                         d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 ddlmZmZmZ ddlmZ  G d	 d
e      Z G d d      Z G d de      Z G d de      Z G d de      Zd Zd Zy)    )Iterable)wraps)import_module)getfullargspecunwrap)conditional_escape   )NodeTemplatetoken_kwargs)TemplateSyntaxErrorc                       e Zd Zy)InvalidTemplateLibraryN)__name__
__module____qualname__     o/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/template/library.pyr   r      s    r   r   c                   B    e Zd ZdZd Zd
dZd Zd
dZd ZddZ	dd	Z
y)Librarya  
    A class for registering template tags and filters. Compiled filter and
    template tag functions are stored in the filters and tags attributes.
    The filter, simple_tag, and inclusion_tag methods provide a convenient
    way to register callables as tags.
    c                      i | _         i | _        y N)filterstags)selfs    r   __init__zLibrary.__init__   s    	r   Nc                      | j                   S &|$t              r j                        S  fd}|S || j                  <   |S t        dd|d      )Nc                 (    j                  |       S r   )tag)funcnamer   s    r   deczLibrary.tag.<locals>.dec&   s    88D$//r   z'Unsupported arguments to Library.tag: (, ))tag_functioncallabler   
ValueError)r   r"   compile_functionr#   s   ``  r   r    zLibrary.tag   s    <,4$$$"2":~((..0 
"2">.DIIdO##)+ r   c                 8    || j                   |j                  <   |S r   )r   r   )r   r!   s     r   r&   zLibrary.tag_function4   s    #'		$-- r   c                 :    
| fd}|S )|'t              r  j                  fi S  fd}|S N|L| j                  <   dD ]/  }|v s|   }t        |||       t        t	        |      ||       1 |_        |S t        dd|d      )z
        Register a callable as a template filter. Example:

        @register.filter
        def lower(value):
            return value.lower()
        c                 *     j                   | fi S r   )filter_function)r!   flagsr   s    r   r#   zLibrary.filter.<locals>.decB   s    +t++D:E::r   c                 ,     j                   | fi S r   )filter)r!   r.   r"   r   s    r   r#   zLibrary.filter.<locals>.decL   s    &4;;tT;U;;r   )expects_localtimeis_safeneeds_autoescapez*Unsupported arguments to Library.filter: (r$   r%   )r'   r-   r   setattrr   _filter_namer(   )r   r"   filter_funcr.   r#   attrvalues   `` `   r   r0   zLibrary.filter8   s     <K/; J+"5~+t++D:E::< 
+"9!,DLLL5=!$KEKu5 F;/u= M (,K$& r   c                 >     | j                   |j                  |fi |S r   )r0   r   )r   r!   r.   s      r   r-   zLibrary.filter_functionc   s    t{{4==$8%88r   c                 Z      fd}||S t        |      r ||      S t        d      )z
        Register a callable as a compiled template tag. Example:

        @register.simple_tag
        def hello(*args, **kwargs):
            return 'world'
        c           
          	 t        t                     \  	}
xs  j                  t                	f	d       }j	                  |        S )Nc                    	 |j                         dd  }d }t        |      dk\  r|d   dk(  r
|d   }|d d }t        | |	

      \  }}t        |||      S )Nr	      as)split_contentslen
parse_bits
SimpleNode)parsertokenbits
target_varargskwargsdefaultsr!   function_namekwonlykwonly_defaultsparamstakes_contextvarargsvarkws         r   compile_funcz5Library.simple_tag.<locals>.dec.<locals>.compile_func{   s    ++-ab1!
t9>d2h$&6!%bJ9D)#!! f "$tVZPPr   r   r   r   r   r    )r!   _rS   rK   rL   rM   rN   rO   rQ   rR   r"   r   rP   s   `  @@@@@@@r   r#   zLibrary.simple_tag.<locals>.deco   sm     vd|, 1DMMM4[Q Q Q( HH]L1Kr   z(Invalid arguments provided to simple_tag)r'   r(   )r   r!   rP   r"   r#   s   ` `` r   
simple_tagzLibrary.simple_tagf   s2    "	H <Jd^t9GHHr   c                       fd}|S )z
        Register a callable as an inclusion tag:

        @register.inclusion_tag('results.html')
        def show_results(poll):
            choices = poll.choice_set.all()
            return {'choices': choices}
        c                     	 t        t                     \  	}xs  j                  t               
 	f
d       }j	                  |        S )Nc                 v   
 |j                         dd  }t        | |	

      \  }}t        ||      S )Nr	   )rA   rC   InclusionNode)rE   rF   rG   rI   rJ   rK   filenamer!   rL   rM   rN   rO   rP   rQ   rR   s        r   rS   z8Library.inclusion_tag.<locals>.dec.<locals>.compile_func   sb    ++-ab1)#!! f %! r   rT   )r!   rU   rS   rK   rL   rM   rN   rO   rQ   rR   r[   r"   r   rP   s   `  @@@@@@@r   r#   z"Library.inclusion_tag.<locals>.dec   sj     vd|, 1DMMM4[  , HH]L1Kr   r   )r   r[   r!   rP   r"   r#   s   `` `` r   inclusion_tagzLibrary.inclusion_tag   s    $	L 
r   )NN)NNN)r   r   r   __doc__r   r    r&   r0   r-   rV   r\   r   r   r   r   r      s-    0)V94Il0r   r   c                       e Zd ZdZd Zd Zy)TagHelperNodez
    Base class for tag helper nodes such as SimpleNode and InclusionNode.
    Manages the positional and keyword arguments to be passed to the decorated
    function.
    c                 <    || _         || _        || _        || _        y r   )r!   rP   rI   rJ   )r   r!   rP   rI   rJ   s        r   r   zTagHelperNode.__init__   s    	*	r   c                    | j                   D cg c]  }|j                  |       }}| j                  r|g|z   }| j                  j	                         D ci c]  \  }}||j                  |       }}}||fS c c}w c c}}w r   )rI   resolverP   rJ   items)r   contextvarresolved_argskvresolved_kwargss          r   get_resolved_argumentsz$TagHelperNode.get_resolved_arguments   s    9=C#W-C$I5M=A[[=N=N=PQ=PTQ1aii00=PQo--	 D Rs   A;B N)r   r   r   r]   r   rj   r   r   r   r_   r_      s    .r   r_   c                   (     e Zd ZdZ fdZd Z xZS )rD   r   c                 8    t         |   ||||       || _        y r   )superr   rH   )r   r!   rP   rI   rJ   rH   	__class__s         r   r   zSimpleNode.__init__   s    }dF;$r   c                     | j                  |      \  }} | j                  |i |}| j                  ||| j                  <   y|j                  rt	        |      }|S )N )rj   r!   rH   
autoescaper   )r   rd   rf   ri   outputs        r   renderzSimpleNode.render   s_    )-)D)DW)M&M=_=??&'-GDOO$'/Fr   )r   r   r   child_nodelistsr   rs   __classcell__rn   s   @r   rD   rD      s    O%r   rD   c                   $     e Zd Z fdZd Z xZS )rZ   c                 8    t         |   ||||       || _        y r   )rm   r   r[   )r   r!   rP   rI   rJ   r[   rn   s         r   r   zInclusionNode.__init__   s    }dF; r   c                    | j                  |      \  }} | j                  |i |}|j                  j                  |       }|t	        | j
                  t              r| j
                  }nt	        t        | j
                  dd      t              r| j
                  j                  }nt	        | j
                  t              sJt	        | j
                  t              r0|j                  j                  j                  | j
                        }n/|j                  j                  j                  | j
                        }||j                  | <   |j                  |      }|j                  d      }|||d<   |j                  |      S )z
        Render the specified template and context. Cache the template object
        in render_context to avoid reparsing and loading when used in a for
        loop.
        Ntemplate
csrf_token)rj   r!   render_contextget
isinstancer[   r   getattrrz   strr   engineselect_templateget_templatenewrs   )r   rd   rf   ri   _dicttnew_contextr{   s           r   rs   zInclusionNode.render   s3    *.)D)DW)M&		=<O<""&&t,9$--2MMGDMM:tDhOMM**s3
x9 $$++;;DMMJ$$++88G+,G""4(kk%( [[.
!(2K%xx$$r   )r   r   r   r   rs   ru   rv   s   @r   rZ   rZ      s    !%r   rZ   c
           
         |r|r|d   dk(  r|dd }nt        d|	z        g }
i }t        |      }|D cg c]  }|r||vs
| }}|D ]  }t        |g|       }|r|j                         \  }}||vr||vr|t        d|	d|d      ||v rt        d|	d|d      ||t	        |      <   ||v r|j                  |       {||v s|j                  |       |rt        d	|	z        |
j                  | j                  |             	 |j                  d        ||dt        |        }|s|r*t        d|	ddj                  d ||z   D                    |
|fS c c}w # t        $ r |t        d
|	z        Y :w xY w)z
    Parse bits for template tag helpers simple_tag and inclusion_tag, in
    particular by detecting syntax errors and by extracting positional and
    keyword arguments.
    r   rd   r	   NzW'%s' is decorated with takes_context=True so it must have a first argument of 'context''z(' received unexpected keyword argument 'z1' received multiple values for keyword argument 'zH'%s' received some positional argument(s) after some keyword argument(s)z+'%s' received too many positional argumentsz0' did not receive value(s) for the argument(s): r$   c              3   &   K   | ]	  }d |z    yw)z'%s'Nr   ).0ps     r   	<genexpr>zparse_bits.<locals>.<genexpr>n  s     W3Vavz3Vs   )r   listr   popitemr   removeappendcompile_filterpop
IndexErrorrB   join)rE   rG   rO   rQ   rR   rK   rM   rN   rP   r"   rI   rJ   unhandled_paramskwargunhandled_kwargsbitparamr8   s                     r   rC   rC     s	   " fQi9,ABZF%57;<  DFF|!!%E<X6   cUF+ ==?LE5F"uF':u})HLeT  &)U$  &+s5z",, %++E2..$++E2)*,01  F11#67$((+M X  ,,<s8}n=+!TYYW3CFV3VWWY
 	
 <sT " 1IDP  's   E! E!E&&FFc                     	 t        |       }	 |j                  S # t        $ r}t        d| d|      d}~ww xY w# t        $ r t        d| z        w xY w)z;
    Load a Library object from a template tag module.
    zLInvalid template library specified. ImportError raised when trying to load 'z': Nz4Module  %s does not have a variable named 'register')r   ImportErrorr   registerAttributeError)r"   modulees      r   import_libraryr   s  sn    
t$
  
$)-q2
 	

  
$BTI
 	

s    < 	949AN)collections.abcr   	functoolsr   	importlibr   inspectr   r   django.utils.htmlr   baser
   r   r   
exceptionsr   	Exceptionr   r   r_   rD   rZ   rC   r   r   r   r   <module>r      sg    $  # * 0 . . +	Y 	| |~.D .* $"%M "%JUp
r   