
    2                         S SK Jr  S SKr S SKJr  SSKJr   " S S\	5      r
 " S	 S
\	5      r " S S\5      rg! \ a	    S SKJr   N6f = f)    )absolute_importN)	monotonic)time   )Cachec                   .    \ rS rSrSrSS jrS rS rSrg)	_Link   )keyexpirenextprevNc                     Xl         X l        g N)r   r   )selfr   r   s      !lib/third_party/cachetools/ttl.py__init___Link.__init__   s    HK    c                 >    [         U R                  U R                  44$ r   )r	   r   r   r   s    r   
__reduce___Link.__reduce__   s    488T[[)))r   c                 L    U R                   nU R                  nXl         X!l        g r   )r   r   )r   r   r   s      r   unlink_Link.unlink   s    99D99DIIr   )r   r   )NN)	__name__
__module____qualname____firstlineno__	__slots__r   r   r   __static_attributes__ r   r   r	   r	      s    /)*r   r	   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
_Timer   c                     Xl         SU l        g Nr   )_Timer__timer_Timer__nesting)r   timers     r   r   _Timer.__init__!   s    LDNr   c                 Z    U R                   S:X  a  U R                  5       $ U R                  $ r(   r*   r)   _Timer__timer   s    r   __call___Timer.__call__%   s$    ~~\\^[[r   c                     U R                   S:X  a  U R                  5       =U l        nOU R                  nU =R                   S-  sl         U$ )Nr   r   r.   r   r   s     r   	__enter___Timer.__enter__+   s<    ~~<<>)dkD[[dNNaNKr   c                 .    U =R                   S-  sl         g Nr   )r*   )r   excs     r   __exit___Timer.__exit__3   s    NNaNr   c                 (    [         U R                  44$ r   )r%   r)   r   s    r   r   _Timer.__reduce__6   s    DLL?""r   c                 .    [        U R                  U5      $ r   )getattrr)   )r   names     r   __getattr___Timer.__getattr__9   s    4<<&&r   )	__nesting__time__timerN)r   r   r   r    r   r0   r4   r9   r   r@   r"   r#   r   r   r%   r%      s     #'r   r%   c                   l  ^  \ rS rSrSr\S4S jrS r\R                  4S jr	\R                  4S jr
\R                  4S jrS	 rS
 rS r\R                  4S jr\U 4S j5       r\S 5       r\S 5       rSS jrS rS rS rS rS r\" \R8                  S5      (       a	  S rSrU =r$ S rSrU =r$ )TTLCache=   z@LRU Cache implementation with per-item time-to-live (TTL) value.Nc                     [         R                  " XU5        [        5       =U l        nU=Ul        Ul        [        R                  " 5       U l        [        U5      U l
        X l        g r   )r   r   r	   _TTLCache__rootr   r   collectionsOrderedDict_TTLCache__linksr%   _TTLCache__timer_TTLCache__ttl)r   maxsizettlr+   	getsizeofroots         r   r   TTLCache.__init__@   sL    	NN4), DK$  DI	**,DL%=DLJr   c                 ~     U R                   U   nUR                  U R                  5       :  + $ ! [         a     gf = fNF)rL   r   rM   KeyError)r   r   links      r   __contains__TTLCache.__contains__H   s@    0\\#d ++//  s   / 
<<c                      U R                  U5      nUR                  U R                  5       :  nU(       a  U R	                  U5      $ U" X5      $ ! [         a    Sn N.f = frU   )_TTLCache__getlinkr   rM   rV   __missing__)r   r   cache_getitemrW   expireds        r   __getitem__TTLCache.__getitem__P   s`    -^^C d dlln,gc""4%%  gs   A AAc                    U R                    nU R                  U5        U" XU5        S S S 5         U R                  U5      nUR                  5         WU R                  -   Ul        U R                  =Ul	        nUR                  =Ul
        nU=Ul	        Ul
        g ! , (       d  f       Ny= f! [         a    [        U5      =U R                  U'   n Nf = fr   )rM   r   r[   r   rV   r	   rL   rN   rI   r   r   )r   r   valuecache_setitemr   rW   rR   r   s           r   __setitem__TTLCache.__setitem__\   s    	
kk$Du% 
^^C d kkm#DK{{"DIyy DI  DI	 

  ,!&s+dll3$,s   BB, 
B),$CCc                     U" X5        U R                   R                  U5      nUR                  5         UR                  U R	                  5       :  a  [        U5      eg r   )rL   popr   r   rM   rV   )r   r   cache_delitemrW   s       r   __delitem__TTLCache.__delitem__k   sH    $<<C DKKM{{T\\^#SM $r   c              #      #    U R                   nUR                  nX!LaF  U R                   nUR                  U:  d  UR                  v   S S S 5        UR                  nX!La  ME  g g ! , (       d  f       N"= f7fr   )rI   r   rM   r   r   )r   rR   currr   s       r   __iter__TTLCache.__iter__r   sX     ;;D99D

<<4d".  YYd 
<s"   )A7A&
A7$A7&
A40A7c                     U R                   nUR                  nU R                  5       n[        U R                  5      nX!La7  UR
                  U:  a'  US-  nUR                  nX!La  UR
                  U:  a  M'  U$ r7   )rI   r   rM   lenrL   r   )r   rR   rl   r   counts        r   __len__TTLCache.__len__|   sj    ;;D99D<<>DE

t{{T1qjeYYd 
t{{T1 Lr   c                 N   U R                   R                  U5        U R                  nU=Ul        Ul        [        U R                  R                  5       S S9 H*  nX#l        UR                  =Ul        nU=Ul        Ul        M,     U R                  U R                  5       5        g )Nc                     U R                   $ r   )r   )objs    r   <lambda>'TTLCache.__setstate__.<locals>.<lambda>   s    cjjr   )r   )
__dict__updaterI   r   r   sortedrL   valuesr   rM   )r   staterR   rW   r   s        r   __setstate__TTLCache.__setstate__   s    MM;;D  DI	t||**,2HIi"di$""di$) J 	KKr   c                     U R                    nU R                  U5        U" U 5      sS S S 5        $ ! , (       d  f       g = fr   )rM   r   )r   
cache_reprr   s      r   __repr__TTLCache.__repr__   s)    	
kk$ 
s   0
>c                    > U R                    nU R                  U5        [        [        U ]  sS S S 5        $ ! , (       d  f       g = fr   )rM   r   superrF   currsize)r   r   	__class__s     r   r   TTLCache.currsize   s,    	
kk$8T+ 
s	   7
Ac                     U R                   $ )z%The timer function used by the cache.)rM   r   s    r   r+   TTLCache.timer   s     <<r   c                     U R                   $ )z,The time-to-live value of the cache's items.)rN   r   s    r   rP   TTLCache.ttl   s     ::r   c                 d   Uc  U R                  5       nU R                  nUR                  nU R                  n[        R
                  nX2Lae  UR                  U:  aT  U" XR                  5        XCR                  	 UR                  nUR                  5         UnX2La  UR                  U:  a  MR  gggg)z$Remove expired items from the cache.N)	rM   rI   r   rL   r   ri   r   r   r   )r   r   rR   rl   linksrh   r   s          r   r   TTLCache.expire   s    |\\^d;;D99DLLE%%M

t{{T1D((#
/YYd
kkmd 
t{{T1
1
r   c                     U R                    nU R                  U5        [        R                  " U 5        S S S 5        g ! , (       d  f       g = fr   )rM   r   r   clearr3   s     r   r   TTLCache.clear   s-    	
kk$kk$ 
s	   (>
Ac                     U R                      [        R                  " U /UQ70 UD6sS S S 5        $ ! , (       d  f       g = fr   )rM   r   getr   argskwargss      r   r   TTLCache.get   )    	YYt-d-f- 
   1
?c                     U R                      [        R                  " U /UQ70 UD6sS S S 5        $ ! , (       d  f       g = fr   )rM   r   rg   r   s      r   rg   TTLCache.pop   r   r   c                     U R                      [        R                  " U /UQ70 UD6sS S S 5        $ ! , (       d  f       g = fr   )rM   r   
setdefaultr   s      r   r   TTLCache.setdefault   s+    	d4T4V4 
r   c                 4   U R                    nU R                  U5         [        [        U R                  5      5      nX R                  U5      4sSSS5        $ ! [         a#    [        SU R                  R                  -  5      ef = f! , (       d  f       g= f)z^Remove and return the `(key, value)` pair least recently used that

has not already expired.

Nz%s is empty)
rM   r   r   iterrL   rg   StopIterationrV   r   r   )r   r   r   s      r   popitemTTLCache.popitem   s}     

kk$$4%& XXc]# 
  @}t~~'>'>>??@	 
s!   B	AB	-BB		
Bmove_to_endc                 Z    U R                   U   nU R                   R                  U5        U$ r   )rL   r   r   r   rb   s      r   	__getlinkTTLCache.__getlink   s'    ll3e
lls#lr   c                 X    U R                   R                  U5      nX R                   U'   U$ r   )rL   rg   r   s      r   r   r      s'    lls#ell3lr   )__links__rootrD   __ttlr   ) r   r   r   r    __doc__default_timerr   rX   r   r_   rd   ri   rm   rr   r~   r   propertyr   r+   rP   r   r   r   rg   r   r   hasattrrJ   rK   r[   r"   __classcell__)r   s   @r   rF   rF   =   s    H)6$ 0 ,1+<+< 
& 382C2C ! ,1+<+<   !& 
 , ,
    
..5$ [$$m44  r   rF   )
__future__r   rJ   r   r   r   ImportErrorcacher   objectr	   r%   rF   r#   r   r   <module>r      sS    & )- F $'V '<bu bm  )()s   : A	A	