
    ]j(!                     J   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jF                  ek7  rejF                  e_$        ee_#        ed        Z%e%e_&         G d de      Z'y)    )OrderedDict)contextmanager)normpath)pformatsaferepr)http)signing)QuerySetRawQuerySet)RequestContextTemplate)template_rendered)instrumented_test_render)path)gettext_lazy)Panel)SQLQueryTriggered	recording)viewsc              #   4  K   | j                   t        d      || _         |j                  j                  | j                  z   }t               | _        i }|D ]Z  }dj                  |j                  |j                        } || j                        }|| j                  |<   |j                  |       \ || j                  | j                  <   	 d  d | _         i | j                  | j                  <   y # d | _         i | j                  | j                  <   w xY ww)Nz&Context is already bound to a templatez{}.{})templateRuntimeErrorenginetemplate_context_processors_processorsr   context_processorsformat
__module____name__requestupdatedicts_processors_index)selfr   
processorsupdates	processornamecontexts          N/root/env/lib/python3.12/site-packages/debug_toolbar/panels/templates/panel.py_request_context_bind_templater+   "   s     }} CDDDM<<t?O?OOJ)mDG  	~~i22I4F4FGDLL)(/%w	 
 *1DJJt%%&0-/

4))* -/

4))*s   CDC3 !D3"DD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 xZS )TemplatesPanelzP
    A panel that lists all templates used during processing of a response.
    c                 @    t        |   |i | g | _        g | _        y N)super__init__	templatespformat_layers)r$   argskwargs	__class__s      r*   r1   zTemplatesPanel.__init__C   s&    $)&) !    c                    |d   |d   }}t        |j                  t              xrX |j                  j                  d      xs; |j                  j                  t	        | j
                  j                  d               }|ry g }|j                  D ]q  }t        |d      s|sd }| j                  D ]  \  }	}
|	|k(  s|
} n |+i }|j                         D ]  \  }}t        |t        j                        rd||<   &|dk(  rt        |t              rd||<   A|d	k(  rt        |t              rd
||<   \t        |t        t        f      rVdj!                  |j"                  j$                  j'                         |j(                  j*                  j,                        ||<   t/        d       	 t1        |       |||<   t/        d        t9        |      }| j                  j;                  ||f       |j;                  |       t ||d<   t=        |dd       |d<   | j>                  j;                  |       y # t2        $ r d||<   Y t4        $ r d||<   Y t6        $ r d||<   Y w xY w# t/        d       w xY w)Nr   r)   zdebug_toolbar/SKIP_TEMPLATE_PREFIXESitemsz<<request>>sql_queriesz<<sql_queries>>	LANGUAGESz<<languages>>z<<{} of {}>>Fz<<triggers database query>>z<<Unicode encode error>>z<<unhandled exception>>Tr   ) 
isinstancer(   str
startswithtupletoolbarconfigr"   hasattrr3   r:   r   HttpRequestlistr
   r   r   r6   r   lowermodel_metalabelr   r   r   UnicodeEncodeError	Exceptionr   appendgetattrr2   )r$   senderr5   r   r)   is_debug_toolbar_templatecontext_listcontext_layer
pformatted
key_values_pformatted
temp_layerkeyvalues                 r*   _store_template_infoz#TemplatesPanel._store_template_infoJ   sr   ":.y0A' %/x}}c$B %
MM$$%56 }}''dll))*BCD 	" %$]] 0	0M}g.=!
/3/B/B +J!]2%0

 %!#J&3&9&9&; "0
U &eT-=-=>.;JsO !M1j6M.?JsO !K/Jue4L.=JsO (+/FG.<.C.C % 8 8 > > @ % 1 1 7 7/JsO
 &e,0 ( 38
3 )$E"0F ")!4J''..z/JK##J/a0	0d )y'.w8Ld'S#$f%! $5 P2O
3#5 M2L
3#, L2K
3L
 !*$sB   ,H67I(6I%I(I%I(I%"I($I%%I((I5	Templatesc                 L    t        | j                        }t        d      d|iz  S )Nz&Templates (%(num_templates)s rendered)num_templates)lenr2   _)r$   r[   s     r*   titlezTemplatesPanel.title   s-    DNN+9:]>
 
 	
r7   c                 T    | j                   r| j                   d   d   j                  S y)Nr   r    )r2   r(   r$   s    r*   nav_subtitlezTemplatesPanel.nav_subtitle   s&    >>>>!$Z0555r7   z#debug_toolbar/panels/templates.htmlc                 <    t        dt        j                  d      gS )Nztemplate_source/template_source)r(   )r   r   rd   )clss    r*   get_urlszTemplatesPanel.get_urls   s    ')>)>EVWXXr7   c                 B    t        j                  | j                         y r/   )r   connectrX   ra   s    r*   enable_instrumentationz%TemplatesPanel.enable_instrumentation   s    !!$";";<r7   c                 B    t        j                  | j                         y r/   )r   
disconnectrX   ra   s    r*   disable_instrumentationz&TemplatesPanel.disable_instrumentation   s    $$T%>%>?r7   c           	         g }| j                   D ]  }i }|d   }t        |d      rl|j                  r`|j                  j                  rJ|j                  j                  |_        t        j                  |j                  j                        |_        nt        d      |_        d|_        ||d<   | j                  j                  d   r&|j                  dg       }dj                  |      |d<   |j                  |        | j                   rL| j                   d   d	   }| j                   d   d   }t        |d
d       xs t        |d      }	|	j                  }
nd }g }
| j!                  ||
D cg c]  }t#        |       c}|d       y c c}w )Nr   originz	No originr`   SHOW_TEMPLATE_CONTEXTr)   
r   r   r   backend)r2   template_dirsr   )r2   rC   rn   r(   origin_namer	   dumpsorigin_hashr]   rA   rB   getjoinrL   rM   dirsrecord_statsr   )r$   r    responsetemplate_contexttemplate_datainfor   rP   r   engine_backendrr   xs               r*   generate_statszTemplatesPanel.generate_stats   sr   !^^ 	*MD$Z0Hx*x8??CWCW'/';';$'.}}X__5I5I'J$'(~$')$'D||""#:;,00B?"&))L"9Y##D)	*$ >>!%!23G!H~~a(4H %Xx> ')CN +//M!%M-7D!E!(1+!E&8	
 "Fs   +F
)r   r   __qualname____doc__r1   rX   r]   	nav_titlepropertyr^   rb   r   classmethodrf   ri   rl   r   __classcell__)r6   s   @r*   r-   r-   >   sp    !B&L +I
 
  
 5HY Y=@'
r7   r-   N)(collectionsr   
contextlibr   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   r]   debug_toolbar.panelsr   !debug_toolbar.panels.sql.trackingr   r   debug_toolbar.panels.templatesr   _renderoriginal_renderr+   bind_templater-    r7   r*   <module>r      s    # %  $   8 4 1 6  6 & J 0 //'//H/H 0 00  > T
U T
r7   