o
    QDi                     @   s   d dl Z d dl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 d dlmZ d dlmZ d d	lmZ d d
lmZ G dd de
ZdedefddZdedefddZG dd dZG dd deZG dd deZdefddZdS )    N)defaultdictdeque)Iterable)Any)DjangoJSONEncoder)transaction)import_string)settings)HistoryEntry)	force_strc                       s   e Zd Z fddZ  ZS )DebugToolbarJSONEncoderc              	      s.   zt  |W S  ttfy   t| Y S w N)superdefault	TypeError
ValueErrorr   )selfo	__class__ L/var/www/Datamplify/venv/lib/python3.10/site-packages/debug_toolbar/store.pyr      s
   zDebugToolbarJSONEncoder.default)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s    r   datareturnc                 C   s   t j| tdS )Ncls)jsondumpsr   r   r   r   r   	serialize   s   r#   c                 C   s
   t | S r   )r    loadsr"   r   r   r   deserialize   s   
r%   c                   @   s   e Zd ZedefddZededefddZedefddZ	ed	d
 Z
edefddZeddededefddZedededefddZdS )	BaseStorer   c                 C      t zThe stored request idsNotImplementedErrorr   r   r   r   request_ids$      zBaseStore.request_ids
request_idc                 C   r'   )z,Does the given request_id exist in the storer)   r   r-   r   r   r   exists)   r,   zBaseStore.existsc                 C   r'   )zSet a request_id in the storer)   r.   r   r   r   set.   r,   zBaseStore.setc                 C   r'   )*Remove all requests from the request storer)   r   r   r   r   clear3   r,   zBaseStore.clearc                 C   r'   )z)Delete the store for the given request_idr)   r.   r   r   r   delete8   r,   zBaseStore.deleteNpanel_idr   c                 C   r'   ),Save the panel data for the given request_idr)   r   r-   r4   r   r   r   r   
save_panel=   r,   zBaseStore.save_panelc                 C   r'   -Fetch the panel data for the given request_idr)   )r   r-   r4   r   r   r   panelB   r,   zBaseStore.panelr   )r   r   r   classmethodr   r+   strboolr/   r0   r2   r3   r   r7   r:   r   r   r   r   r&   #   s    
r&   c                   @   s   e Zd ZU e Zeed< eeZee	ef ed< e
defddZe
de	defddZe
de	fd	d
Ze
dd Ze
de	fddZe
dde	de	defddZe
de	de	defddZe
de	defddZdS )MemoryStore_request_ids_request_storer   c                 C   s   | j S r(   r?   r   r   r   r   r+   O   s   zMemoryStore.request_idsr-   c                 C   s
   || j v S )z4Does the given request_id exist in the request storerA   r.   r   r   r   r/   T   s   
zMemoryStore.existsc                 C   sR   || j vr| j | tt| j t d  D ]}| j  }| j|d qdS )z%Set a request_id in the request storeRESULTS_CACHE_SIZEN)	r?   appendrangelendt_settings
get_configpopleftr@   pop)r   r-   _
removed_idr   r   r   r0   Y   s   

zMemoryStore.setc                 C   s   | j   | j  dS )r1   N)r?   r2   r@   r   r   r   r   r2   d   s   
zMemoryStore.clearc                 C   sJ   | j |d tt | j| W d   dS 1 sw   Y  dS )2Delete the stored request for the given request_idN)r@   rI   
contextlibsuppressr   r?   remover.   r   r   r   r3   j   s   "zMemoryStore.deleteNr4   r   c                 C   s    |  | t|| j| |< dS )r5   N)r0   r#   r@   r6   r   r   r   r7   r   s   
zMemoryStore.save_panelc                 C   s0   z| j | | }W t|S  ty   i  Y S w r8   )r@   KeyErrorr%   r6   r   r   r   r:   x   s   zMemoryStore.panelc                 c   sL    z| j | }W n ty   i  Y S w | D ]\}}|t|fV  qdS )z1Fetch all the panel data for the given request_idN)r@   rP   itemsr%   )r   r-   panel_mappingr:   r   r   r   r   panels   s   zMemoryStore.panelsr   )r   r   r   r   r?   __annotations__r   dictr@   r<   r;   r   r+   r=   r/   r0   r2   r3   r   r7   r:   rS   r   r   r   r   r>   H   s&   
 

	r>   c                   @   s   e Zd Zedd Zedd ZededefddZedefd	d
Z	edd Z
edefddZeddededefddZedededefddZededefddZdS )DatabaseStorec                 C   s&   |   }|rtjj|d  dS dS )z~
        Enforce the cache size limit - keeping only the most recently used entries
        up to RESULTS_CACHE_SIZE.
        )request_id__inN)r+   r
   objectsexcluder3   )r   keep_idsr   r   r   _cleanup_old_entries   s   z"DatabaseStore._cleanup_old_entriesc                 C   s,   t  d }ttj d| jdddS )z9Return all stored request ids within the cache size limitrB   Nr-   T)flat)rF   rG   listr
   rX   allvalues_list)r   
cache_sizer   r   r   r+      s   zDatabaseStore.request_idsr-   r   c                 C   s   t jj|d S )z1Check if the given request_id exists in the storer-   )r
   rX   filterr/   r.   r   r   r   r/         zDatabaseStore.existsc                 C   s\   t    tjj|d\}}|r|   W d   dS W d   dS 1 s'w   Y  dS )z6Set a request_id in the store and clean up old entriesra   N)r   atomicr
   rX   get_or_creater[   )r   r-   rJ   createdr   r   r   r0      s   

"zDatabaseStore.setc                 C   s   t j   dS )z"Remove all requests from the storeN)r
   rX   r^   r3   r   r   r   r   r2      rc   zDatabaseStore.clearc                 C   s   t jj|d  dS )rL   ra   N)r
   rX   rb   r3   r.   r   r   r   r3      s   zDatabaseStore.deleteNr4   r   c                 C   s`   t  " tjj|d\}}|j}t|||< ||_|  W d   dS 1 s)w   Y  dS )r5   ra   N)r   rd   r
   rX   re   r   r#   save)r   r-   r4   r   objrJ   
store_datar   r   r   r7      s   

"zDatabaseStore.save_panelc                 C   sL   zt jj|dj}||}|du ri W S t|W S  t jy%   i  Y S w )r9   ra   N)r
   rX   getr   r%   DoesNotExist)r   r-   r4   r   
panel_datar   r   r   r:      s   

zDatabaseStore.panelc                 c   sR    zt jj|dj}| D ]\}}|t|fV  qW dS  t jy(   i  Y S w )z-Fetch all panel data for the given request_idra   N)r
   rX   rj   r   rQ   r%   rk   )r   r-   r   r4   rl   r   r   r   rS      s   zDatabaseStore.panelsr   )r   r   r   r;   r[   r+   r<   r=   r/   r0   r2   r3   r   r7   r:   rS   r   r   r   r   rV      s&    



	rV   c                   C   s   t t d S )NTOOLBAR_STORE_CLASS)r   rF   rG   r   r   r   r   	get_store   s   rn   )rM   r    collectionsr   r   collections.abcr   typingr   django.core.serializers.jsonr   	django.dbr   django.utils.module_loadingr   debug_toolbarr	   rF   debug_toolbar.modelsr
   debug_toolbar.sanitizer   r   r<   r#   r%   r&   r>   rV   rn   r   r   r   r   <module>   s$    %EQ