
    $g#                     |   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          rd dl#m$Z$  e$             ej%        ek    rej%        e_&        ee_%        ed             Z'e'e_(         G 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              #     K   | j         t          d          || _         |j        j        | j        z   }i | _        i }|D ]B}|j         d|j         } || j                  }|| j        |<   |	                    |           C|| j
        | j        <   	 d V  d | _         i | j
        | j        <   d S # d | _         i | j
        | j        <   w xY 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contexts          d/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/debug_toolbar/panels/templates/panel.py_request_context_bind_templater.   &   s      } CDDDDM<t?OOJ DG    	&==);==)DL))(/%w)0DJt%&0-/
4)*** -/
4)*////s   B. .Cc                        e Zd ZdZ fdZd Z ed          Zed             Z	ed             Z
dZed             Zd	 Zd
 Zd Zd Z xZS )TemplatesPanelzP
    A panel that lists all templates used during processing of a response.
    c                 V     t                      j        |i | g | _        g | _        d S N)super__init__	templatespformat_layers)r'   argskwargs	__class__s      r-   r4   zTemplatesPanel.__init__G   s6    $)&))) !    c                    |d         |d         }}t          |j        t                    oP|j                            d          p6|j                            t	          | j        j        d                             }|rd S d |j        D             |d<   t          |dd           |d<   | j	        
                    |           d S )Nr   r,   zdebug_toolbar/SKIP_TEMPLATE_PREFIXESc                 6    g | ]}t          |d           ||S )items)hasattr).0context_layers     r-   
<listcomp>z7TemplatesPanel._store_template_info.<locals>.<listcomp>[   sC     
 
 
}g..
 4A

 
 
r:   r    )
isinstancer+   str
startswithtupletoolbarconfigr%   getattrr5   append)r'   senderr8   r   r,   is_debug_toolbar_templates         r-   _store_template_infoz#TemplatesPanel._store_template_infoN   s    ":.y0A' %/x}c$B$B %
M$$%566 }''dl)*BCDD  	" % 	F
 
!(
 
 
y
 (/w8Ld'S'S#$f%%%%%r:   	Templatesc                 R    t          | j                  }t          d          d|iz  S )Nz&Templates (%(num_templates)s rendered)num_templates)lenr5   _)r'   rP   s     r-   titlezTemplatesPanel.titleg   s1    DN++9::]>
 
 	
r:   c                 D    | j         r| j         d         d         j        S dS )Nr   r    )r5   r+   r'   s    r-   nav_subtitlezTemplatesPanel.nav_subtitlen   s&    > 	6>!$Z055rr:   z#debug_toolbar/panels/templates.htmlc                 <    t          dt          j        d          gS )Nztemplate_source/template_source)r+   )r   r   rY   )clss    r-   get_urlszTemplatesPanel.get_urlsv   s    ')>EVWWWXXr:   c                 8    t          j        | j                   d S r2   )r   connectrM   rV   s    r-   enable_instrumentationz%TemplatesPanel.enable_instrumentationz   s    !$";<<<<<r:   c                 8    t          j        | j                   d S r2   )r   
disconnectrM   rV   s    r-   disable_instrumentationz&TemplatesPanel.disable_instrumentation}   s    $T%>?????r:   c                    g }|D ]}d }| j         D ]\  }}||k    r|} n|i }|                                D ]k\  }}	t          |	d          rt          |	          ||<   )t	          |	t
          j                  rd||<   I|dk    rt	          |	t                    rd||<   j|dk    rt	          |	t                    rd||<   t	          |	t          t          f          r8d|	j        j                                         d|	j        j        j         d	||<   t#          j        d
          }
	 t'          |	           |	||<   n5# t(          $ r d||<   Y n$t*          $ r d||<   Y nt,          $ r d||<   Y nw xY wt#          j        |
           T# t#          j        |
           w xY wt1          |          }| j                             ||f           |                    |           |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>>)r6   r>   r?   reprrC   r	   HttpRequestlistrF   r   r   r9   r"   lowermodel_metalabelr   setr   r   UnicodeEncodeError	Exceptionresetr   rJ   )r'   context_layerscontext_listrA   
pformatted
key_values_pformatted
temp_layerkeyvaluetokens              r-   process_context_listz#TemplatesPanel.process_context_list   sq   + 3	, 3	,MJ+/+>  '
K..!,JE / !
"/"5"5"7"7 &3 &3JCuj11 $3 +/u++
3 $E4+;<< 3*7
3 --*UD2I2I-*;
3 ++
5%0H0H+*9
3 $EHk+BCC 3b!9!?!?!A!Abbu{GXG^bbb #3 !*e 4 43$UOOO /4JsOO  1 L L L.KJsOOO1 I I I.HJsOOO( H H H.GJsOOOH
 &OE2222IOE2222$Z00
#**M:+FGGG
++++sB   .E=FE5FE5"F$E52F4E55FF$c                    g }| j         D ]}i }|d         }t          |d          rH|j        rA|j        j        r5|j        j        |_        t          j        |j        j                  |_        nt          d          |_        d|_        ||d<   | j	        j
        d         rNd|vr,|                     |                    dg                     |d<   d                    |d                   |d<   |                    |           | j         rF| j         d	         d
         }| j         d	         d         }t          |dd           p|j        }|j        }	nd }g }	|                     |d |	D             |d           d S )Nr   originz	No originrU   SHOW_TEMPLATE_CONTEXTrr   r,   
r   r    r   c                 ,    g | ]}t          |          S  r   )r@   xs     r-   rB   z1TemplatesPanel.generate_stats.<locals>.<listcomp>   s    !E!E!E!(1++!E!E!Er:   )r5   template_dirsr    )r5   r?   r|   r+   origin_namer
   dumpsorigin_hashrR   rG   rH   rz   getjoinrJ   rI   backenddirsrecord_stats)
r'   r#   responsetemplate_contexttemplate_datainfor   r    engine_backendr   s
             r-   generate_statszTemplatesPanel.generate_stats   s   !^ 	* 	*MD$Z0Hx** *x *8?CW *'/';$'.}X_5I'J'J$$'(~~$')$'D|"#:; K!66484M4M%)))R885 5M.1 #'))M.,I"J"JY##D)))) > 		!%!23G!H~a(4H %Xx>>R(BRN*/MM!%M-!E!E}!E!E!E&8 	
 	
 	
 	
 	
r:   )r"   r!   __qualname____doc__r4   rM   rR   	nav_titlepropertyrS   rW   r   classmethodr[   r^   ra   rz   r   __classcell__)r9   s   @r-   r0   r0   B   s         ! ! ! ! !& & &. +I
 
 X
   X
 5HY Y [Y= = =@ @ @7 7 7r(
 (
 (
 (
 (
 (
 (
r:   r0   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   rR   debug_toolbar.panelsr   !debug_toolbar.panels.sql.trackingr   r   debug_toolbar.panels.templatesr   %debug_toolbar.panels.templates.jinja2r   _renderoriginal_renderr.   bind_templater0   r   r:   r-   <module>r      s   % % % % % % $ $ $ $ $ $       $ $ $ $ $ $ $ $             8 8 8 8 8 8 8 8 4 4 4 4 4 4 4 4 1 1 1 1 1 1 6 6 6 6 6 6       6 6 6 6 6 6 & & & & & & J J J J J J J J 0 0 0 0 0 09X HHHHHH ///'/H/H 0 0 00  > _
 _
 _
 _
 _
U _
 _
 _
 _
 _
r:   