a
    ތxd(!                     @   s  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 d dlmZmZ d d	lmZ d d
lmZ 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" ej#ekrej#e_$ee_#edd Z%e%e_&G dd deZ'dS )    )OrderedDict)contextmanagernormpath)pformatsaferepr)http)signing)QuerySetRawQuerySet)RequestContextTemplate)template_rendered)instrumented_test_render)path)gettext_lazy)Panel)SQLQueryTriggered	recording)viewsc              	   c   s   | j d urtd|| _ |jj| j }t | _i }|D ]2}d|j|j	}|| j
}|| j|< || q6|| j| j< zd V  W d | _ i | j| j< nd | _ i | j| j< 0 d S )Nz&Context is already bound to a templatez{}.{})templateRuntimeErrorengineZtemplate_context_processorsZ_processorsr   context_processorsformat
__module____name__requestupdatedictsZ_processors_index)selfr   Z
processorsZupdates	processornamecontext r$   \/var/www/html/Ranjet/env/lib/python3.9/site-packages/debug_toolbar/panels/templates/panel.py_request_context_bind_template"   s$    


r&   c                       sp   e Zd ZdZ fddZdd ZedZedd Z	ed	d
 Z
dZedd Zdd Zdd Zdd Z  ZS )TemplatesPanelzP
    A panel that lists all templates used during processing of a response.
    c                    s"   t  j|i | g | _g | _d S N)super__init__	templatespformat_layers)r    argskwargs	__class__r$   r%   r*   C   s    zTemplatesPanel.__init__c              
   K   s  |d |d  }}t |jto@|jdp@|jt| jjd }|rJd S g }|jD ]}t|drT|rTd }| j	D ]\}	}
|	|krr|
} qqr|d u ri }|
 D ]\}}t |tjrd||< q|dkrt |trd||< q|d	k rt |t rd
||< qt |ttfr.d|jj |jjj||< qtd zrzt| W nP ty`   d||< Y n> tyz   d||< Y n$ ty   d||< Y n
0 |||< W td qtd 0 qt|}| j	||f || qT||d< t|dd |d< | j| d S )Nr   r#   zdebug_toolbar/ZSKIP_TEMPLATE_PREFIXESitemsz<<request>>Zsql_queriesz<<sql_queries>>Z	LANGUAGESz<<languages>>z<<{} of {}>>Fz<<triggers database query>>z<<Unicode encode error>>z<<unhandled exception>>Tr   ) 
isinstancer"   str
startswithtupletoolbarconfigr   hasattrr,   r1   r   ZHttpRequestlistr
   r   r   r0   r   lowermodel_metalabelr   r   r   UnicodeEncodeError	Exceptionr   appendgetattrr+   )r    Zsenderr.   r   r#   Zis_debug_toolbar_templatecontext_listZcontext_layerZ
pformatted
key_valuesZ_pformattedZ
temp_layerkeyvaluer$   r$   r%   _store_template_infoJ   s`    






z#TemplatesPanel._store_template_infoZ	Templatesc                 C   s   t | j}tdd|i S )Nz&Templates (%(num_templates)s rendered)num_templates)lenr+   _)r    rG   r$   r$   r%   title   s    
zTemplatesPanel.titlec                 C   s   | j r| j d d jS dS )Nr   r    )r+   r"   r    r$   r$   r%   nav_subtitle   s    zTemplatesPanel.nav_subtitlez#debug_toolbar/panels/templates.htmlc                 C   s   t dtjddgS )Nztemplate_source/template_source)r"   )r   r   rN   )clsr$   r$   r%   get_urls   s    zTemplatesPanel.get_urlsc                 C   s   t | j d S r(   )r   connectrF   rL   r$   r$   r%   enable_instrumentation   s    z%TemplatesPanel.enable_instrumentationc                 C   s   t | j d S r(   )r   Z
disconnectrF   rL   r$   r$   r%   disable_instrumentation   s    z&TemplatesPanel.disable_instrumentationc                 C   s   g }| j D ]}i }|d }t|drN|jrN|jjrN|jj|_t|jj|_ntd|_d|_||d< | j	j
d r|dg }d||d< || q
| j r| j d d	 }| j d d }t|d
d pt|d}	|	j}
nd }g }
| |dd |
D |d d S )Nr   originz	No originrK   ZSHOW_TEMPLATE_CONTEXTr#   
r   r   r   backendc                 S   s   g | ]}t |qS r$   r   ).0xr$   r$   r%   
<listcomp>       z1TemplatesPanel.generate_stats.<locals>.<listcomp>)r+   template_dirsr   )r+   r8   rT   r"   Zorigin_namer	   dumpsZorigin_hashrI   r6   r7   getjoinr@   rA   dirsZrecord_stats)r    r   responseZtemplate_contextZtemplate_datainfor   rB   r   Zengine_backendr[   r$   r$   r%   generate_stats   s:    


zTemplatesPanel.generate_stats)r   r   __qualname____doc__r*   rF   rI   Z	nav_titlepropertyrJ   rM   r   classmethodrP   rR   rS   rb   __classcell__r$   r$   r/   r%   r'   >   s   F


r'   N)(collectionsr   
contextlibr   os.pathr   pprintr   r   djangor   Zdjango.corer	   Zdjango.db.models.queryr
   r   Zdjango.templater   r   Zdjango.test.signalsr   Zdjango.test.utilsr   Zdjango.urlsr   Zdjango.utils.translationr   rI   Zdebug_toolbar.panelsr   Z!debug_toolbar.panels.sql.trackingr   r   Zdebug_toolbar.panels.templatesr   _renderZoriginal_renderr&   Zbind_templater'   r$   r$   r$   r%   <module>   s*   

