
    Xf^                     N    d dl Zd dlmZ d dlmZ d dlmZ  G d de          ZdS )    N)time)	BaseCache)SimpleSerializerc            
       `   e Zd ZdZ e            Z	 	 ddedefdZdefdZ	d	e
dd
fdZddZddZdej        e         defdZdedej        fdZ	 ddedej        dej        e         dej        e         fdZddedej        dej        e         defdZdedefdZdedefdZdefdZd
S )SimpleCachea  Simple memory cache for single process environments.  This class exists
    mainly for the development server and is not 100% thread safe.  It tries
    to use as many atomic operations as possible and no locks for simplicity
    but it could happen under heavy load that keys are added multiple times.

    :param threshold: the maximum number of items the cache stores before
                      it starts deleting some.
    :param default_timeout: the default timeout that is used if no timeout is
                            specified on :meth:`~BaseCache.set`. A timeout of
                            0 indicates that the cache never expires.
      ,  	thresholddefault_timeoutc                 P    t          j        | |           i | _        |pd| _        d S )Nr   )r   __init___cache
_threshold)selfr
   r   s      C/var/www/piapp/venv/lib/python3.11/site-packages/cachelib/simple.pyr   zSimpleCache.__init__   s.    
 	4111,.#*s    returnc                 <    t          | j                  | j        k    S N)lenr   r   r   s    r   _over_thresholdzSimpleCache._over_threshold    s    4;$/11r   nowNc                     fd| j                                         D             }|D ]}| j                             |d            d S )Nc                 ,    g | ]\  }\  }}|k     |S  r   ).0kexpires_r   s       r   
<listcomp>z/SimpleCache._remove_expired.<locals>.<listcomp>$   s&    RRR/!\gqGcMMAMMMr   )r   itemspop)r   r   toremover   s    `  r   _remove_expiredzSimpleCache._remove_expired#   s\    RRRRT[->->-@-@RRR 	% 	%AKOOAt$$$$	% 	%r   c                     d t          | j                                        d           D             }|D ]4}| j                            |d            |                                 s d S 5d S )Nc              3       K   | ]	\  }}|V  
d S r   r   )r   r   vs      r   	<genexpr>z,SimpleCache._remove_older.<locals>.<genexpr>)   s7       
 
!QA
 
 
 
 
 
r   c                     | d         d         S )N   r   r   )items    r   <lambda>z+SimpleCache._remove_older.<locals>.<lambda>*   s    tAwqz r   )key)sortedr   r"   r#   r   )r   	k_orderedr   s      r   _remove_olderzSimpleCache._remove_older(   s    
 
 !2!2!4!4:Q:QRRR
 
 
	  	 	AKOOAt$$$'')) 	 	r   c                     |                                  r#t                      }|                     |           |                                  r|                                  d S d S r   )r   r   r%   r1   )r   r   s     r   _prunezSimpleCache._prune1   si    !! 	&&&C  %%%!! 	!     	! 	!r   timeoutc                 x    t          j        | |          }|dk    rt          t                                |z   }|S Nr   )r   _normalize_timeoutintr   )r   r4   s     r   r7   zSimpleCache._normalize_timeout9   s6    .tW==Q;;$&&kkG+Gr   r.   c                     	 | j         |         \  }}|dk    s|t                      k    r| j                            |          S d S # t          $ r Y d S w xY wr6   )r   r   
serializerloadsKeyErrorr   r.   r   values       r   getzSimpleCache.get?   sn    	![-NGU!||w//,,U333  0/ 	 	 	44	s   AA 
AAr>   c                     |                      |          }|                                  || j                            |          f| j        |<   dS )NT)r7   r3   r:   dumpsr   )r   r.   r>   r4   r   s        r   setzSimpleCache.setG   sJ     ))'22#T_%:%:5%A%ABCtr   c                     |                      |          }|                                  || j                            |          f}|| j        v rdS | j                            ||           dS )NFT)r7   r3   r:   rA   r   
setdefault)r   r.   r>   r4   r   r,   s         r   addzSimpleCache.addO   sk    ))'22..u556$+5sD)))tr   c                 <    | j                             |d           d uS r   )r   r#   )r   r.   s     r   deletezSimpleCache.deleteX   s    {sD))55r   c                     	 | j         |         \  }}t          |dk    p|t                      k              S # t          $ r Y dS w xY w)Nr   F)r   boolr   r<   r=   s       r   haszSimpleCache.has[   sY    	![-NGU18$&&(8999 	 	 	55	s   47 
AAc                 ^    | j                                          t          | j                    S r   )r   clearrI   r   s    r   rL   zSimpleCache.clearb   s)    $$$$r   )r   r	   )r   Nr   )__name__
__module____qualname____doc__r   r:   r8   r   rI   r   floatr%   r1   r3   _tOptionalr7   strAnyr?   rB   rE   rG   rJ   rL   r   r   r   r   r      s       
 
 "!##J "+ ++ + + + +2 2 2 2 2%5 %T % % % %
   ! ! ! !"+c*: s    s rv     DH !v02C0@	T	    s 26 BK4D PT    6# 6$ 6 6 6 6s t    %t % % % % % %r   r   )typingrR   r   cachelib.baser   cachelib.serializersr   r   r   r   r   <module>rY      s              # # # # # # 1 1 1 1 1 1\% \% \% \% \%) \% \% \% \% \%r   