
    Ջg^                     F    d dl Zd dlmZ d dlmZ d dlmZ  G d de      Zy)    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y)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                 T    t        j                  | |       i | _        |xs d| _        y )N  )r   __init___cache
_threshold)selfr   r	   s      B/var/www/html/venv/lib/python3.12/site-packages/cachelib/simple.pyr   zSimpleCache.__init__   s'    
 	41,.#*s    returnc                 F    t        | j                        | j                  kD  S N)lenr   r   r   s    r   _over_thresholdzSimpleCache._over_threshold    s    4;;$//11r   nowNc                     | j                   j                         D cg c]  \  }\  }}||k  s| }}}}|D ]  }| j                   j                  |d          y c c}}}w r   )r   itemspop)r   r   kexpires_toremoves         r   _remove_expiredzSimpleCache._remove_expired#   sZ    -1[[->->-@RR/!\gqGcMARR 	%AKKOOAt$	% Ss
   AAc                     d t        | j                  j                         d       D        }|D ]0  }| j                  j                  |d        | j	                         r0 y  y )Nc              3   &   K   | ]	  \  }}|  y wr    ).0r   vs      r   	<genexpr>z,SimpleCache._remove_older.<locals>.<genexpr>)   s      
!QA
s   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(   sX    
 !2!2!4:QR
	  	AKKOOAt$'')	r   c                     | j                         rt               }| j                  |       | j                         r| j                          y y r   )r   r   r    r.   )r   r   s     r   _prunezSimpleCache._prune1   s@    !&C  %!  "r   timeoutc                 h    t        j                  | |      }|dkD  rt        t                     |z   }|S Nr   )r   _normalize_timeoutintr   )r   r1   s     r   r4   zSimpleCache._normalize_timeout9   s0    ..tW=Q;$&kG+Gr   r+   c                     	 | j                   |   \  }}|dk(  s|t               kD  r| j                  j                  |      S y # t        $ r Y y w xY wr3   )r   r   
serializerloadsKeyErrorr   r+   r   values       r   getzSimpleCache.get?   sU    	![[-NGU!|w/,,U33  0 		s   >A 	AAr;   c                     | j                  |      }| j                          || j                  j                  |      f| j                  |<   y)NT)r4   r0   r7   dumpsr   )r   r+   r;   r1   r   s        r   setzSimpleCache.setG   sB     ))'2#T__%:%:5%ABCr   c                     | j                  |      }| j                          || j                  j                  |      f}|| j                  v ry| j                  j                  ||       y)NFT)r4   r0   r7   r>   r   
setdefault)r   r+   r;   r1   r   r)   s         r   addzSimpleCache.addO   sZ    ))'2..u56$++sD)r   c                 >    | j                   j                  |d       d uS r   )r   r   )r   r+   s     r   deletezSimpleCache.deleteX   s    {{sD)55r   c                     	 | j                   |   \  }}t        |dk(  xs |t               kD        S # t        $ r Y yw xY w)Nr   F)r   boolr   r9   r:   s       r   haszSimpleCache.has[   sF    	![[-NGU18$&(899 		s   .1 	==c                 b    | j                   j                          t        | j                          S r   )r   clearrF   r   s    r   rI   zSimpleCache.clearb   s$    $$$r   )r   i,  )r   Nr   )__name__
__module____qualname____doc__r   r7   r5   r   rF   r   floatr    r.   r0   _tOptionalr4   strAnyr<   r?   rB   rD   rG   rI   r#   r   r   r   r      s/   
 "#J "++ +2 2%5 %T %
!"++c*: s s rvv  DH!vv02C0@	T	s 266 BKK4D PT 6# 6$ 6s t %t %r   r   )typingrO   r   cachelib.baser   cachelib.serializersr   r   r#   r   r   <module>rV      s      # 1\%) \%r   