a
    ތxd                     @   s   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
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d Z"G dd deZ#G dd de
Z$e$ e_G dd deZ%dS )    N)OrderedDict)settingscache)CacheHandlercaches)	BaseCache)Signal)gettext_lazyngettext)Panel)	get_stackget_template_inforender_stacktracetidy_stacktracec                    s    fdd}|S )Nc                    sv   t   } | g|R i |}t   | }t d rFttt }ng }t }tj| j	| j
|||||| jd	 |S )NZENABLE_STACKTRACES)	sender
time_takennamereturn_valueargskwargstracetemplate_infobackend)timedt_settingsZ
get_configr   reversedr   r   cache_calledsend	__class____name__r   )selfr   r   tvalueZ
stacktracer   method R/var/www/html/Ranjet/env/lib/python3.9/site-packages/debug_toolbar/panels/cache.pywrapped   s&    zsend_signal.<locals>.wrappedr&   )r%   r(   r&   r$   r'   send_signal   s    r)   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dd Z
e	dd Ze	dd Ze	dd Ze	dd Ze	dd Ze	dd Ze	dd Ze	dd Ze	dd Ze	d d! Ze	d"d# Ze	d$d% Ze	d&d' Zd(S ))CacheStatTrackerz(A small class used to track cache calls.c                 C   s
   || _ d S Nr   )r!   r   r&   r&   r'   __init__9   s    zCacheStatTracker.__init__c                 C   s   t dt| j S )Nz<CacheStatTracker for %s>)strreprr   r!   r&   r&   r'   __repr__<   s    zCacheStatTracker.__repr__c                 C   s0   t d}t|}|d |d |d |d fS )N   r         )sys	_getframeinspectgetframeinfo)r!   frameinfor&   r&   r'   _get_func_info?   s    

zCacheStatTracker._get_func_infoc                 C   s   | j |S r+   )r   __contains__)r!   keyr&   r&   r'   r;   D   s    zCacheStatTracker.__contains__c                 C   s   t | j|S r+   )getattrr   )r!   r   r&   r&   r'   __getattr__G   s    zCacheStatTracker.__getattr__c                 O   s   | j j|i |S r+   )r   addr!   r   r   r&   r&   r'   r?   J   s    zCacheStatTracker.addc                 O   s   | j j|i |S r+   )r   getr@   r&   r&   r'   rA   N   s    zCacheStatTracker.getc                 O   s   | j j|i |S r+   )r   setr@   r&   r&   r'   rB   R   s    zCacheStatTracker.setc                 O   s   | j j|i |S r+   )r   touchr@   r&   r&   r'   rC   V   s    zCacheStatTracker.touchc                 O   s   | j j|i |S r+   )r   deleter@   r&   r&   r'   rD   Z   s    zCacheStatTracker.deletec                 O   s   | j j|i |S r+   )r   clearr@   r&   r&   r'   rE   ^   s    zCacheStatTracker.clearc                 O   s   | j j|i |S r+   )r   has_keyr@   r&   r&   r'   rF   b   s    zCacheStatTracker.has_keyc                 O   s   | j j|i |S r+   )r   incrr@   r&   r&   r'   rG   h   s    zCacheStatTracker.incrc                 O   s   | j j|i |S r+   )r   decrr@   r&   r&   r'   rH   l   s    zCacheStatTracker.decrc                 O   s   | j j|i |S r+   )r   get_manyr@   r&   r&   r'   rI   p   s    zCacheStatTracker.get_manyc                 O   s   | j j|i | d S r+   )r   set_manyr@   r&   r&   r'   rJ   t   s    zCacheStatTracker.set_manyc                 O   s   | j j|i | d S r+   )r   delete_manyr@   r&   r&   r'   rK   x   s    zCacheStatTracker.delete_manyc                 O   s   | j j|i |S r+   )r   incr_versionr@   r&   r&   r'   rL   |   s    zCacheStatTracker.incr_versionc                 O   s   | j j|i |S r+   )r   decr_versionr@   r&   r&   r'   rM      s    zCacheStatTracker.decr_versionN)r    
__module____qualname____doc__r,   r0   r:   r;   r>   r)   r?   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r&   r&   r&   r'   r*   6   sD   












r*   c                       s   e Zd Z fddZ  ZS )CacheHandlerPatchc                    s   t  |}t|S r+   )super__getitem__r*   )r!   aliasZactual_cacher   r&   r'   rS      s    zCacheHandlerPatch.__getitem__)r    rN   rO   rS   __classcell__r&   r&   rU   r'   rQ      s   rQ   c                       sn   e Zd ZdZdZ fddZd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.htmlc                    sD   t  j|i | d| _d| _d| _g | _td| _t	| j
 d S )Nr   ))r?   r   )rA   r   )rB   r   )rC   r   )rD   r   )rE   r   )rI   r   )rJ   r   )rK   r   )rF   r   )rG   r   )rH   r   )rL   r   )rM   r   )rR   r,   
total_timehitsmissescallsr   countsr   connect_store_call_infor@   rU   r&   r'   r,      s    zCachePanel.__init__Nr   c
              
   K   s   |dkr0|d u r |  j d7  _ qp|  jd7  _n@|dkrp| D ].\}}|d u r`|  j d7  _ q@|  jd7  _q@|d9 }|  j|7  _| j|  d7  < | j||||t|||	d d S )NrA   r2   rI   i  )r   r   r   r   r   r   r   )rZ   rY   itemsrX   r\   r[   appendr   )r!   r   r   r   r   r   r   r   r   r   kwr<   r#   r&   r&   r'   r^      s,    zCachePanel._store_call_info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_callsr   )lenr[   __rX   )r!   rc   r&   r&   r'   nav_subtitle   s    

zCachePanel.nav_subtitlec                 C   s&   t ttddg}tdd|d|i S )NZCACHESdefaultz"Cache calls from %(count)d backendz#Cache calls from %(count)d backendscount)rd   r=   r   re   )r!   rh   r&   r&   r'   title   s    zCachePanel.titlec                 C   s"   t tjtrtjt_nt t_d S r+   )
isinstancemiddleware_cacher   rQ   r   r/   r&   r&   r'   enable_instrumentation   s    
z!CachePanel.enable_instrumentationc                 C   s   t t_t t_d S r+   )original_cachesr   r   rk   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_callsr[   rX   rY   rZ   r\   )Zrecord_statsrd   r[   rX   rY   rZ   r\   )r!   requestresponser&   r&   r'   generate_stats   s    zCachePanel.generate_statsc                 C   s8   |   }|dd}d|dd}| d|| d S )NrX   r   zCache {} Callsro   )Z	get_statsrA   formatZrecord_server_timing)r!   rp   rq   statsr#   ri   r&   r&   r'   generate_server_timing  s    z!CachePanel.generate_server_timing)Nr   NNNNNN)r    rN   rO   rP   templater,   r^   _Z	nav_titlepropertyrf   ri   rl   rn   rr   ru   rV   r&   r&   rU   r'   rW      s*           
*

rW   )&r6   r4   r   collectionsr   Zdjango.confr   Zdjango.corer   Zdjango.core.cacher   r   rm   Zdjango.core.cache.backends.baser   Zdjango.dispatchr	   Zdjango.middlewarerk   Zdjango.utils.translationr
   rw   r   re   Zdebug_toolbarr   Zdebug_toolbar.panelsr   Zdebug_toolbar.utilsr   r   r   r   r   r)   r*   rQ   rW   r&   r&   r&   r'   <module>   s&   O