
    7i7B                         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 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 G d de      Zd Zd Zy)    )Iterable)wraps)import_module)getfullargspecunwrap)conditional_escape)lazy_annotations   )NodeTemplatetoken_kwargs)TemplateSyntaxErrorc                       e Zd Zy)InvalidTemplateLibraryN)__name__
__module____qualname__     j/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/template/library.pyr   r      s    r   r   c                   J    e Zd ZdZd ZddZd ZddZd Zd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_function5   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>.decC   s    +t++D:E::r   c                 ,     j                   | fi S r   )filter)r"   r/   r#   r   s    r   r$   zLibrary.filter.<locals>.decM   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   r1   zLibrary.filter9   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   )r1   r   )r   r"   r/   s      r   r.   zLibrary.filter_functiond   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               5  t        t                     \  	}d d d        
xs  j                  t	                	f	d       }j                  |        S # 1 sw Y   HxY w)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!   )r"   _rT   rL   rM   rN   rO   rP   rR   rS   r#   r   rQ   s   `  @@@@@@@r   r$   zLibrary.simple_tag.<locals>.decp   s    !# #6$<0# $ !1DMMM4[Q Q Q( HH]L1KE $#s   A88Bz(Invalid arguments provided to simple_tagr(   r)   )r   r"   rQ   r#   r$   s   ` `` r   
simple_tagzLibrary.simple_tagg   s2    #	J <Jd^t9GHHr   c                 ^      fd}||S t        |      r ||      S t        d      )z
        Register a callable as a compiled block template tag. Example:

        @register.simple_block_tag
        def hello(content):
            return 'world'
        c                    	 t               5  t        t                     \  	}d d d        xs  j                  
d 
t	               
 	f
d       }j                  |        S # 1 sw Y   PxY w)Nendc                   
 j                         }r(t        |      dk\  r|d   dk(  r|d= n+t        d      |r|d   dk(  r|d= nt        d d      |j                         dd  }d }t        |      dk\  r|d   d	k(  r
|d
   }|d d }| j	                  	f      }| j                          t        | ||
      \  }}t        |
|||      S )Nr>   r
   contentzv is decorated with takes_context=True so it must have a first argument of 'context' and a second argument of 'content'r   'z)' must have a first argument of 'content'r?   r@   rA   )copyrC   r   rB   parsedelete_first_tokenrD   SimpleBlockNode)rF   rG   
tag_paramsrH   rI   nodelistrJ   rK   rL   end_namer"   rM   rN   rO   rP   rQ   rR   rS   s           r   rT   z;Library.simple_block_tag.<locals>.dec.<locals>.compile_func   s'   #[[]
 :!+
10J&qM1,/ 04 4 
  JqMY$>"1-M?*ST  ++-ab1!
t9>d2h$&6!%bJ9D!<<4))+)#!! f 'dM4 r   rU   )r"   rV   rT   rL   rM   rN   rO   rP   rR   rS   re   r#   r   rQ   s   `  @@@@@@@r   r$   z%Library.simple_block_tag.<locals>.dec   s    !# #6$<0# $ !1DMMM 04[+ + +Z HH]L1K} $#s   B  B	z.Invalid arguments provided to simple_block_tagrW   )r   r"   rQ   r#   re   r$   s   ` ``` r   simple_block_tagzLibrary.simple_block_tag   s3    @	D <Jd^t9MNNr   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               5  t        t                     \  	}d d d        xs  j                  t	               
 	f
d       }j                  |        S # 1 sw Y   IxY w)Nc                 v   
 |j                         dd  }t        | |	

      \  }}t        ||      S )Nr
   )rB   rD   InclusionNode)rF   rG   rH   rJ   rK   rL   filenamer"   rM   rN   rO   rP   rQ   rR   rS   s        r   rT   z8Library.inclusion_tag.<locals>.dec.<locals>.compile_func	  sb    ++-ab1)#!! f %! r   rU   )r"   rV   rT   rL   rM   rN   rO   rP   rR   rS   rk   r#   r   rQ   s   `  @@@@@@@r   r$   z"Library.inclusion_tag.<locals>.dec   s    !# #6$<0# $ !1DMMM4[  , HH]L1KI $#s   A99Br   )r   rk   r"   rQ   r#   r$   s   `` `` r   inclusion_tagzLibrary.inclusion_tag   s    %	N 
r   )NN)NNN)NNNN)r   r   r   __doc__r   r!   r'   r1   r.   rX   rf   rl   r   r   r   r   r      s5    0)V95InROh1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"   rQ   rJ   rK   )r   r"   rQ   rJ   rK   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   )rJ   resolverQ   rK   items)r   contextvarresolved_argskvresolved_kwargss          r   get_resolved_argumentsz$TagHelperNode.get_resolved_arguments3  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   rm   r   rz   r   r   r   ro   ro   &  s    .r   ro   c                   (     e Zd ZdZ fdZd Z xZS )rE   r   c                 8    t         |   ||||       || _        y r   )superr   rI   )r   r"   rQ   rJ   rK   rI   	__class__s         r   r   zSimpleNode.__init__>  s    }dF;$r   c                     | j                  |      \  }} | j                  |i |}| j                  ||| j                  <   y|j                  rt	        |      }|S )N )rz   r"   rI   
autoescaper   )r   rt   rv   ry   outputs        r   renderzSimpleNode.renderB  s_    )-)D)DW)M&M=_=??&'-GDOO$'/Fr   )r   r   r   child_nodelistsr   r   __classcell__r~   s   @r   rE   rE   ;  s    O%r   rE   c                   (     e Zd Z fdZ fdZ xZS )rb   c                 2    t        |   |i | || _        y r   )r}   r   rd   )r   rd   rJ   rK   r~   s       r   r   zSimpleBlockNode.__init__N  s    $)&) r   c                     t         |   |      \  }}|j                  | j                  rdnd| j                  j                  |             ||fS )Nr
   r   )r}   rz   insertrQ   rd   r   )r   rt   rv   ry   r~   s       r   rz   z&SimpleBlockNode.get_resolved_argumentsR  sR    ).)G)P& 	##ADMM,@,@,I	
 o--r   )r   r   r   r   rz   r   r   s   @r   rb   rb   M  s    !	. 	.r   rb   c                   $     e Zd Z fdZd Z xZS )rj   c                 8    t         |   ||||       || _        y r   )r}   r   rk   )r   r"   rQ   rJ   rK   rk   r~   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)rz   r"   render_contextget
isinstancerk   r   getattrr   strr   engineselect_templateget_templatenewr   )r   rt   rv   ry   _dicttnew_contextr   s           r   r   zInclusionNode.renderc  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   r   r   r   s   @r   rj   rj   ^  s    !%r   rj   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   rt   r
   NzW'%s' is decorated with takes_context=True so it must have a first argument of 'context'r^   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>  s     W3Vavz3Vs   )r   listr   popitemr   removeappendcompile_filterpop
IndexErrorrC   join)rF   rH   rP   rR   rS   rL   rN   rO   rQ   r#   rJ   rK   unhandled_paramskwargunhandled_kwargsbitparamr9   s                     r   rD   rD     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     sn    
t$
  
$)-q2
 	

  
$BTI
 	

s    < 	949AN)collections.abcr   	functoolsr   	importlibr   inspectr   r   django.utils.htmlr   django.utils.inspectr	   baser   r   r   
exceptionsr   	Exceptionr   r   ro   rE   rb   rj   rD   r   r   r   r   <module>r      sv    $  # * 0 1 . . +	Y 	R Rj.D .* $.j .""%M "%JUp
r   