o
    QDi%                     @   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" d dl#m$Z$ edrud dl%m&Z& e&  ej'ekrej'e_(ee_'edd Z)e)e_*G dd deZ+dS )    )contextmanager)	find_specnormpath)pformatsaferepr)http)signing)QuerySetRawQuerySet)RequestContextTemplate)template_rendered)instrumented_test_render)path)gettext_lazy)Panel)SQLQueryTriggered	allow_sql)views	force_strjinja2)patch_jinja_renderc              	   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-   ]/var/www/Datamplify/venv/lib/python3.10/site-packages/debug_toolbar/panels/templates/panel.py_request_context_bind_template'   s&   


r/   c                       s|   e Zd 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dd Z  ZS )TemplatesPanelzP
    A panel that lists all templates used during processing of a response.
    Tc                    s"   t  j|i | g | _g | _d S N)super__init__	templatespformat_layers)r'   argskwargs	__class__r-   r.   r3   J   s   
zTemplatesPanel.__init__c                 K   s~   |d |d }}t |jto |jdp |jt| jjd }|r%d S dd |jD |d< t|dd |d< | j	
| d S )Nr   r,   zdebug_toolbar/SKIP_TEMPLATE_PREFIXESc                 S   s   g | ]}t |d r|r|qS )items)hasattr).0context_layerr-   r-   r.   
<listcomp>^   s    z7TemplatesPanel._store_template_info.<locals>.<listcomp>r    )
isinstancer+   str
startswithtupletoolbarconfigr%   getattrr4   append)r'   senderr7   r   r,   is_debug_toolbar_templater-   r-   r.   _store_template_infoQ   s   
z#TemplatesPanel._store_template_info	Templatesc                 C   s    t |  d }tdd|i S )Nr4   z&Templates (%(num_templates)s rendered)num_templates)len	get_stats_)r'   rL   r-   r-   r.   titlej   s   zTemplatesPanel.titlec                 C   s$   |   d }|r|d d d S dS )Nr4   r   r   r+    )rN   )r'   r4   r-   r-   r.   nav_subtitleq   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   rS   )clsr-   r-   r.   get_urlsz   s   zTemplatesPanel.get_urlsc                 C      t | j d S r1   )r   connectrJ   r'   r-   r-   r.   enable_instrumentation~      z%TemplatesPanel.enable_instrumentationc                 C   rV   r1   )r   
disconnectrJ   rX   r-   r-   r.   disable_instrumentation   rZ   z&TemplatesPanel.disable_instrumentationc                 C   s  g }|D ]}d }| j D ]\}}||kr|} nq|d u ri }| D ]\}}	t|	dr2t|	||< q"t|	tjr=d||< q"|dkrKt|	trKd||< q"|dkrYt|	trYd||< q"t|	t	t
frsd|	jj  d|	jjj d	||< q"td
}
z7zt|	 W n% ty   d||< Y n ty   d||< Y n ty   d||< Y nw |	||< W t|
 q"t|
 w t|}| j ||f || q|S )N_wrappedz<<request>>sql_queriesz<<sql_queries>>	LANGUAGESz<<languages>>z<<z of z>>Fz<<triggers database query>>z<<Unicode encode error>>z<<unhandled exception>>)r5   r;   r<   reprr@   r   HttpRequestlistrC   r
   r   r9   r"   lowermodel_metalabelr   setr   r   UnicodeEncodeError	Exceptionresetr   rG   )r'   context_layerscontext_listr>   
pformatted
key_values_pformatted
temp_layerkeyvaluetokenr-   r-   r.   process_context_list   sN   




z#TemplatesPanel.process_context_listc           
      C   s@  g }| j D ]X}i }|d }t|dr'|jr'|jjr'|jj|_t|jj|_ntd|_d|_|j|j|jd|d< | j	j
d rXd|vrO| |dg |d< d	|d |d< || q| j r| j d
 d rvdd | j d
 d  D nd }| j d
 d }t|dd p|j}|j}	nd }g }	| |dd |	D |d d S )Nr   originz	No originrQ   )r+   origin_nameorigin_hashSHOW_TEMPLATE_CONTEXTrl   r,   
r   r    c                 S   s   i | ]	\}}|t |qS r-   r   )r=   rq   rr   r-   r-   r.   
<dictcomp>   s    z1TemplatesPanel.generate_stats.<locals>.<dictcomp>r   c                 S   s   g | ]}t |qS r-   r   )r=   xr-   r-   r.   r?      s    z1TemplatesPanel.generate_stats.<locals>.<listcomp>)r4   template_dirsr    )r4   r<   ru   r+   rv   r	   dumpsrw   rO   rD   rE   rt   getjoinrG   r;   rF   backenddirsrecord_stats)
r'   r#   responsetemplate_contexttemplate_datainfor   r    engine_backendr|   r-   r-   r.   generate_stats   sL   




zTemplatesPanel.generate_stats)r"   r!   __qualname____doc__is_asyncr3   rJ   rO   	nav_titlepropertyrP   rR   r   classmethodrU   rY   r\   rt   r   __classcell__r-   r-   r8   r.   r0   C   s"    


9r0   N),
contextlibr   importlib.utilr   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   rO   debug_toolbar.panelsr   !debug_toolbar.panels.sql.trackingr   r   debug_toolbar.panels.templatesr   debug_toolbar.sanitizer   %debug_toolbar.panels.templates.jinja2r   _renderoriginal_renderr/   bind_templater0   r-   r-   r-   r.   <module>   s4    

