
    $g                         d Z ddlZddl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 ddlmZmZ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"  G d d          Z#d Z$ddZ%dS )zA
The main DebugToolbar class that loads and renders the Toolbar.
    N)OrderedDict)	lru_cache)apps)settings)ImproperlyConfigured)Signal)TemplateSyntaxError)render_to_string)includepathre_pathresolve)Resolver404import_string)get_languageoverride)APP_NAMEr   c                      e Zd Z e            Zd Zed             Zed             Zd Z	d Z
d Z e            Zd Zed             Zd	Zed
             Zd	Zed             Zed             Ze ed	          d                         Zd	S )DebugToolbarc                    || _         t          j                                                    | _        g }t          |                                           D ]1} || |          }|                    |           |j        r|j	        }2|| _	        t                      | _        |r%|                                }|| j        |j        <   |%i | _        i | _        d | _        | j                            ||            d S )N)toolbar)requestdt_settings
get_configcopyconfigreversedget_panel_classesappendenabledprocess_requestr   _panelspoppanel_idstatsserver_timing_statsstore_id_createdsend)selfr   get_responsepanelspanel_classpanels         U/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/debug_toolbar/toolbar.py__init__zDebugToolbar.__init__   s    !,..3355#D$:$:$<$<== 	5 	5KKl33EMM%   } 5$4+ #}} 	1JJLLE+0DL(  	1 
#% 7D11111    c                 N    t          | j                                                  S )z5
        Get a list of all available panels.
        )listr#   valuesr+   s    r0   r-   zDebugToolbar.panels4   s     
 DL''))***r2   c                 H    d | j                                         D             S )zG
        Get a list of panels enabled for the current request.
        c                      g | ]}|j         	|S  )r!   ).0r/   s     r0   
<listcomp>z/DebugToolbar.enabled_panels.<locals>.<listcomp>@   s    JJJ%EMJJJJr2   )r#   r5   r6   s    r0   enabled_panelszDebugToolbar.enabled_panels;   s'    
 KJ4<#6#6#8#8JJJJr2   c                     | j         |         S )zV
        Get the panel with the given id, which is the class name by default.
        )r#   )r+   r%   s     r0   get_panel_by_idzDebugToolbar.get_panel_by_idB   s     |H%%r2   c                 j   |                                  s|                                  	 d| i}| j        d         pt                      }t	          |          5  t          d|          cddd           S # 1 swxY w Y   dS # t          $ r& t          j        d          st          d          d w xY w)zA
        Renders the overall Toolbar with panels inside.
        r   TOOLBAR_LANGUAGEzdebug_toolbar/base.htmlNzdjango.contrib.staticfileszThe debug toolbar requires the staticfiles contrib app. Add 'django.contrib.staticfiles' to INSTALLED_APPS and define STATIC_URL in your settings.)
should_render_panelsstorer   r   lang_overrider
   r	   r   is_installedr   )r+   contextlangs      r0   render_toolbarzDebugToolbar.render_toolbarJ   s.    ((** 	JJLLL	 $'G;12DlnnDt$$ L L'(A7KKL L L L L L L L L L L L L L L L L L" 	 	 	$%ABB *:  	 	s/   .B A5(B 5A99B <A9=B 0B2c                 d    | j         d         x} | j        j                            dd          }|S )zDetermine whether the panels should be rendered during the request

        If False, the panels will be loaded via Ajax.
        RENDER_PANELSNzwsgi.multiprocessT)r   r   METAget)r+   render_panelss     r0   rA   z!DebugToolbar.should_render_panels_   s9    
 "[99MB !L-112EtLLMr2   c                    | j         rd S t          j                    j        | _         | | j        | j         <   t          | j        d         t          | j                            D ]}| j                            d           d S )NRESULTS_CACHE_SIZEF)last)	r(   uuiduuid4hex_storeranger   lenpopitem)r+   _s     r0   rB   zDebugToolbar.storeq   s    = 	F
(%)DM"t{#78#dk:J:JKK 	, 	,AKU++++	, 	,r2   c                 6    | j                             |          S )N)rS   rK   )clsr(   s     r0   fetchzDebugToolbar.fetchz   s    z~~h'''r2   Nc                 f    | j         $d t          j                    D             }|| _         | j         S )Nc                 ,    g | ]}t          |          S r9   r   )r:   
panel_paths     r0   r;   z2DebugToolbar.get_panel_classes.<locals>.<listcomp>   s-       .8j))  r2   )_panel_classesr   
get_panels)rY   panel_classess     r0   r   zDebugToolbar.get_panel_classes   sE    % <G<R<T<T  M "/C!!r2   c                     | j         Sddlm} t          d|j        d          g}|                                 D ]}||                                z  }|| _         | j         S )N   )viewszrender_panel/render_panel)name)_urlpatterns rc   r   rd   r   get_urls)rY   rc   urlpatternsr.   s       r0   rh   zDebugToolbar.get_urls   s    #
 _e&8~NNNK  #4466 6 6{33555*Cr2   c                     	 |j         p#t          |j        t          |dd                    }n# t          $ r Y dS w xY w|j        o|j        d         t          k    S )zF
        Determine if the request is for a DebugToolbar view.
        urlconfNF)resolver_matchr   r   getattrr   
namespacesr   )rY   r   rm   s      r0   is_toolbar_requestzDebugToolbar.is_toolbar_request   st    	$3 wggy$??8 8NN  	 	 	55	(V^-Fr-Jh-VVs   +. 
<<)maxsizec                      t          j                    d         } t          | t                    rt	          |           S | S )NOBSERVE_REQUEST_CALLBACK)r   r   
isinstancestrr   )func_or_paths    r0   get_observe_requestz DebugToolbar.get_observe_request   s>    
 #-//0JKlC(( 	  ...r2   )__name__
__module____qualname__r   r)   r1   propertyr-   r<   r>   rG   rA   r   rS   rB   classmethodrZ   r^   r   rf   rh   rp   staticmethodr   rw   r9   r2   r0   r   r      s\       vxxH2 2 20 + + X+ K K XK& & &  *    []]F, , , ( ( [( N" " [" L    [  W W [W Yt     \     r2   r   c                     dS )zM
    Determine whether to update the toolbar from a client side request.
    Tr9   )r   s    r0   observe_requestr      s	     4r2   	__debug__c                     | st          d          t          j        sg S t          dt	          j        |                     d                    z  t          d                    gS )a  
    Return a URL pattern for serving toolbar in debug mode.

    from django.conf import settings
    from debug_toolbar.toolbar import debug_toolbar_urls

    urlpatterns = [
        # ... the rest of your URLconf goes here ...
    ] + debug_toolbar_urls()
    zEmpty urls prefix not permittedz^%s//zdebug_toolbar.urls)r   r   DEBUGr   reescapelstripr   )prefixs    r0   debug_toolbar_urlsr      sk      "#DEEE^ 	bic 2 2333())	
 	
 r2   )r   )&__doc__r   rP   collectionsr   	functoolsr   django.appsr   django.confr   django.core.exceptionsr   django.dispatchr   django.templater	   django.template.loaderr
   django.urlsr   r   r   r   django.urls.exceptionsr   django.utils.module_loadingr   django.utils.translationr   r   rC   debug_toolbarr   r   r   r   r   r9   r2   r0   <module>r      s    
			  # # # # # #                         7 7 7 7 7 7 " " " " " " / / / / / / 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 . . . . . . 5 5 5 5 5 5 L L L L L L L L ; ; ; ; ; ; ; ;_  _  _  _  _  _  _  _ D       r2   