a
    Ig                     @   s   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m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is_processable_html_responsec                 C   sv   t js
dS | jdt jv r dS z<dtdddd d }| jd|krZW dS W n tj	yp   Y n0 dS )	zT
    Default function to determine whether to show the toolbar on a given page.
    FZREMOTE_ADDRT.zhost.docker.internalNz.1)
r   DEBUGZMETAgetZINTERNAL_IPSjoinsocketgethostbynamersplitgaierror)requestZ	docker_ip r   T/var/www/html/django/DPS/env/lib/python3.9/site-packages/debug_toolbar/middleware.pyshow_toolbar   s    
r   )maxsizec                  C   s&   t  d } t| trt| S | S d S )NZSHOW_TOOLBAR_CALLBACK)dt_settings
get_config
isinstancestrr   )Zfunc_or_pathr   r   r   get_show_toolbar0   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__A   s    zDebugToolbarMiddleware.__init__c              	   C   sn  t  }||rt|r"| |S t|| j}|jD ]}|  q4z,||}W t  t|jD ]}|	  q`n t  t|jD ]}|	  q0 t|jD ]}|
|| ||| q| }| ||j D ]\}}||j|< qt|s|S |j|j}	t d }
t|
}tj||	tjd}t|dkrj|d  |7  < |
||_d|v rjt|j|d< |S )NZINSERT_BEFORE)flags   zContent-Length)r   r   Zis_toolbar_requestr   Zenabled_panelsZenable_instrumentationprocess_requestr   reversedZdisable_instrumentationZgenerate_statsZgenerate_server_timingZrender_toolbarget_headersitemsheadersr   contentdecodecharsetr   r   reescapesplit
IGNORECASElenr   )r   r   r   Ztoolbarpanelresponserenderedheadervaluer'   Zinsert_beforepatternbitsr   r   r   __call__D   s@    




zDebugToolbarMiddleware.__call__c                 C   sR   i }|D ]D}| |  D ]0\}}||v rB||  d| 7  < q|||< qq|S )Nz, )r$   r%   )r   Zpanelsr&   r/   r2   r3   r   r   r   r$   v   s    z"DebugToolbarMiddleware.get_headersN)__name__
__module____qualname____doc__r   r6   staticmethodr$   r   r   r   r   r   ;   s
   2r   )r:   r*   r   	functoolsr   Zdjango.confr   Zdjango.utils.module_loadingr   Zdebug_toolbarr   Zdebug_toolbar.toolbarr   Zdebug_toolbar.utilsr   r   r   r   r   r   r   r   r   <module>   s   

