a
    Ig#                     @   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rd 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)viewsZjinja2)patch_jinja_renderc              	   c   s   | j d urtd|| _ |jj| j }i | _i }|D ]4}|j d|j }|| j}|| j|< |	| q4|| 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 template.)templateRuntimeErrorengineZtemplate_context_processorsZ_processorscontext_processors
__module____name__requestupdatedictsZ_processors_index)selfr   Z
processorsZupdates	processornamecontext r%   `/var/www/html/django/DPS/env/lib/python3.9/site-packages/debug_toolbar/panels/templates/panel.py_request_context_bind_template&   s$    


r'   c                       sx   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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+   G   s    zTemplatesPanel.__init__c                 K   s~   |d |d  }}t |jto@|jdp@|jt| jjd }|rJd S dd |jD |d< t|dd |d< | j	
| d S )Nr   r$   zdebug_toolbar/Z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    getattrr,   append)r!   Zsenderr/   r   r$   Zis_debug_toolbar_templater%   r%   r&   _store_template_infoN   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!   r@   r%   r%   r&   titleg   s    
zTemplatesPanel.titlec                 C   s   | j r| j d d jS dS )Nr   r    )r,   r#   r!   r%   r%   r&   nav_subtitlen   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   rG   )clsr%   r%   r&   get_urlsv   s    zTemplatesPanel.get_urlsc                 C   s   t | j d S r)   )r   connectr?   rE   r%   r%   r&   enable_instrumentationz   s    z%TemplatesPanel.enable_instrumentationc                 C   s   t | j d S r)   )r   Z
disconnectr?   rE   r%   r%   r&   disable_instrumentation}   s    z&TemplatesPanel.disable_instrumentationc                 C   s  g }|D ]}d }| j D ]\}}||kr|} q2q|d u ri }| D ].\}}	t|	drjt|	||< qHt|	tjrd||< qH|dkrt|	trd||< qH|dkrt|	trd||< qHt|	t	t
frd|	jj  d|	jjj d	||< qHtd
}
ztzt|	 W nP ty    d||< Y n> ty:   d||< Y n$ tyT   d||< Y n
0 |	||< W t|
 qHt|
 0 qHt|}| j ||f || q|S )NZ_wrappedz<<request>>Zsql_queriesz<<sql_queries>>Z	LANGUAGESz<<languages>>z<<z of z>>Fz<<triggers database query>>z<<Unicode encode error>>z<<unhandled exception>>)r-   r2   r3   reprr7   r   ZHttpRequestlistr:   r
   r   r1   r   lowermodel_metalabelr   setr   r   UnicodeEncodeError	Exceptionresetr   r>   )r!   Zcontext_layerscontext_listr5   Z
pformatted
key_valuesZ_pformattedZ
temp_layerkeyvaluetokenr%   r%   r&   process_context_list   sH    







z#TemplatesPanel.process_context_listc           
      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 rd|vr| |dg |d< d|d |d< || q
| j r| j d	 d
 }| j d	 d }t|dd p|j}|j}	nd }g }	| |dd |	D |d d S )Nr   originz	No originrD   ZSHOW_TEMPLATE_CONTEXTrW   r$   
r   r   r   c                 S   s   g | ]}t |qS r%   r   )r4   xr%   r%   r&   r6          z1TemplatesPanel.generate_stats.<locals>.<listcomp>)r,   template_dirsr   )r,   r3   r]   r#   Zorigin_namer	   dumpsZorigin_hashrB   r;   r<   r\   getjoinr>   r=   backenddirsZrecord_stats)
r!   r   responseZtemplate_contextZtemplate_datainfor   r   Zengine_backendra   r%   r%   r&   generate_stats   s<    



zTemplatesPanel.generate_stats)r   r   __qualname____doc__r+   r?   rB   Z	nav_titlepropertyrC   rF   r   classmethodrI   rK   rL   r\   ri   __classcell__r%   r%   r0   r&   r(   B   s   


9r(   N)*
contextlibr   importlib.utilr   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   rB   Zdebug_toolbar.panelsr   Z!debug_toolbar.panels.sql.trackingr   r   Zdebug_toolbar.panels.templatesr   Z%debug_toolbar.panels.templates.jinja2r   _renderZoriginal_renderr'   Zbind_templater(   r%   r%   r%   r&   <module>   s0   

