
    ]j                     R   d dl 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mZmZ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lm	Z d d
lm Z  d dl!m"Z"m#Z#m$Z$m%Z%  e       Z&d Z' G d de      Z( G d de      Z) e)       e_         G d de       Z*y# e$ r dZY w xY w)    N)OrderedDict)ConnectionProxy)settingscache)DEFAULT_CACHE_ALIASCacheHandlerr   caches)	BaseCache)Signal)gettext_lazyngettext)Panel)	get_stackget_template_inforender_stacktracetidy_stacktracec                       fd}|S )Nc                 n   t        j                          } | g|i |}t        j                          |z
  }t        j                         d   rt        t	        t                           }ng }t               }t        j                  | j                  |j                  |||||| j                  	       |S )NENABLE_STACKTRACES)	sender
time_takennamereturn_valueargskwargstracetemplate_infobackend)timedt_settings
get_configr   reversedr   r   cache_calledsend	__class____name__r   )selfr   r   tvalue
stacktracer   methods          D/root/env/lib/python3.12/site-packages/debug_toolbar/panels/cache.pywrappedzsend_signal.<locals>.wrapped%   s    IIKt-d-f-IIK!O!!#$89()+)>?JJ)+>>'JJ 	 
	
      )r,   r.   s   ` r-   send_signalr1   $   s    0 Nr/   c                      e Zd ZdZd Zd Zd Zd Zd Ze	d        Z
e	d        Ze	d	        Ze	d
        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Zy)CacheStatTrackerz(A small class used to track cache calls.c                     || _         y Nr   )r(   r   s     r-   __init__zCacheStatTracker.__init__C   s	    
r/   c                 D    t        d      t        | j                        z  S )Nz<CacheStatTracker for %s>)strreprr   r(   s    r-   __repr__zCacheStatTracker.__repr__F   s    ./$tzz2BBBr/   c                 z    t        j                  d      }t        j                  |      }|d   |d   |d   |d   fS )N   r         )sys	_getframeinspectgetframeinfo)r(   frameinfos      r-   _get_func_infozCacheStatTracker._get_func_infoI   s?    a ##E*Qa$q'4733r/   c                 8    | j                   j                  |      S r5   )r   __contains__)r(   keys     r-   rH   zCacheStatTracker.__contains__N   s    zz&&s++r/   c                 .    t        | j                  |      S r5   )getattrr   )r(   r   s     r-   __getattr__zCacheStatTracker.__getattr__Q   s    tzz4((r/   c                 :     | j                   j                  |i |S r5   )r   addr(   r   r   s      r-   rN   zCacheStatTracker.addT       tzz~~t.v..r/   c                 :     | j                   j                  |i |S r5   )r   getrO   s      r-   rR   zCacheStatTracker.getX   rP   r/   c                 :     | j                   j                  |i |S r5   )r   setrO   s      r-   rT   zCacheStatTracker.set\   rP   r/   c                 :     | j                   j                  |i |S r5   )r   touchrO   s      r-   rV   zCacheStatTracker.touch`       tzz000r/   c                 :     | j                   j                  |i |S r5   )r   deleterO   s      r-   rY   zCacheStatTracker.deleted   s     tzz  $1&11r/   c                 :     | j                   j                  |i |S r5   )r   clearrO   s      r-   r[   zCacheStatTracker.clearh   rW   r/   c                 :     | j                   j                  |i |S r5   )r   has_keyrO   s      r-   r]   zCacheStatTracker.has_keyl   s      "tzz!!42622r/   c                 :     | j                   j                  |i |S r5   )r   incrrO   s      r-   r_   zCacheStatTracker.incrr       tzz///r/   c                 :     | j                   j                  |i |S r5   )r   decrrO   s      r-   rb   zCacheStatTracker.decrv   r`   r/   c                 :     | j                   j                  |i |S r5   )r   get_manyrO   s      r-   rd   zCacheStatTracker.get_manyz   s    "tzz""D3F33r/   c                 <     | j                   j                  |i | y r5   )r   set_manyrO   s      r-   rf   zCacheStatTracker.set_many~   s    

T,V,r/   c                 <     | j                   j                  |i | y r5   )r   delete_manyrO   s      r-   rh   zCacheStatTracker.delete_many   s    

//r/   c                 :     | j                   j                  |i |S r5   )r   incr_versionrO   s      r-   rj   zCacheStatTracker.incr_version       &tzz&&777r/   c                 :     | j                   j                  |i |S r5   )r   decr_versionrO   s      r-   rm   zCacheStatTracker.decr_version   rk   r/   N)r'   
__module____qualname____doc__r6   r;   rF   rH   rL   r1   rN   rR   rT   rV   rY   r[   r]   r_   rb   rd   rf   rh   rj   rm   r0   r/   r-   r3   r3   @   s7   2C4
,) / / / / / / 1 1 2 2 1 1 3 3
 0 0 0 0 4 4 - - 0 0 8 8 8 8r/   r3   c                        e Zd Z fdZ xZS )CacheHandlerPatchc                 8    t         |   |      }t        |      S r5   )super__getitem__r3   )r(   aliasactual_cacher&   s      r-   ru   zCacheHandlerPatch.__getitem__   s    w*51--r/   )r'   rn   ro   ru   __classcell__r&   s   @r-   rr   rr      s    . .r/   rr   c                        e Zd ZdZdZ fdZ	 	 	 	 	 	 	 	 d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      | _        t        j                  | j                         y )Nr   ))rN   r   )rR   r   )rT   r   )rV   r   )rY   r   )r[   r   )rd   r   )rf   r   )rh   r   )r]   r   )r_   r   )rb   r   )rj   r   )rm   r   )rt   r6   
total_timehitsmissescallsr   countsr$   connect_store_call_info)r(   r   r   r&   s      r-   r6   zCachePanel.__init__   sX    $)&)	
!
$ 	T223r/   c
           
         |dk(  r.|| xj                   dz  c_         n`| xj                  dz  c_        nJ|dk(  rE|j                         D ]2  \  }}|| xj                   dz  c_         | xj                  dz  c_        4 |dz  }| xj                  |z  c_        | j                  |xx   dz  cc<   | j
                  j                  ||||t        |      ||	d       y )NrR   r>   rd   i  )r    r   r   r   r   r   r   )r   r~   itemsr}   r   r   appendr   )r(   r   r   r   r   r   r   r   r   r   kwrI   r*   s                r-   r   zCachePanel._store_call_info   s     5=#q 		Q	Z*002 #
U=KK1$KIINI	#
 	d
:%DQ

" *51!."
	
r/   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_callsr    )lenr   __r}   )r(   r   s     r-   nav_subtitlezCachePanel.nav_subtitle   s9    $**o67
 *4??CD	
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)r   rK   r   r   )r(   r   s     r-   titlezCachePanel.title   s<    GHh<=45
 	
r/   c                     t        t        j                  t              rt        j                  t        _        nt               t        _        t
        r(t        t        j                  t              t        _        y y r5   )
isinstancemiddleware_cacher
   rr   r   r   r   r:   s    r-   enable_instrumentationz!CachePanel.enable_instrumentation   sH    &--/@A+22EL,.EL )%,,8KLEK r/   c                 ^    t         t        _        t        t        _        t         t        _        y r5   )original_cachesr   r
   original_cacher   r:   s    r-   disable_instrumentationz"CachePanel.disable_instrumentation  s    &$ #2r/   c           	          | j                  t        | j                        | j                  | j                  | j                  | j
                  | j                  d       y )N)total_callsr   r}   r~   r   r   )record_statsr   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 {} Callsr   )	get_statsrR   formatrecord_server_timing)r(   r   r   statsr*   r   s         r-   generate_server_timingz!CachePanel.generate_server_timing  sK     		,* ''		-(CD!!,u=r/   )Nr   NNNNNN)r'   rn   ro   rp   templater6   r   _	nav_titlepropertyr   r   r   r   r   r   rx   ry   s   @r-   r{   r{      sz     1H4: &
T '
I	
 	
 	
 	
M2

>r/   r{   )+rB   r@   r    collectionsr   django.utils.connectionr   ImportErrordjango.confr   django.corer   django.core.cacher   r	   r   r
   r   django.core.cache.backends.baser   django.dispatchr   django.middlewarer   django.utils.translationr   r   r   r   debug_toolbarr!   debug_toolbar.panelsr   debug_toolbar.utilsr   r   r   r   r$   r1   r3   rr   r{   r0   r/   r-   <module>r      s     
  #7 !   6 " 7 F 1 &  x8L8y L8^. . ,-  G> G>a  Os   B B&%B&