
    7 f                      >   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jB                  ek7  rejB                  e_"        ee_!        ed        Z#e#e_$         G d de      Z%y)    )contextmanager)normpath)pformatsaferepr)http)signing)QuerySetRawQuerySet)RequestContextTemplate)template_rendered)instrumented_test_render)path)gettext_lazy)Panel)SQLQueryTriggered	allow_sql)viewsc              #     K   | j                   t        d      || _         |j                  j                  | j                  z   }i | _        i }|D ]O  }|j                   d|j                   } || j                        }|| j
                  |<   |j                  |       Q || j                  | j                  <   	 d  d | _         i | j                  | j                  <   y # d | _         i | j                  | j                  <   w xY w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          Z/var/www/equiseq/venv/lib/python3.11/site-packages/debug_toolbar/panels/templates/panel.py_request_context_bind_templater*   !   s     }} CDDDM<<t?O?OOJ DG  	&&'q););(<=DLL)(/%w	 
 *1DJJt%%&0-/

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

4))*s   B8D;C  ?!D "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)   r0   zTemplatesPanel.__init__B   s&    $)&) !    c                 0   |d   |d   }}t        |j                  t              xrX |j                  j                  d      xs; |j                  j                  t	        | j
                  j                  d               }|ry g }|j                  D ]  }t        |d      s|sd }| j                  D ]  \  }	}
|	|k(  s|
} n |Ai }|j                         D ]  \  }}t        |t        j                        rd||<   '|dk(  rt        |t              rd||<   B|d	k(  rt        |t              rd
||<   ]t        |t        t        f      rVdj!                  |j"                  j$                  j'                         |j(                  j*                  j,                        ||<   t/        j0                  d      }	 t3        |       |||<   t/        j:                  |        t=        |      }| j                  j?                  ||f       |j?                  |        ||d<   tA        |dd       |d<   | jB                  j?                  |       y # t4        $ r d||<   Y t6        $ r d||<   Y t8        $ r d||<   Y w xY w# t/        j:                  |       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>>r   )"
isinstancer'   str
startswithtupletoolbarconfigr!   hasattrr2   r9   r   HttpRequestlistr	   r
   formatr5   r   lowermodel_metalabelr   setr   r   UnicodeEncodeError	Exceptionresetr   appendgetattrr1   )r#   senderr4   r   r(   is_debug_toolbar_templatecontext_listcontext_layer
pformatted
key_values_pformatted
temp_layerkeyvaluetokens                  r)   _store_template_infoz#TemplatesPanel._store_template_infoI   s   ":.y0A' %/x}}c$B %
MM$$%56 }}''dll))*BCD 	" %$]] 0	0M}g.=!
/3/B/B +J!]2%0

 %!#J&3&9&9&; "7
U &eT-=-=>.;JsO !M1j6M.?JsO !K/Jue4L.=JsO (+/FG.<.C.C % 8 8 > > @ % 1 1 7 7/JsO
 %.MM%$8E7 ( 38
3 ) 6E"7F ")!4J''..z/JK##J/a0	0d )y'.w8Ld'S#$f%! $5 P2O
3#5 M2L
3#, L2K
3L
 !* 6sB   7II>I;I>I;)I>+I;8I>:I;;I>>J	Templatesc                 L    t        | j                        }t        d      d|iz  S )Nz&Templates (%(num_templates)s rendered)num_templates)lenr1   _)r#   r^   s     r)   titlezTemplatesPanel.title   s-    DNN+9:]>
 
 	
r6   c                 T    | j                   r| j                   d   d   j                  S y)Nr   r    )r1   r'   r#   s    r)   nav_subtitlezTemplatesPanel.nav_subtitle   s&    >>>>!$Z0555r6   z#debug_toolbar/panels/templates.htmlc                 <    t        dt        j                  d      gS )Nztemplate_source/template_source)r'   )r   r   rg   )clss    r)   get_urlszTemplatesPanel.get_urls   s    ')>)>EVWXXr6   c                 B    t        j                  | j                         y r.   )r   connectr[   rd   s    r)   enable_instrumentationz%TemplatesPanel.enable_instrumentation   s    !!$";";<r6   c                 B    t        j                  | j                         y r.   )r   
disconnectr[   rd   s    r)   disable_instrumentationz&TemplatesPanel.disable_instrumentation   s    $$T%>%>?r6   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 |j                  }	|	j                   }
nd }g }
| j#                  ||
D cg c]  }t%        |       c}|d       y c c}w )Nr   originz	No originrc   SHOW_TEMPLATE_CONTEXTr(   
r   r   r   )r1   template_dirsr   )r1   rB   rq   r'   origin_namer   dumpsorigin_hashr`   r@   rA   getjoinrN   rO   backenddirsrecord_statsr   )r#   r   responsetemplate_contexttemplate_datainfor   rR   r   engine_backendrt   xs               r)   generate_statszTemplatesPanel.generate_stats   si   !^^ 	*MD$Z0Hx*x8??CWCW'/';';$'.}}X__5I5I'J$'(~$')$'D||""#:;,00B?"&))L"9Y##D)	*$ >>!%!23G!H~~a(4H %Xx>R(BRBRN*//M!%M-7D!E!(1+!E&8	
 "Fs   +F
)r   r   __qualname____doc__r0   r[   r`   	nav_titlepropertyra   re   r   classmethodri   rl   ro   r   __classcell__)r5   s   @r)   r,   r,   =   sp    !B&L +I
 
  
 5HY Y=@%
r6   r,   N)&
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,    r6   r)   <module>r      s    %  $   8 4 1 6  6 & J 0 //'//H/H 0 00  > R
U R
r6   