o
    g                      @   s   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rhej!e_"ee_!edd Z#e#e_$G dd deZ%dS )    )contextmanagernormpath)pformatsaferepr)http)signing)QuerySetRawQuerySet)RequestContextTemplate)template_rendered)instrumented_test_render)path)gettext_lazy)Panel)SQLQueryTriggered	allow_sql)viewsc              	   c   s    | j d ur
td|| _ |jj| j }i | _i }|D ]}|j d|j }|| j}|| j|< |	| q|| j
| j< zd V  W d | _ i | j
| j< d S d | _ i | j
| j< w )Nz&Context is already bound to a template.)templateRuntimeErrorenginetemplate_context_processors_processorscontext_processors
__module____name__requestupdatedicts_processors_index)selfr   
processorsupdates	processornamecontext r(   d/var/www/html/bloggers_ems/venv/lib/python3.10/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.   B   s   
zTemplatesPanel.__init__c                 K   s  |d |d }}t |jto |jdp |jt| jjd }|r%d S g }|jD ]}t|dr|rd }| j	D ]\}	}
|	|krD|
} nq8|d u ri }|
 D ]\}}t |tjr^d||< qO|dkrlt |trld||< qO|d	krzt |trzd
||< qOt |ttfrd|jj |jjj||< qOtd}z7zt| W n% ty   d||< Y n ty   d||< Y n ty   d||< Y nw |||< W t| qOt| w t|}| j	||f || q*||d< t |dd |d< | j!| d S )Nr   r'   zdebug_toolbar/SKIP_TEMPLATE_PREFIXESitemsz<<request>>sql_queriesz<<sql_queries>>	LANGUAGESz<<languages>>z<<{} of {}>>Fz<<triggers database query>>z<<Unicode encode error>>z<<unhandled exception>>r   )"
isinstancer&   str
startswithtupletoolbarconfigr    hasattrr0   r6   r   HttpRequestlistr	   r
   formatr4   r   lowermodel_metalabelr   setr   r   UnicodeEncodeError	Exceptionresetr   appendgetattrr/   )r"   senderr2   r   r'   is_debug_toolbar_templatecontext_listcontext_layer
pformatted
key_values_pformatted
temp_layerkeyvaluetokenr(   r(   r)   _store_template_infoI   sh   







z#TemplatesPanel._store_template_info	Templatesc                 C   s   t | j}tdd|i S )Nz&Templates (%(num_templates)s rendered)num_templates)lenr/   _)r"   rZ   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   ra   )clsr(   r(   r)   get_urls   s   zTemplatesPanel.get_urlsc                 C      t | j d S r,   )r   connectrX   r_   r(   r(   r)   enable_instrumentation      z%TemplatesPanel.enable_instrumentationc                 C   rd   r,   )r   
disconnectrX   r_   r(   r(   r)   disable_instrumentation   rg   z&TemplatesPanel.disable_instrumentationc                 C   s   g }| j D ]F}i }|d }t|dr'|jr'|jjr'|jj|_t|jj|_ntd|_d|_||d< | j	j
d rF|dg }d||d< || q| j rj| j d d	 }| j d d }t|d
d pe|j}	|	j}
nd }g }
| |dd |
D |d d S )Nr   originz	No originr^   SHOW_TEMPLATE_CONTEXTr'   
r   r   r   c                 S   s   g | ]}t |qS r(   r   ).0xr(   r(   r)   
<listcomp>   s    z1TemplatesPanel.generate_stats.<locals>.<listcomp>)r/   template_dirsr   )r/   r?   rj   r&   origin_namer   dumpsorigin_hashr\   r=   r>   getjoinrK   rL   backenddirsrecord_stats)r"   r   responsetemplate_contexttemplate_datainfor   rO   r   engine_backendrp   r(   r(   r)   generate_stats   s6   


zTemplatesPanel.generate_stats)r   r   __qualname____doc__r.   rX   r\   	nav_titlepropertyr]   r`   r   classmethodrc   rf   ri   r~   __classcell__r(   r(   r3   r)   r+   =   s    F


r+   N)&
contextlibr   os.pathr   pprintr   r   djangor   django.corer   django.db.models.queryr	   r
   django.templater   r   django.test.signalsr   django.test.utilsr   django.urlsr   django.utils.translationr   r\   debug_toolbar.panelsr   !debug_toolbar.panels.sql.trackingr   r   debug_toolbar.panels.templatesr   _renderoriginal_renderr*   bind_templater+   r(   r(   r(   r)   <module>   s*    

