o
    a"<f_                     @   s   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
d Zdd Zdd ZG dd dZdS )    )copy)template)Context)NodeVariableNodeTextNodeNodeList)IfNode)get_template)BLOCK_CONTEXT_KEYExtendsNode	BlockNodeBlockContext)TemplateSyntaxErrorTemplateDoesNotExist)CompressorNodec           	      C   s   t |jvrt |jt < |jt  }tdd | jtD }|| | |}|j}|D ]}t	|t
sAt	|tr?t||  S  nq,td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                 s       | ]}|j |fV  qd S Nname.0n r   P/var/www/html/kck/venv/lib/python3.10/site-packages/compressor/offline/django.py	<genexpr>       z%handle_extendsnode.<locals>.<genexpr>c                 s   r   r   r   r   r   r   r   r   %   r   )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_nodelistr   r   r   r$      s,   







r$   c                 C   s   t  }| D ]v}t|tr$|jj }|dkr$|sq||d j}|s$qt|tr5t	|||}|
| qt|trXt|}t|jD ]\}\}}	t|	||}	||	f|j|< qCn|jD ]}
t||
d }	|	rut|	||}	t|}t||
|	 q[|| q|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(   r.   r,   var_nameexpanded_blocki	conditionsub_nodelistattrr   r   r   r%   .   s8   



r%   c                 C   sV   | | j }}|d u r| }|| t|j||}|   |d ur)|| j| |S r   )popr   r;   r%   r   push)r,   r-   r(   popped_blockblockexpanded_nodelistr   r   r   r4   N   s   
r4   c                   @   sX   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dddZ
dddZdS )DjangoParserc                 C   s
   || _ d S r   )charset)selfrH   r   r   r   __init__[   s   
zDjangoParser.__init__c              
   C   sX   zt |jW S  tjy } ztt|d }~w tjy+ } ztt|d }~ww r   )r
   r   r   strr   )rI   template_nameer   r   r   parse^   s   zDjangoParser.parsec                 C   s   dS )NTr   )rI   r   r'   r   r   r   process_templatef      zDjangoParser.process_templatec                 C   s   |S r   r   )rI   offline_contextr   r   r   get_init_contexti   rP   zDjangoParser.get_init_contextc                 C   s   d S r   r   rI   r   r'   r,   r   r   r   process_nodel   rP   zDjangoParser.process_nodec                 C   s   ||_ |j|S r   )r   r   renderrS   r   r   r   render_nodelisto   s   zDjangoParser.render_nodelistc                 C   s   |j |ddS NT)forced)rU   rS   r   r   r   render_nodes   s   zDjangoParser.render_nodeNc              
   C   s   t |tr;z|d u rt }||_t||W S  tjy( } ztt|d }~w tjy: } ztt|d }~ww g }t |trT|j	D ]}|t
||d pOg 7 }qE|S t
|dg }|S )Nr   )r#   r   r   r   r$   r   rK   r   r   r8   r9   )rI   r,   originalr'   rM   r   rA   r   r   r   get_nodelistv   s(   


zDjangoParser.get_nodelistc                 c   s^    |d u r|}|  |||D ]}t|tr|jddr|V  q| |||D ]}|V  q&qd S rW   )r[   r#   r   is_offline_compression_enabled
walk_nodes)rI   r,   rZ   r'   r   r   r   r]      s   

zDjangoParser.walk_nodesr   )NN)__name__
__module____qualname__rJ   rN   rO   rR   rT   rV   rY   r[   r]   r   r   r   r   rG   Z   s    
rG   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%   r4   rG   r   r   r   r   <module>   s     