
    q`                     ^    d dl Z d dlZddlmZ  G d d      Z G d d      Z G d d	e      Zy)
    N   )Cachec                   $    e Zd ZdZddZd Zd Zy)_Link)keyexpirenextprevNc                      || _         || _        y N)r   r   )selfr   r   s      .lib/python3.12/site-packages/cachetools/ttl.py__init__z_Link.__init__   s        c                 >    t         | j                  | j                  ffS r   )r   r   r   r   s    r   
__reduce__z_Link.__reduce__   s    txx---r   c                 P    | j                   }| j                  }||_         ||_        y r   )r	   r
   )r   r	   r
   s      r   unlinkz_Link.unlink   s"    yyyy		r   )NN)__name__
__module____qualname__	__slots__r   r   r    r   r   r   r      s    1I.r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)_Timerc                      || _         d| _        y Nr   )_Timer__timer_Timer__nesting)r   timers     r   r   z_Timer.__init__   s    r   c                 X    | j                   dk(  r| j                         S | j                  S r   r    r   _Timer__timer   s    r   __call__z_Timer.__call__   s$    >>Q<<>!;;r   c                     | j                   dk(  r| j                         x| _        }n| j                  }| xj                   dz  c_         |S )Nr   r   r#   r   times     r   	__enter__z_Timer.__enter__$   s<    >>Q!%/DK$;;D!r   c                 .    | xj                   dz  c_         y Nr   )r    )r   excs     r   __exit__z_Timer.__exit__,   s    !r   c                 (    t         | j                  ffS r   )r   r   r   s    r   r   z_Timer.__reduce__/   s    &&r   c                 .    t        | j                  |      S r   )getattrr   )r   names     r   __getattr__z_Timer.__getattr__2   s    t||T**r   N)	r   r   r   r   r%   r)   r-   r   r2   r   r   r   r   r      s     '+r   r   c                   (    e Zd ZdZej
                  dfdZd Zej                  fdZ	ej                  fdZ
ej                  fdZd Zd	 Zd
 Zej                  fdZe fd       Zed        Zed        ZddZd Zd Zd Zd Zd Zd Z xZS )TTLCachez@LRU Cache implementation with per-item time-to-live (TTL) value.Nc                     t        j                  | ||       t               x| _        }|x|_        |_        t        j                         | _        t        |      | _
        || _        y r   )r   r   r   _TTLCache__rootr
   r	   collectionsOrderedDict_TTLCache__linksr   _TTLCache__timer_TTLCache__ttl)r   maxsizettlr!   	getsizeofroots         r   r   zTTLCache.__init__9   sP    tWi0"W$d $$	DI"..0e}
r   c                 |    	 | j                   |   }|j                  | j                         k   S # t        $ r Y yw xY wNF)r9   r   r:   KeyError)r   r   links      r   __contains__zTTLCache.__contains__A   sC    	6<<$D dlln455  		s   / 	;;c                     	 | j                  |      }|j                  | j                         k  }|r| j	                  |      S  || |      S # t        $ r d}Y )w xY wrA   )_TTLCache__getlinkr   r:   rB   __missing__)r   r   cache_getitemrC   expireds        r   __getitem__zTTLCache.__getitem__I   sb    	3>>#&D kkDLLN2G##C(( s++  	G	s   A AAc                    | j                   5 }| j                  |        || ||       d d d        	 | j                  |      }|j                          | j                  z   |_        | j                  x|_	        }|j                  x|_
        }|x|_	        |_
        y # 1 sw Y   txY w# t        $ r t        |      x| j                  |<   }Y zw xY wr   )r:   r   rF   r   rB   r   r9   r;   r6   r	   r
   )r   r   valuecache_setitemr(   rC   r?   r
   s           r   __setitem__zTTLCache.__setitem__U   s    \\ 	,TKK$U+	,	>>#&D KKMTZZ';;&	D99$	D $$	DI	, 	,
  	2',Sz1DLL	2s   BB( B%(#CCc                      || |       | j                   j                  |      }|j                          |j                  | j	                         k  rt        |      y r   )r9   popr   r   r:   rB   )r   r   cache_delitemrC   s       r   __delitem__zTTLCache.__delitem__d   sJ    dC ||$;;'3- (r   c              #      K   | j                   }|j                  }||urD| j                  5 }|j                  |k  s|j                   d d d        |j                  }||urCy y # 1 sw Y   xY wwr   )r6   r	   r:   r   r   )r   r?   currr(   s       r   __iter__zTTLCache.__iter__k   sg     {{yy$ #d*((N# 99D $# #s"   )A0A$	A0"A0$A-)A0c                     | j                   }|j                  }| j                         }t        | j                        }||ur4|j
                  |k  r%|dz  }|j                  }||ur|j
                  |k  r%|S r+   )r6   r	   r:   lenr9   r   )r   r?   rT   r(   counts        r   __len__zTTLCache.__len__u   sn    {{yy||~DLL!$4;;#5QJE99D $4;;#5 r   c                 R   | j                   j                  |       | j                  }|x|_        |_        t        | j                  j                         d       D ]*  }||_        |j                  x|_        }|x|_        |_        , | j                  | j                                y )Nc                     | j                   S r   )r   )objs    r   <lambda>z'TTLCache.__setstate__.<locals>.<lambda>   s
    #** r   )r   )
__dict__updater6   r
   r	   sortedr9   valuesr   r:   )r   stater?   rC   r
   s        r   __setstate__zTTLCache.__setstate__   s    U#{{ $$	DI4<<..06LM 	)DDI#yy(DI$((DI		) 	DLLN#r   c                 x    | j                   5 }| j                  |        ||       cd d d        S # 1 sw Y   y xY wr   )r:   r   )r   
cache_reprr(   s      r   __repr__zTTLCache.__repr__   s4    \\ 	$TKKd#	$ 	$ 	$   09c                 ~    | j                   5 }| j                  |       t        |   cd d d        S # 1 sw Y   y xY wr   )r:   r   supercurrsize)r   r(   	__class__s     r   rj   zTTLCache.currsize   s5    \\ 	$TKK7#	$ 	$ 	$s   3<c                     | j                   S )z%The timer function used by the cache.)r:   r   s    r   r!   zTTLCache.timer   s     ||r   c                     | j                   S )z,The time-to-live value of the cache's items.)r;   r   s    r   r=   zTTLCache.ttl   s     zzr   c                 `   || j                         }| j                  }|j                  }| j                  }t        j
                  }||urd|j                  |k  rT || |j                         ||j                  = |j                  }|j                          |}||ur|j                  |k  rRyyyy)z$Remove expired items from the cache.N)	r:   r6   r	   r9   r   rR   r   r   r   )r   r(   r?   rT   linksrQ   r	   s          r   r   zTTLCache.expire   s    <<<>D{{yy))$4;;#5$)dhh99DKKMD $4;;#5#5r   c                     | j                   5 }| j                  |       t        j                  |        d d d        y # 1 sw Y   y xY wr   )r:   r   r   clearr'   s     r   rq   zTTLCache.clear   s8    \\ 	TKKKK	 	 	s	   '=Ac                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr   )r:   r   getr   argskwargss      r   rs   zTTLCache.get   4    \\ 	499T3D3F3	4 	4 	4rg   c                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr   )r:   r   rP   rt   s      r   rP   zTTLCache.pop   rw   rg   c                 x    | j                   5  t        j                  | g|i |cd d d        S # 1 sw Y   y xY wr   )r:   r   
setdefaultrt   s      r   rz   zTTLCache.setdefault   s6    \\ 	;##D:4:6:	; 	; 	;rg   c                 *   | j                   5 }| j                  |       	 t        t        | j                              }|| j                  |      fcddd       S # t        $ r# t        dt        |       j                  z        dw xY w# 1 sw Y   yxY w)zmRemove and return the `(key, value)` pair least recently used that
        has not already expired.

        Nz%s is empty)
r:   r   r	   iterr9   rP   StopIterationrB   typer   )r   r(   r   s      r   popitemzTTLCache.popitem   s    
 \\ 	,TKK,4-. TXXc]+	, 	, ! N}tDz/B/BBCMN		, 	,s!   B	AB	,BB		Bc                 Z    | j                   |   }| j                   j                  |       |S r   )r9   move_to_end)r   r   rL   s      r   	__getlinkzTTLCache.__getlink   s'    S!  %r   r   )r   r   r   __doc__r(   	monotonicr   rD   r   rJ   rN   rR   rU   rY   rc   rf   propertyrj   r!   r=   r   rq   rs   rP   rz   r   rF   __classcell__)rk   s   @r   r4   r4   6   s    J+/>>T 6 .3->-> 
, 5:4E4E % .3->->  $ #(.. $
 $ $
    
44;,r   r4   )r7   r(   cacher   r   r   r4   r   r   r   <module>r      s0       $+ +:Yu Yr   