
    7 f&                         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
 Zd Z G d de      Zy)    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                 z     t               t        j                         fd       }t         |       y )Nc                  Z    j                   }| | i |S |j                  | |      S N)_djdt_panel_record_call)argskwargspanelcachenameoriginal_methods      P/var/www/equiseq/venv/lib/python3.11/site-packages/debug_toolbar/panels/cache.pywrapperz%_monkey_patch_method.<locals>.wrapper$   s<    !!="D3F33%%eT?D&QQ    )getattr	functoolswrapssetattr)r%   r&   r)   r'   s   `` @r(   _monkey_patch_methodr/   !   s:    eT*O___%R &R E4!r*   c                 Z    t        | d      st        D ]  }t        | |        d| _        y y )N_djdt_patchedT)hasattrWRAPPED_CACHE_METHODSr/   r1   )r%   r&   s     r(   _monkey_patch_cacher4   /   s2    5/*) 	.D -	." +r*   c                        e Zd ZdZdZ e       Z fdZed        Z	ed        Z
d Zd Z ed      Zed	        Zed
        Zd Zd Zd Zd Z xZS )
CachePanelz3
    Panel that displays the cache statistics.
    zdebug_toolbar/panels/cache.htmlc                     t        |   |i | d| _        d| _        d| _        g | _        t        D ci c]  }|d c}| _        y c c}w )Nr   )super__init__
total_timehitsmissescallsr3   counts)selfr"   r#   r&   	__class__s       r(   r9   zCachePanel.__init__?   sJ    $)&)	
+@A4tQwAAs   
Ac                 0    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)clss    r(   rB   zCachePanel.current_instanceG   s     s**,>EEr*   c                      t        t        d      sEt        j                  t        j                         fd       }|t        _        dt        _        y y )Nr1   c                 b     | |      }j                         }|t        |       ||_        |S r   )rB   r4   r    )r?   aliasr%   r$   rD   r'   s       r(   r)   z!CachePanel.ready.<locals>.wrapper[   s8    'e4,,.$'.(-E%r*   T)r2   r   create_connectionr,   r-   r1   )rD   r)   r'   s   ` @r(   readyzCachePanel.readyR   sL    |_5
 +<<O___- . .5L*)-L&# 6r*   c	           
         |dk(  s|dk(  r.|| xj                   dz  c_         nq| xj                  dz  c_        n[|dk(  rVd|v r|d   n|d   }	| xj                  t        |      z  c_        | xj                   t        |	      t        |      z
  z  c_         |dz  }| xj                  |z  c_        | j                  |xx   dz  cc<   | j
                  j                  ||||t        |      ||d       y )	Nr   r      r   keysr   i  )timer&   r"   r#   tracetemplate_infobackend)r<   r;   lenr:   r>   r=   appendr   )
r?   r&   
time_takenreturn_valuer"   r#   rN   rO   rP   rL   s
             r(   _store_call_infozCachePanel._store_call_infog   s     5=DL0#q 		Q	Z%+v%56&>47DII\**IKK3t9s<'888Kd
:%DQ

" *51!."
	
r*   c           
          d |_         	 t               } ||i |}t               |z
  }| |_         | j                  |||||t        d      t	               |       |S # | |_         w xY w)N   )skip)r&   rS   rT   r"   r#   rN   rO   rP   )r    r   rU   r   r   )	r?   r%   r&   r'   r"   r#   
start_timevaluets	            r(   r!   zCachePanel._record_call   s     !	%%J#T4V4E+A $E!q)+- 	 		
  !%Es   A 	A%Cachec                 f    t        | j                        }t        dd|      || j                  dz  S )Nz$%(cache_calls)d call in %(time).2fmsz%%(cache_calls)d calls in %(time).2fms)cache_callsrM   )rQ   r=   r	   r:   )r?   r^   s     r(   nav_subtitlezCachePanel.nav_subtitle   s:    $**o23
 (A	B 	Br*   c                 \    t        t        t        ddg            }t        dd|      d|iz  S )NCACHESdefaultz"Cache calls from %(count)d backendz#Cache calls from %(count)d backendscount)rQ   r+   r   r	   )r?   rc   s     r(   titlezCachePanel.title   s<    GHh<=01
 e	 	r*   c                     t        j                  d      D ]  }t        |       | |_         | | j                  _        y )NTinitialized_only)r   allr4   r    rC   rB   r?   r%   s     r(   enable_instrumentationz!CachePanel.enable_instrumentation   s<     ZZ6 	%E& $E	% 15-r*   c                     t        | j                  d      r| j                  `t        j                  d      D ]	  }d |_         y )NrB   Trf   )r2   rC   rB   r   rh   r    ri   s     r(   disable_instrumentationz"CachePanel.disable_instrumentation   s?    4'');<$$5ZZ6 	%E $E	%r*   c           	          | j                  t        | j                        | j                  | j                  | j                  | j
                  | j                  d       y )N)total_callsr=   r:   r;   r<   r>   )record_statsrQ   r=   r:   r;   r<   r>   )r?   requestresponses      r(   generate_statszCachePanel.generate_stats   sC    "4::"oo		++++		
r*   c                     | j                         }|j                  dd      }dj                  |j                  dd            }| j                  d||       y )Nr:   r   zCache {} Callsrn   )	get_statsr   formatrecord_server_timing)r?   rp   rq   statsrZ   rd   s         r(   generate_server_timingz!CachePanel.generate_server_timing   sK     		,* ''		-(CD!!,u=r*   )__name__
__module____qualname____doc__templater   rC   r9   classmethodrB   rI   rU   r!   _	nav_titlepropertyr_   rd   rj   rl   rr   rx   __classcell__)r@   s   @r(   r6   r6   6   s     1HgOB F F . .("
H: '
IB B  5%

>r*   r6   )r,   rM   r   asgiref.localr   django.confr   django.core.cacher   r   django.utils.translationr   r   r	   debug_toolbar.panelsr
   debug_toolbar.utilsr   r   r   r3   r/   r4   r6    r*   r(   <module>r      s@         2 @ & U U &"#j> j>r*   