î
à^Q\&  ã               @   s”  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 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# d  d l$ m% Z% m& Z& d  d l' m( Z( e j) e k r_e j) e _* e e _) n  e d d „  ƒ Z+ e+ e _, Gd d „  d e# ƒ Z- d S)é    )Úabsolute_importÚunicode_literals)ÚOrderedDict)Úcontextmanager)Únormpath)Úpformat)Úhttp)Úurl)Úsigning)ÚQuerySetÚRawQuerySet)ÚRequestContextÚTemplate)Útemplate_rendered)Úinstrumented_test_render)Úsix)Ú
force_text)Úugettext_lazy)ÚPanel)ÚSQLQueryTriggeredÚ	recording)Úviewsc             c   sÖ   |  j  d  k	 r t d ƒ ‚ n  | |  _  | j j |  j } t ƒ  |  _ i  } xM | D]E } d | j | j f } | |  j	 ƒ } | |  j | <| j
 | ƒ qS W| |  j |  j <z	 d  VWd  d  |  _  i  |  j |  j <Xd  S)Nz&Context is already bound to a templatez%s.%s)ÚtemplateÚRuntimeErrorÚengineZtemplate_context_processorsZ_processorsr   Úcontext_processorsÚ
__module__Ú__name__ÚrequestÚupdateÚdictsZ_processors_index)Úselfr   Z
processorsZupdatesÚ	processorÚnameÚcontext© r%   úX/var/www/dbchiro/venv/build/django-debug-toolbar/debug_toolbar/panels/templates/panel.pyÚ_request_context_bind_template%   s"    		
		r'   c                   s    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 ‡  S)ÚTemplatesPanelzP
    A panel that lists all templates used during processing of a response.
    c                s8   t  t |  ƒ j | | Ž  g  |  _ g  |  _ g  |  _ d  S)N)Úsuperr(   Ú__init__Ú	templatesÚseen_layersÚpformat_layers)r!   ÚargsÚkwargs)Ú	__class__r%   r&   r*   F   s    		zTemplatesPanel.__init__c             K   s÷  | d | d } } t  | j t j ƒ rb | j j d ƒ s^ | j j t |  j j d ƒ ƒ rb d  Sg  } xX| j D]M} t	 | d ƒ rr | rr t
 | j ƒ  ƒ } | |  j k rÝ |  j j | ƒ } |  j | }	 | j |	 ƒ q¿i  }
 xi| j ƒ  D][\ } } t  | t j ƒ rd |
 | <qð | d k rCt  | t ƒ rCd |
 | <qð | d	 k rkt  | t ƒ rkd
 |
 | <qð t  | t t f ƒ rÂd | j j j | j j f } d | j j j ƒ  | f |
 | <qð z{ y t d ƒ t | ƒ WnR t k
 rûd |
 | <YnA t k
 rd |
 | <Yn& t k
 r1d |
 | <Yn X| |
 | <Wd  t d ƒ Xqð W|  j j | ƒ |  j j | ƒ } y t t  |
 ƒ ƒ }	 Wn t k
 r›Yq¿X|  j j! | |	 ƒ | j |	 ƒ qr qr W| | d <t" | d d  ƒ | d <|  j# j | ƒ d  S)Nr   r$   zdebug_toolbar/ZSKIP_TEMPLATE_PREFIXESÚitemsz<<request>>Zsql_queriesz<<sql_queries>>Z	LANGUAGESz<<languages>>z%s.%sz<<%s of %s>>Fz<<triggers database query>>z<<unicode encode error>>z<<unhandled exception>>Tr   )$Ú
isinstancer#   r   Ústring_typesÚ
startswithÚtupleÚtoolbarÚconfigr    ÚhasattrÚsortedr1   r,   Úindexr-   Úappendr   ZHttpRequestÚlistr   r   ÚmodelZ_metaZ	app_labelr   r0   Úlowerr   r   r   ÚUnicodeEncodeErrorÚ	Exceptionr   ÚinsertÚgetattrr+   )r!   Zsenderr/   r   r$   Úcontext_listZcontext_layerZ
key_valuesr:   Z
pformattedZ
temp_layerÚkeyÚvalueZ
model_namer%   r%   r&   Ú_store_template_infoT   sb    	 

z#TemplatesPanel._store_template_infoZ	Templatesc             C   s$   t  |  j ƒ } t d ƒ i | d 6S)Nz&Templates (%(num_templates)s rendered)Únum_templates)Úlenr+   Ú_)r!   rG   r%   r%   r&   Útitle£   s    zTemplatesPanel.titlec             C   s   |  j  r |  j  d d j Sd S)Nr   r   Ú )r+   r#   )r!   r%   r%   r&   Únav_subtitle¨   s    	zTemplatesPanel.nav_subtitlez#debug_toolbar/panels/templates.htmlc             C   s   t  d t j d d ƒg S)Nz^template_source/$r#   Útemplate_source)r	   r   rM   )Úclsr%   r%   r&   Úget_urls°   s    zTemplatesPanel.get_urlsc             C   s   t  j |  j ƒ d  S)N)r   ÚconnectrF   )r!   r%   r%   r&   Úenable_instrumentation¶   s    z%TemplatesPanel.enable_instrumentationc             C   s   t  j |  j ƒ d  S)N)r   Z
disconnectrF   )r!   r%   r%   r&   Údisable_instrumentation¹   s    z&TemplatesPanel.disable_instrumentationc             C   s~  g  } xÞ |  j  D]Ó } i  } | j d d  ƒ } t | d ƒ r| | j r| | j j r| | j j | _ t j | j j ƒ | _ n t	 d ƒ | _ d | _ | | d <|  j
 j d rÖ | j d g  ƒ } d j | ƒ | d <n  | j | ƒ q W|  j  r?|  j  d d	 } |  j  d d } t | d
 d  ƒ p0t | d ƒ }	 |	 j }
 n d  } g  }
 |  j i | d 6d d „  |
 Dƒ d 6| d	 6ƒ d  S)Nr   Úoriginz	No originrK   ZSHOW_TEMPLATE_CONTEXTr$   Ú
r   r   r   Úbackendr+   c             S   s   g  |  ] } t  | ƒ ‘ q Sr%   )r   )Ú.0Úxr%   r%   r&   ú
<listcomp>Ü   s   	 z1TemplatesPanel.generate_stats.<locals>.<listcomp>Útemplate_dirs)r+   Úgetr8   rS   r#   Zorigin_namer
   ÚdumpsZorigin_hashrI   r6   r7   Újoinr;   rB   ÚdirsZrecord_stats)r!   r   ÚresponseZtemplate_contextZtemplate_dataÚinfor   rC   r   Zengine_backendrY   r%   r%   r&   Úgenerate_stats¼   s2    $	
	!	zTemplatesPanel.generate_stats)r   r   Ú__qualname__Ú__doc__r*   rF   rI   Z	nav_titleÚpropertyrJ   rL   r   ÚclassmethodrO   rQ   rR   r`   r%   r%   )r0   r&   r(   B   s   Mr(   N).Ú
__future__r   r   Úcollectionsr   Ú
contextlibr   Úos.pathr   Úpprintr   Zdjangor   Zdjango.conf.urlsr	   Zdjango.corer
   Zdjango.db.models.queryr   r   Zdjango.templater   r   Zdjango.test.signalsr   Zdjango.test.utilsr   Zdjango.utilsr   Zdjango.utils.encodingr   Zdjango.utils.translationr   rI   Zdebug_toolbar.panelsr   Z!debug_toolbar.panels.sql.trackingr   r   Zdebug_toolbar.panels.templatesr   Z_renderZoriginal_renderr'   Zbind_templater(   r%   r%   r%   r&   Ú<module>   s.   	