o
    `oi|"                     @   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engineZtemplate_context_processorsZ_processorscontext_processors
__module____name__requestupdatedictsZ_processors_index)selfr   Z
processorsZupdates	processornamecontext r#   l/var/www/html/kuke-dev/django-kuke/venv/lib/python3.10/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)   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 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>V   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_infoI   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$   titleb   s   
zTemplatesPanel.titlec                 C   s   | j r| j d d jS dS )Nr   r    )r*   r!   r   r#   r#   r$   nav_subtitlei   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   rE   )clsr#   r#   r$   get_urlsq   s   zTemplatesPanel.get_urlsc                 C      t | j d S r'   )r   connectr=   rC   r#   r#   r$   enable_instrumentationu      z%TemplatesPanel.enable_instrumentationc                 C   rH   r'   )r   Z
disconnectr=   rC   r#   r#   r$   disable_instrumentationx   rK   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 )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+   r0   r1   reprr5   r   ZHttpRequestlistr8   r	   r
   r/   r   lowermodel_metalabelr   setr   r   UnicodeEncodeError	Exceptionresetr   r<   )r   Zcontext_layerscontext_listr3   Z
pformatted
key_valuesZ_pformattedZ
temp_layerkeyvaluetokenr#   r#   r$   process_context_list{   sR   




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 originrB   ZSHOW_TEMPLATE_CONTEXTrW   r"   
r   r   r   c                 S   s   g | ]}t |qS r#   r   )r2   xr#   r#   r$   r4      s    z1TemplatesPanel.generate_stats.<locals>.<listcomp>)r*   template_dirsr   )r*   r1   r]   r!   Zorigin_namer   dumpsZorigin_hashr@   r9   r:   r\   getjoinr<   r;   backenddirsZrecord_stats)
r   r   responseZtemplate_contextZtemplate_datainfor   r   Zengine_backendr`   r#   r#   r$   generate_stats   s<   



zTemplatesPanel.generate_stats)r   r   __qualname____doc__r)   r=   r@   Z	nav_titlepropertyrA   rD   r   classmethodrG   rJ   rL   r\   rh   __classcell__r#   r#   r.   r$   r&   =   s     


9r&   N)&
contextlibr   Z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   r@   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*    

