
    q`                     r    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dS )
    N   )Cachec                   &    e Zd ZdZddZd Zd ZdS )_Link)keyexpirenextprevNc                 "    || _         || _        d S N)r   r   )selfr   r   s      .lib/python3.11/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    tx---r   c                 >    | j         }| j        }||_         ||_        d S r   )r	   r
   )r   r	   r
   s      r   unlinkz_Link.unlink   s"    yy				r   )NN)__name__
__module____qualname__	__slots__r   r   r    r   r   r   r      sK        1I   . . .    r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )_Timerc                 "    || _         d| _        d S Nr   )_Timer__timer_Timer__nesting)r   timers     r   r   z_Timer.__init__   s    r   c                 N    | j         dk    r|                                 S | j        S r   r    r   _Timer__timer   s    r   __call__z_Timer.__call__   s%    >Q<<>>!;r   c                     | j         dk    r|                                 x| _        }n| j        }| xj         dz  c_         |S )Nr   r   r#   r   times     r   	__enter__z_Timer.__enter__$   sA    >Q!%/DK$$;D!r   c                 &    | xj         dz  c_         d S 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      sn                ' ' '+ + + + +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          |          | _
        || _        d S 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   s\    tWi000"WW$d $$	DI".00e}}


r   c                 |    	 | j         |         }|j        |                                 k      S # t          $ r Y dS w xY wNF)r9   r   r:   KeyError)r   r   links      r   __contains__zTTLCache.__contains__A   sQ    	6<$D dllnn455  	 	 	55	s   - 
;;c                     	 |                      |          }|j        |                                 k     }n# t          $ r d}Y nw xY w|r|                     |          S  || |          S rA   )_TTLCache__getlinkr   r:   rB   __missing__)r   r   cache_getitemrC   expireds        r   __getitem__zTTLCache.__getitem__I   s    	3>>#&&D kDLLNN2GG  	 	 	GGG	  	,##C((( =s+++s   5 AAc                    | j         5 }|                     |            || ||           d d d            n# 1 swxY w Y   	 |                     |          }|                                 n)# t          $ r t          |          x| j        |<   }Y nw xY w|| j        z   |_        | j        x|_	        }|j
        x|_
        }|x|_	        |_
        d S 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M$U+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,	>>#&&D KKMMMM  	2 	2 	2',Szz1DL	2 TZ';&	D9$	D $$	DIIIs   #7;;A- -#BBc                      || |           | j                             |          }|                                 |j        |                                 k     rt          |          d S r   )r9   popr   r   r:   rB   )r   r   cache_delitemrC   s       r   __delitem__zTTLCache.__delitem__d   s_    dC   |$$;''3-- ('r   c              #      K   | j         }|j        }||ur@| j        5 }|j        |k     s	|j        V  d d d            n# 1 swxY w Y   |j        }||u>d S d S r   )r6   r	   r:   r   r   )r   r?   currr(   s       r   __iter__zTTLCache.__iter__k   s      {y$ #d**(NNN# # # # # # # # # # # # # # # 9D $s   =AAc                     | j         }|j        }|                                 }t          | j                  }||ur&|j        |k     r|dz  }|j        }||ur|j        |k     |S r+   )r6   r	   r:   lenr9   r   )r   r?   rT   r(   counts        r   __len__zTTLCache.__len__u   ss    {y||~~DL!!$4;#5#5QJE9D $4;#5#5 r   c                 P   | j                             |           | j        }|x|_        |_        t          | j                                        d           D ]%}||_        |j        x|_        }|x|_        |_        &|                     | 	                                           d S )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<..006L6LMMM 	) 	)DDI#y(DI$((DI		DLLNN#####r   c                     | j         5 }|                     |            ||           cd d d            S # 1 swxY w Y   d S r   )r:   r   )r   
cache_reprr(   s      r   __repr__zTTLCache.__repr__   s    \ 	$TKK:d##	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s    599c                     | j         5 }|                     |           t                      j        cd d d            S # 1 swxY w Y   d S r   )r:   r   supercurrsize)r   r(   	__class__s     r   ri   zTTLCache.currsize   s    \ 	$TKK77#	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   (>AA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     zr   c                 (   ||                                  }| j        }|j        }| j        }t          j        }||urR|j        |k     rK || |j                   ||j        = |j        }|                                 |}||ur|j        |k     EdS dS dS dS )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{y)$4;#5#5M$)))dh9DKKMMMD $4;#5#5#5#5#5#5r   c                     | j         5 }|                     |           t          j        |            d d d            d S # 1 swxY w Y   d S r   )r:   r   r   clearr'   s     r   rp   zTTLCache.clear   s    \ 	TKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   *?AAc                 n    | j         5  t          j        | g|R i |cd d d            S # 1 swxY w Y   d S r   )r:   r   getr   argskwargss      r   rr   zTTLCache.get       \ 	4 	49T3D333F33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4   *..c                 n    | j         5  t          j        | g|R i |cd d d            S # 1 swxY w Y   d S r   )r:   r   rP   rs   s      r   rP   zTTLCache.pop   rv   rw   c                 n    | j         5  t          j        | g|R i |cd d d            S # 1 swxY w Y   d S r   )r:   r   
setdefaultrs   s      r   rz   zTTLCache.setdefault   s    \ 	; 	;#D:4:::6::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;rw   c                 F   | j         5 }|                     |           	 t          t          | j                            }||                     |          fcddd           S # t          $ r& t          dt          |           j	        z            dw xY w# 1 swxY w Y   dS )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 N N}tDzz/BBCCMN		, 	, 	, 	, 	, 	, 	, 	, 	, 	,s(   B!A# B#0BBBBc                 T    | 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   propertyri   r!   r=   r   rp   rr   rP   rz   r   rF   __classcell__)rj   s   @r   r4   r4   6   s       JJ+/>T    6 6 6 .3-> 
, 
, 
, 
, 5:4E % % % % .3->            $ $ $ #(. $ $ $ $
 $ $ $ $ X$
   X   X     
4 4 44 4 4; ; ;, , ,      r   r4   )r7   r(   cacher   r   r   r4   r   r   r   <module>r      s                     $+ + + + + + + +:Y Y Y Y Yu Y Y Y Y Yr   