o
    >h7                     @   s   d dl 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mZmZ g d	Zd
d Zdd ZG dd deZdS )    N)perf_counter)Local)settings)CacheHandlercaches)gettext_lazyngettext)Panel)get_stack_traceget_template_inforender_stacktrace)addgetset
get_or_settouchdeleteclearget_manyset_manydelete_manyhas_keyincrdecrincr_versiondecr_versionc                    s4   t  t fdd}t | d S )Nc                     s.    j }|d u r| i |S | | |S N)_djdt_panel_record_call)argskwargspanelcachenameoriginal_method z/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/debug_toolbar/panels/cache.pywrapper$   s   z%_monkey_patch_method.<locals>.wrapper)getattr	functoolswrapssetattr)r#   r$   r(   r&   r"   r'   _monkey_patch_method!   s   
r-   c                 C   s,   t | dstD ]}t| | qd| _d S d S )N_djdt_patchedT)hasattrWRAPPED_CACHE_METHODSr-   r.   )r#   r$   r&   r&   r'   _monkey_patch_cache/   s
   

r1   c                       s   e Zd ZdZdZdZe Z fddZe	dd Z
e	dd	 Zd
d Zdd ZedZedd Zedd Zdd Zdd Zdd Zdd Z  ZS )
CachePanelz3
    Panel that displays the cache statistics.
    zdebug_toolbar/panels/cache.htmlTc                    s<   t  j|i | d| _d| _d| _g | _ttd| _	d S )Nr   )
super__init__
total_timehitsmissescallsdictfromkeysr0   counts)selfr   r    	__class__r&   r'   r4   A   s   zCachePanel.__init__c                 C   s   t | jddS )a  
        Return the currently enabled CachePanel instance or None.

        If a request is in process with a CachePanel enabled, this will return that
        panel (based on the current thread or async task).  Otherwise it will return
        None.
        current_instanceN)r)   _context_locals)clsr&   r&   r'   r?   I   s   	zCachePanel.current_instancec                    s<   t tdstjt fdd}|t_dt_d S d S )Nr.   c                    s,   | |}   }|d urt| ||_|S r   )r?   r1   r   )r<   aliasr#   r!   rA   r%   r&   r'   r(   ]   s   
z!CachePanel.ready.<locals>.wrapperT)r/   r   create_connectionr*   r+   r.   )rA   r(   r&   rC   r'   readyT   s   

zCachePanel.readyc	           
   
   C   s   |dks|dkr|d u r|  j d7  _ n.|  jd7  _n&|dkrBd|v r(|d n|d }	|  jt|7  _|  j t|	t| 7  _ |d9 }|  j|7  _| j|  d7  < | j||||t|||d d S )	Nr   r      r   keysr   i  )timer$   r   r    tracetemplate_infobackend)r7   r6   lenr5   r;   r8   appendr   )
r<   r$   
time_takenreturn_valuer   r    rI   rJ   rK   rG   r&   r&   r'   _store_call_infoi   s*   zCachePanel._store_call_infoc           	   
   C   s^   d |_ zt }||i |}t | }W | |_ n| |_ w | j|||||tddt |d |S )N   )skip)r$   rN   rO   r   r    rI   rJ   rK   )r   r   rP   r
   r   )	r<   r#   r$   r%   r   r    
start_timevaluetr&   r&   r'   r      s"   
zCachePanel._record_callCachec                 C   s"   t | j}tdd||| jd S )Nz$%(cache_calls)d call in %(time).2fmsz%%(cache_calls)d calls in %(time).2fms)cache_callsrH   )rL   r8   r   r5   )r<   rW   r&   r&   r'   nav_subtitle   s   

zCachePanel.nav_subtitlec                 C   s&   t ttddg}tdd|d|i S )NCACHESdefaultz"Cache calls from %(count)d backendz#Cache calls from %(count)d backendscount)rL   r)   r   r   )r<   r[   r&   r&   r'   title   s   zCachePanel.titlec                 C   s,   t jddD ]	}t| | |_q| | j_d S )NTinitialized_only)r   allr1   r   r@   r?   r<   r#   r&   r&   r'   enable_instrumentation   s   z!CachePanel.enable_instrumentationc                 C   s.   t | jdr	| j`tjddD ]}d |_qd S )Nr?   Tr]   )r/   r@   r?   r   r_   r   r`   r&   r&   r'   disable_instrumentation   s
   z"CachePanel.disable_instrumentationc              	   C   s,   |  t| j| j| j| j| j| jd d S )N)total_callsr8   r5   r6   r7   r;   )record_statsrL   r8   r5   r6   r7   r;   )r<   requestresponser&   r&   r'   generate_stats   s   zCachePanel.generate_statsc                 C   s8   |   }|dd}d|dd}| d|| d S )Nr5   r   zCache {} Callsrc   )	get_statsr   formatrecord_server_timing)r<   re   rf   statsrT   r\   r&   r&   r'   generate_server_timing   s   z!CachePanel.generate_server_timing)__name__
__module____qualname____doc__templateis_asyncr   r@   r4   classmethodr?   rE   rP   r   _	nav_titlepropertyrX   r\   ra   rb   rg   rl   __classcell__r&   r&   r=   r'   r2   6   s*    


$

r2   )r*   rH   r   asgiref.localr   django.confr   django.core.cacher   r   django.utils.translationr   rt   r   debug_toolbar.panelsr	   debug_toolbar.utilsr
   r   r   r0   r-   r1   r2   r&   r&   r&   r'   <module>   s    