o
    >h##                     @   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drod dl#m$Z$ e$  ej%ekr{e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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/vedio/testing/chatpythonscript.ninositsolution.com/env/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,   r1   I   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#   getattrr2   append)r%   senderr5   r   r*   is_debug_toolbar_templater+   r+   r,   _store_template_infoP   s   
z#TemplatesPanel._store_template_info	Templatesc                 C   s   t | j}tdd|i S )Nz&Templates (%(num_templates)s rendered)num_templates)lenr2   _)r%   rJ   r+   r+   r,   titlei   s   
zTemplatesPanel.titlec                 C   s   | j r| j d d jS dS )Nr   r    )r2   r)   r%   r+   r+   r,   nav_subtitlep   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   rQ   )clsr+   r+   r,   get_urlsx   s   zTemplatesPanel.get_urlsc                 C      t | j d S r/   )r   connectrH   rO   r+   r+   r,   enable_instrumentation|      z%TemplatesPanel.enable_instrumentationc                 C   rT   r/   )r   
disconnectrH   rO   r+   r+   r,   disable_instrumentation   rW   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>>)r3   r9   r:   reprr>   r   HttpRequestlistrA   r
   r   r7   r    lowermodel_metalabelr   setr   r   UnicodeEncodeError	Exceptionresetr   rE   )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 ]Q}i }|d }t|dr'|jr'|jjr'|jj|_t|jj|_ntd|_d|_||d< | j	j
d rQd|vrH| |dg |d< d|d |d< || q| j ru| j d	 d
 }| j d	 d }t|dd pp|j}|j}	nd }g }	| |dd |	D |d d S )Nr   originz	No originrN   SHOW_TEMPLATE_CONTEXTri   r*   
r   r   r   c                 S   s   g | ]}t |qS r+   r   )r;   xr+   r+   r,   r=      s    z1TemplatesPanel.generate_stats.<locals>.<listcomp>)r2   template_dirsr   )r2   r:   rr   r)   origin_namer	   dumpsorigin_hashrL   rB   rC   rq   getjoinrE   rD   backenddirsrecord_stats)
r%   r!   responsetemplate_contexttemplate_datainfor   r   engine_backendrv   r+   r+   r,   generate_stats   s<   



zTemplatesPanel.generate_stats)r    r   __qualname____doc__is_asyncr1   rH   rL   	nav_titlepropertyrM   rP   r   classmethodrS   rV   rY   rq   r   __classcell__r+   r+   r6   r,   r.   B   s"    


9r.   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   rL   debug_toolbar.panelsr   !debug_toolbar.panels.sql.trackingr   r   debug_toolbar.panels.templatesr   %debug_toolbar.panels.templates.jinja2r   _renderoriginal_renderr-   bind_templater.   r+   r+   r+   r,   <module>   s2    

