o
    ~¨Êh  ã                   @   s”   d dl mZ d dlZd dlZd dl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mZ dd„ ZG d	d
„ d
eƒZdd„ ZG dd„ deƒZdS )é    )Úabsolute_importN)Únodes)Ú	Extension)Ú	CallBlockÚCallÚExtensionAttribute)ÚTemplateSyntaxErrorÚTemplateDoesNotExistc                 C   s,   t | dƒri }| jD ]}| |¡ q
|S | S )NÚdicts)Úhasattrr
   Úupdate)ÚcontextÚcontext_dictÚd© r   úK/var/www/html/env/lib/python3.10/site-packages/compressor/offline/jinja2.pyÚflatten_context   s   

r   c                   @   s*   e Zd ZdZedgƒZdd„ Zdd„ ZdS )ÚSpacelessExtensionz˜
    Functional "spaceless" extension equivalent to Django's.

    See: https://github.com/django/django/blob/master/django/template/defaulttags.py
    Ú	spacelessc                 C   s:   t |jƒj}|jdgdd�}t |  dg ¡g g |¡ |¡S )Nzname:endspacelessT)Údrop_needleÚ
_spaceless)ÚnextÚstreamÚlinenoÚparse_statementsr   r   Úcall_methodÚ
set_lineno)ÚselfÚparserr   Úbodyr   r   r   Úparse"   s   ÿÿzSpacelessExtension.parsec                 C   s   ddl m} ||ƒ  ¡ ƒS )Nr   )Ústrip_spaces_between_tags)Údjango.utils.htmlr!   Ústrip)r   Úcallerr!   r   r   r   r   )   s   zSpacelessExtension._spacelessN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚsetÚtagsr    r   r   r   r   r   r      s
    
r   c                 C   s"   ddl m} | dkr| |¡S dS )z2
    Incomplete emulation of Flask's url_for.
    r   )ÚstaticfilesÚstaticÚ )Ú'django.contrib.staticfiles.templatetagsr+   r,   )ÚmodÚfilenamer+   r   r   r   Úurl_for/   s   
r1   c                   @   sb   e Zd 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„ Zdd„ Zddd„ZdS )ÚJinja2Parserz0compressor.contrib.jinja2ext.CompressorExtensionc                 C   s   || _ || _d S ©N)ÚcharsetÚenv)r   r4   r5   r   r   r   Ú__init__>   s   
zJinja2Parser.__init__c                 C   sœ   t j|dd��=}z| j | ¡  | j¡¡}W n% tjy) } ztt	|ƒƒ‚d }~w tj
y; } ztt	|ƒƒ‚d }~ww W d   ƒ |S 1 sGw   Y  |S )NÚrb)Úmode)ÚioÚopenr5   r    ÚreadÚdecoder4   Újinja2r   ÚstrÚTemplateNotFoundr	   )r   Útemplate_nameÚfileÚtemplateÚer   r   r   r    B   s   €€ÿý
þøzJinja2Parser.parsec                 C   s   dS )NTr   )r   rB   r   r   r   r   Úprocess_templateM   ó   zJinja2Parser.process_templatec                 C   s   | j j ¡ }| |¡ |S r3   )r5   ÚglobalsÚcopyr   )r   Úoffline_contextr   r   r   r   Úget_init_contextP   s   
zJinja2Parser.get_init_contextc                 C   s   d S r3   r   ©r   rB   r   Únoder   r   r   Úprocess_node[   rE   zJinja2Parser.process_nodec                 C   s8   | j  tj |¡¡}tj | j |i ¡}t|ƒ}| |¡S r3   )r5   Úcompiler=   r   ÚTemplateÚ	from_coder   Úrender)r   rB   r   r   Úcompiled_nodeÚflat_contextr   r   r   Ú_render_nodes^   s   
zJinja2Parser._render_nodesc                 C   s   |   |||j¡S r3   )rS   r   rJ   r   r   r   Úrender_nodeliste   ó   zJinja2Parser.render_nodelistc                 C   s   |   |||g¡S r3   )rS   rJ   r   r   r   Úrender_nodeh   rU   zJinja2Parser.render_nodec                 C   s0   t |dt |dg ƒƒ}t|tjjƒr||j S |S )Nr   r   )ÚgetattrÚ
isinstancer=   r   ÚIfÚelse_)r   rK   r   r   r   r   Úget_nodelistk   s   
zJinja2Parser.get_nodelistNc                 c   sv   � |   |¡D ]2}t|tƒr+t|jtƒr+t|jjtƒr+|jjj| jkr+d|jj_	|V  q| j
||d�D ]}|V  q2qd S )NÚ_compress_forced)Ú
block_name)r[   rX   r   Úcallr   rK   r   Ú
identifierÚCOMPRESSOR_IDÚnameÚ
walk_nodes)r   rK   r]   r   r   r   r   rb   s   s   €

ÿþ
ÿøzJinja2Parser.walk_nodes)NN)r%   r&   r'   r`   r6   r    rD   rI   rL   rS   rT   rV   r[   rb   r   r   r   r   r2   ;   s    r2   )Ú
__future__r   r9   r=   Ú
jinja2.extr   r   Újinja2.nodesr   r   r   Úcompressor.exceptionsr   r	   r   r   r1   Úobjectr2   r   r   r   r   Ú<module>   s    