o
    ÑtBh‰  ã                   @   sL   d dl Z d dlZddlmZ G dd„ dƒZG dd„ dƒZG dd	„ d	eƒZdS )
é    Né   )ÚCachec                   @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
Ú_Link)ÚkeyÚexpireÚnextÚprevNc                 C   s   || _ || _d S ©N)r   r   )Úselfr   r   © r   úe/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/cachetools/ttl.pyÚ__init__   ó   
z_Link.__init__c                 C   s   t | j| jffS r	   )r   r   r   ©r
   r   r   r   Ú
__reduce__   s   z_Link.__reduce__c                 C   s   | j }| j}||_ ||_d S r	   )r   r   )r
   r   r   r   r   r   Úunlink   s   
z_Link.unlink)NN)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   r   r   r   r   r   r   r      s
    
r   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú_Timerc                 C   s   || _ d| _d S ©Nr   )Ú_Timer__timerÚ_Timer__nesting)r
   Útimerr   r   r   r      r   z_Timer.__init__c                 C   s   | j dkr	|  ¡ S | jS r   ©r   r   Ú_Timer__timer   r   r   r   Ú__call__   s   
z_Timer.__call__c                 C   s2   | j dkr|  ¡  | _}n| j}|  j d7  _ |S )Nr   r   r   ©r
   Útimer   r   r   Ú	__enter__$   s
   
z_Timer.__enter__c                 G   s   |  j d8  _ d S ©Nr   )r   )r
   Úexcr   r   r   Ú__exit__,   s   z_Timer.__exit__c                 C   s   t | jffS r	   )r   r   r   r   r   r   r   /   ó   z_Timer.__reduce__c                 C   s   t | j|ƒS r	   )Úgetattrr   )r
   Únamer   r   r   Ú__getattr__2   r$   z_Timer.__getattr__N)	r   r   r   r   r   r    r#   r   r'   r   r   r   r   r      s    r   c                       sÞ   e Zd ZdZejdfdd„Zdd„ Zej	fdd„Z	ej
fd	d
„Z
ejfdd„Zdd„ Zdd„ Zdd„ Zejfdd„Ze‡ fdd„ƒZedd„ ƒZedd„ ƒZd)dd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Z‡  ZS )*ÚTTLCachez@LRU Cache implementation with per-item time-to-live (TTL) value.Nc                 C   sD   t  | ||¡ tƒ  | _}| |_|_t ¡ | _t	|ƒ| _
|| _d S r	   )r   r   r   Ú_TTLCache__rootr   r   ÚcollectionsÚOrderedDictÚ_TTLCache__linksr   Ú_TTLCache__timerÚ_TTLCache__ttl)r
   ÚmaxsizeÚttlr   Ú	getsizeofÚrootr   r   r   r   9   s   


zTTLCache.__init__c                 C   s4   z| j | }W n
 ty   Y dS w |j|  ¡ k  S ©NF)r,   ÚKeyErrorr   r-   )r
   r   Úlinkr   r   r   Ú__contains__A   s   ÿzTTLCache.__contains__c                 C   sL   z|   |¡}W n ty   d}Y nw |j|  ¡ k }|r!|  |¡S || |ƒS r3   )Ú_TTLCache__getlinkr4   r   r-   Ú__missing__)r
   r   Úcache_getitemr5   Úexpiredr   r   r   Ú__getitem__I   s   ÿ

zTTLCache.__getitem__c                 C   s¬   | j }|  |¡ || ||ƒ W d   ƒ n1 sw   Y  z|  |¡}W n ty7   t|ƒ | j|< }Y nw | ¡  || j |_| j |_	}|j
 |_
}| |_	|_
d S r	   )r-   r   r7   r4   r   r,   r   r.   r)   r   r   )r
   r   ÚvalueÚcache_setitemr   r5   r2   r   r   r   r   Ú__setitem__U   s   
þÿzTTLCache.__setitem__c                 C   s8   || |ƒ | j  |¡}| ¡  |j|  ¡ k rt|ƒ‚d S r	   )r,   Úpopr   r   r-   r4   )r
   r   Úcache_delitemr5   r   r   r   Ú__delitem__d   s   
ÿzTTLCache.__delitem__c                 c   sd    | j }|j}||ur0| j}|j|k s|jV  W d   ƒ n1 s"w   Y  |j}||usd S d S r	   )r)   r   r-   r   r   )r
   r2   Úcurrr   r   r   r   Ú__iter__k   s   €
€þûzTTLCache.__iter__c                 C   sT   | j }|j}|  ¡ }t| jƒ}||ur(|j|k r(|d8 }|j}||ur(|j|k s|S r!   )r)   r   r-   Úlenr,   r   )r
   r2   rB   r   Úcountr   r   r   Ú__len__u   s   
þzTTLCache.__len__c                 C   sj   | j  |¡ | j}| |_|_t| j ¡ dd„ dD ]}||_|j |_}| |_|_q|  |  	¡ ¡ d S )Nc                 S   ó   | j S r	   )r   )Úobjr   r   r   Ú<lambda>ƒ   s    z'TTLCache.__setstate__.<locals>.<lambda>)r   )
Ú__dict__Úupdater)   r   r   Úsortedr,   Úvaluesr   r-   )r
   Ústater2   r5   r   r   r   r   Ú__setstate__   s   zTTLCache.__setstate__c                 C   s<   | j }|  |¡ || ƒW  d   ƒ S 1 sw   Y  d S r	   )r-   r   )r
   Ú
cache_reprr   r   r   r   Ú__repr__‰   s   
$þzTTLCache.__repr__c                    s<   | j }|  |¡ tƒ jW  d   ƒ S 1 sw   Y  d S r	   )r-   r   ÚsuperÚcurrsizer   ©Ú	__class__r   r   rS   Ž   s   
$þzTTLCache.currsizec                 C   rG   )z%The timer function used by the cache.)r-   r   r   r   r   r   ”   ó   zTTLCache.timerc                 C   rG   )z,The time-to-live value of the cache's items.)r.   r   r   r   r   r0   ™   rV   zTTLCache.ttlc                 C   s‚   |du r|   ¡ }| j}|j}| j}tj}||ur;|j|k r?|| |jƒ ||j= |j}| ¡  |}||ur=|j|k sdS dS dS dS )z$Remove expired items from the cache.N)	r-   r)   r   r,   r   rA   r   r   r   )r
   r   r2   rB   Úlinksr@   r   r   r   r   r   ž   s   "ûzTTLCache.expirec                 C   s@   | j }|  |¡ t | ¡ W d   ƒ d S 1 sw   Y  d S r	   )r-   r   r   Úclearr   r   r   r   rX   ­   s   
"þzTTLCache.clearc                 O   óB   | j  tj| g|¢R i |¤ŽW  d   ƒ S 1 sw   Y  d S r	   )r-   r   Úget©r
   ÚargsÚkwargsr   r   r   rZ   ²   ó   $ÿzTTLCache.getc                 O   rY   r	   )r-   r   r?   r[   r   r   r   r?   ¶   r^   zTTLCache.popc                 O   rY   r	   )r-   r   Ú
setdefaultr[   r   r   r   r_   º   r^   zTTLCache.setdefaultc              	   C   sx   | j /}|  |¡ z	tt| jƒƒ}W n ty#   tdt| ƒj ƒd‚w ||  	|¡fW  d  ƒ S 1 s5w   Y  dS )zmRemove and return the `(key, value)` pair least recently used that
        has not already expired.

        z%s is emptyN)
r-   r   r   Úiterr,   ÚStopIterationr4   Útyper   r?   )r
   r   r   r   r   r   Úpopitem¾   s   
ÿ$ùzTTLCache.popitemc                 C   s   | j | }| j  |¡ |S r	   )r,   Úmove_to_end)r
   r   r<   r   r   r   Ú	__getlinkÌ   s   
zTTLCache.__getlinkr	   )r   r   r   Ú__doc__r   Ú	monotonicr   r6   r   r;   r>   rA   rC   rF   rO   rQ   ÚpropertyrS   r   r0   r   rX   rZ   r?   r_   rc   r7   Ú__classcell__r   r   rT   r   r(   6   s0    





r(   )r*   r   Úcacher   r   r   r(   r   r   r   r   Ú<module>   s    