
    _f                         d dl m Z  d dlmZ d dlmZ d dlmZ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mZ d dlmZmZ d d	lmZ d
 Zd Zd Z G d d          ZdS )    )copy)template)Context)NodeVariableNodeTextNodeNodeList)IfNode)get_template)BLOCK_CONTEXT_KEYExtendsNode	BlockNodeBlockContext)TemplateSyntaxErrorTemplateDoesNotExist)CompressorNodec                    t           |j        vrt                      |j        t           <   |j        t                    }t          d | j                            t                    D                       }|                    |           |                     |          }|j        }|D ]@}t          |t                    s)t          |t                    rt          ||          c S  nAt          d |                    t                    D                       }|                    |           g }t          |||          }|S )zCreate a copy of Node tree of a derived template replacing
    all blocks tags with the nodes of appropriate blocks.
    Also handles {{ block.super }} tags.
    c              3   (   K   | ]}|j         |fV  d S Nname.0ns     K/var/www/html/env/lib/python3.11/site-packages/compressor/offline/django.py	<genexpr>z%handle_extendsnode.<locals>.<genexpr>   s9                 c              3   (   K   | ]}|j         |fV  d S r   r   r   s     r   r   z%handle_extendsnode.<locals>.<genexpr>+   s(      TT!161+TTTTTTr   )r   render_contextr   dictnodelistget_nodes_by_typer   
add_blocks
get_parent
isinstancer   r   handle_extendsnoderemove_block_nodes)	extendsnodecontextblock_contextblockscompiled_parentparent_nodelistnodeblock_stacknew_nodelists	            r   r&   r&      sN   
  6664@NN01*+<=M  (1CCINN    F V$$$!,,W55O%.O  $)) 	$,, 9)$88888E	
 TT'H'H'S'STTTTTFV$$$K%o{MRRLr   c                    t                      }| D ]`}t          |t                    rJ|j        j                                        }|dk    r&|s?|                    |d         j                  }|sbt          |t                    r't          |||          }|
                    |           t          |t                    rJt          |          }t          |j                  D ]%\  }\  }}	t          |	||          }	||	f|j        |<   &nN|j        D ]F}
t#          ||
d           }	|	r1t          |	||          }	t          |          }t%          ||
|	           G|                    |           b|S )Nzblock.super)r	   r%   r   filter_expressiontokenstrip	get_blockr   r   expand_blocknodeextendr
   r   	enumerateconditions_nodelistsr'   child_nodelistsgetattrsetattrappend)r!   r/   r*   r0   r.   var_nameexpanded_blocki	conditionsub_nodelistattrs              r   r'   r'   3   s   ::L  &  &dL)) 	-399;;H=((" $..{2/CDD dI&& 	&-dKOON//// $'' :Dzz4=-5 5 M M0A0	< $6$k=$ $L 5>|3LD-a00M !0 : :D#*4t#<#<L# :'9(+}( (  $DzzdL999%%%%r   c                     |                     | j                  x}}|| }|                    |           t          |j        ||          }|                                  ||                    | j        |           |S r   )popr   r>   r'   r!   push)r.   r/   r*   popped_blockblockexpanded_nodelists         r   r7   r7   Y   s    (,,TY777L5}u*5>;VVOO49l333r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dd	Z
dd
ZdS )DjangoParserc                     || _         d S r   )charset)selfrN   s     r   __init__zDjangoParser.__init__f   s    r   c                     	 t          |          j        S # t          j        $ r!}t          t          |                    d }~wt          j        $ r!}t	          t          |                    d }~ww xY wr   )r   r   r   strr   )rO   template_namees      r   parsezDjangoParser.parsei   s{    	/..77+ 	. 	. 	.%c!ff---, 	/ 	/ 	/&s1vv...	/s     A4AA4A//A4c                     dS )NT )rO   r   r)   s      r   process_templatezDjangoParser.process_templateq   s    tr   c                     |S r   rW   )rO   offline_contexts     r   get_init_contextzDjangoParser.get_init_contextt   s    r   c                     d S r   rW   rO   r   r)   r.   s       r   process_nodezDjangoParser.process_nodew   s    r   c                 D    ||_         |j                            |          S r   )r   r!   renderr]   s       r   render_nodelistzDjangoParser.render_nodelistz   s     #}##G,,,r   c                 0    |                     |d          S NT)forced)r`   r]   s       r   render_nodezDjangoParser.render_node~   s    {{74{000r   Nc                    t          |t                    r	 |t                      }||_        t	          ||          S # t          j        $ r!}t          t          |                    d }~wt          j        $ r!}t          t          |                    d }~ww xY wg }t          |t                    r!|j	        D ]}|t          ||d           pg z  }nt          |dg           }|S )Nr!   )r%   r   r   r   r&   r   rR   r   r   r;   r<   )rO   r.   originalr)   rT   r!   rD   s          r   get_nodelistzDjangoParser.get_nodelist   s	   dK(( 		33?%iiG#+ )$888/ 2 2 2)#a&&1110 3 3 3*3q662223 dD!! 	5, < < GD$55;;<
 tZ44Hs!   &> BA))B;BBc              #      K   ||}|                      |||          D ]P}t          |t                    r|                    d          r|V  2|                     |||          D ]}|V  Qd S rc   )rh   r%   r   is_offline_compression_enabled
walk_nodes)rO   r.   rg   r)   s       r   rk   zDjangoParser.walk_nodes   s      H%%dHg>> 	 	D$// D4W4W 5X 5 5  



 OOD(GDD  DJJJJ	 	r   r   )NN)__name__
__module____qualname__rP   rU   rX   r[   r^   ra   re   rh   rk   rW   r   r   rL   rL   e   s          / / /      - - -1 1 1   .
 
 
 
 
 
r   rL   N)r   djangor   django.templater   django.template.baser   r   r   r	   django.template.defaulttagsr
   django.template.loaderr   django.template.loader_tagsr   r   r   r   compressor.exceptionsr   r    compressor.templatetags.compressr   r&   r'   r7   rL   rW   r   r   <module>rw      sL               # # # # # # G G G G G G G G G G G G . . . . . . / / / / / /            L K K K K K K K ; ; ; ; ; ;  ># # #L	 	 	= = = = = = = = = =r   