o
    gZ                     @   s   d 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Zd	d
 Zedddd ZG dd dZdS )z
Debug Toolbar middleware
    N)	lru_cache)settings)import_string)DebugToolbar)clear_stack_trace_caches)z	text/htmlzapplication/xhtml+xmlc                 C   s   t jo| jdt jv S )zT
    Default function to determine whether to show the toolbar on a given page.
    REMOTE_ADDR)r   DEBUGMETAgetINTERNAL_IPS)request r   X/var/www/html/bloggers_ems/venv/lib/python3.10/site-packages/debug_toolbar/middleware.pyshow_toolbar   s   r   )maxsizec                  C   s"   t  d } t| trt| S | S )NSHOW_TOOLBAR_CALLBACK)dt_settings
get_config
isinstancestrr   )func_or_pathr   r   r   get_show_toolbar   s   
r   c                   @   s,   e Zd ZdZdd Zdd Zedd ZdS )	DebugToolbarMiddlewarezm
    Middleware to set up Debug Toolbar on incoming request and render toolbar
    on outgoing response.
    c                 C   s
   || _ d S )N)get_response)selfr   r   r   r   __init__*   s   
zDebugToolbarMiddleware.__init__c              	   C   s  t  }||rt|r| |S t|| j}|jD ]}|  qz||}W t  t|jD ]}|	  q0nt  t|jD ]}|	  q@w t|jD ]}|
|| ||| qM| }| ||j D ]	\}}||j|< qi|dd}	|dddd }
t|dds|	dks|
tvr|S |j|j}t d }t|}tj||tjd	}t|d
kr|d  |7  < |||_d|v rt|j|d< |S )NzContent-Encoding zContent-Type;r   	streamingFINSERT_BEFORE)flags   zContent-Length)r   r   is_toolbar_requestr   enabled_panelsenable_instrumentationprocess_requestr   reverseddisable_instrumentationgenerate_statsgenerate_server_timingrender_toolbarget_headersitemsheadersr
   splitgetattr_HTML_TYPEScontentdecodecharsetr   r   reescape
IGNORECASElenjoin)r   r   r   toolbarpanelresponserenderedheadervaluecontent_encodingcontent_typer2   insert_beforepatternbitsr   r   r   __call__-   sN   






zDebugToolbarMiddleware.__call__c                 C   sR   i }|D ]"}| |  D ]\}}||v r!||  d| 7  < q|||< qq|S )Nz, )r,   r-   )r   panelsr.   r;   r>   r?   r   r   r   r,   e   s   
z"DebugToolbarMiddleware.get_headersN)__name__
__module____qualname____doc__r   rE   staticmethodr,   r   r   r   r   r   $   s    8r   )rJ   r5   	functoolsr   django.confr   django.utils.module_loadingr   debug_toolbarr   debug_toolbar.toolbarr   debug_toolbar.utilsr   r1   r   r   r   r   r   r   r   <module>   s    

