
    h2                         d dl Z d dlmZ d dlmZmZ d dl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)    N)import_module)getfullargspecunwrap)conditional_escape)is_iterable   )NodeTemplatetoken_kwargs)TemplateSyntaxErrorc                       e Zd Zy)InvalidTemplateLibraryN)__name__
__module____qualname__     Z/var/www/html/ranktracker/api/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                 N    || j                   t        |d|      j                  <   |S N_decorated_function)r   getattrr   )r   r    s     r   r%   zLibrary.tag_function2   s%    IM		'$ 5t<EEFr   c                 V    
| fd}|S )|'t              r  j                  fi S  fd}|S \|Z| j                  <   dD ]=  }|v s|   }t        |||       t	        |d      s't        |j
                  ||       ? |_        |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>.dec@   s    +t++D:E::r   c                 ,     j                   | fi S r   )filter)r    r0   r!   r   s    r   r"   zLibrary.filter.<locals>.decI   s    &4;;tT;U;;r   )expects_localtimeis_safeneeds_autoescaper+   z*Unsupported arguments to Library.filter: (r#   r$   )r&   r/   r   setattrhasattrr+   _filter_namer'   )r   r!   filter_funcr0   r"   attrvalues   `` `   r   r2   zLibrary.filter6   s     <K/;J+"5~+t++D:E::<
+"9!,DLLL N5=!$KEKu5 {,AB ? ?uMN (,K${$ r   c                 X    t        |d|      j                  } | j                  ||fi |S r*   )r,   r   r2   )r   r    r0   r!   s       r   r/   zLibrary.filter_function`   s/    t2D9BBt{{4///r   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 t         d       j                  t	        j
                          	f	d       }j                  |        S )Nr+   c                    	 |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_funcp   s    ++-ab1!
t9>d2h$&6!%bJ9D)D&'5(O]M f "$tVZPPr   r   r   r,   r   	functoolswrapsr   )r    _rV   rN   rO   rP   rQ   rR   rT   rU   r!   r   rS   s   `  @@@@@@@r   r"   zLibrary.simple_tag.<locals>.decl   sv    KYZ`aeZfKgHFGUHfoq!XWT3H$%O%X%XM__T"
Q 
Q #
Q HH]L1Kr   z(Invalid arguments provided to simple_tag)r&   r'   )r   r    rS   r!   r"   s   ` `` r   
simple_tagzLibrary.simple_tagd   s1    	& <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 t         d       j                  t	        j
                         
 	f
d       }j                  |        S )Nr+   c                 v   
 |j                         dd  }t        | |	

      \  }}t        ||      S )Nr   )rD   rF   InclusionNode)rH   rI   rJ   rL   rM   rN   filenamer    rO   rP   rQ   rR   rS   rT   rU   s        r   rV   z8Library.inclusion_tag.<locals>.dec.<locals>.compile_func   sV    ++-ab1)D&'5(O]M f %-vx r   rW   )r    rZ   rV   rN   rO   rP   rQ   rR   rT   rU   r`   r!   r   rS   s   `  @@@@@@@r   r"   z"Library.inclusion_tag.<locals>.dec   ss    KYZ`aeZfKgHFGUHfoq!XWT3H$%O%X%XM__T"  # HH]L1Kr   r   )r   r`   r    rS   r!   r"   s   `` `` r   inclusion_tagzLibrary.inclusion_tag   s    	  
r   )NN)NNN)r   r   r   __doc__r   r   r%   r2   r/   r[   ra   r   r   r   r   r      s-    .(T0"IH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    rS   rL   rM   )r   r    rS   rL   rM   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   )rL   resolverS   rM   items)r   contextvarresolved_argskvresolved_kwargss          r   get_resolved_argumentsz$TagHelperNode.get_resolved_arguments   s    9=C#W-CC$I5M=A[[=N=N=PQTQ1aii00QQo--	 D Rs   A;B N)r   r   r   rb   r   ro   r   r   r   rd   rd      s    
.r   rd   c                   $     e Zd Z fdZd Z xZS )rG   c                 8    t         |   ||||       || _        y r   )superr   rK   )r   r    rS   rL   rM   rK   	__class__s         r   r   zSimpleNode.__init__   s    }dF;$r   c                     | j                  |      \  }} | j                  |i |}| j                  ||| j                  <   y|j                  rt	        |      }|S )N )ro   r    rK   
autoescaper   )r   ri   rk   rn   outputs        r   renderzSimpleNode.render   s_    )-)D)DW)M&M=_=??&'-GDOO$'/Fr   r   r   r   r   rx   __classcell__rs   s   @r   rG   rG      s    %r   rG   c                   $     e Zd Z fdZd Z xZS )r_   c                 8    t         |   ||||       || _        y r   )rr   r   r`   )r   r    rS   rL   rM   r`   rs   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              sEt        | j
                        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)ro   r    render_contextget
isinstancer`   r
   r,   r   strr   engineselect_templateget_templatenewrx   )r   ri   rk   rn   _dicttnew_contextr   s           r   rx   zInclusionNode.render   s,    *.)D)DW)M&		=<O<""&&t,9$--2MMGDMM:tDhOMM**s3DMM8R$$++;;DMMJ$$++88G+,G""4(kk%( [[.
!(2K%xx$$r   ry   r{   s   @r   r_   r_      s    !%r   r_   c
           
         |r|d   dk(  r|dd }nt        d|	z        g }
i }t        |      }|D cg c]
  }|r||vr| }}|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   ri   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>4  s     UAVaZUs   )r   listr   popitemr   removeappendcompile_filterpop
IndexErrorrE   join)rH   rJ   rR   rT   rU   rN   rP   rQ   rS   r!   rL   rM   unhandled_paramskwargunhandled_kwargsbitparamr;   s                     r   rF   rF      s    !9	!ABZF%57;<= = DFF|!%"> 	   )"cUF+ ==?LE5F"uF':u})5"# # &)5"# #
 &+s5z",, %++E2..$++E2)*,012 2
 F11#67"$((+I)"T  ,Oc(m^<+!499U1ADT1TUUWX 	X <oR " "1I !" " '"s   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   8  sn    
t$
  
$)-q2
 	

  
$BTI
 	

s    < 	949A)rX   	importlibr   inspectr   r   django.utils.htmlr   django.utils.itercompatr   baser	   r
   r   
exceptionsr   	Exceptionr   r   rd   rG   r_   rF   r   r   r   r   <module>r      sg     # * 0 / . . +	Y 	Q Qh.D .( "!%M !%HHV
r   