
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    Wz8\                     @   s   d dl Z d dlmZ d dlmZmZmZmZ zd dl mZ W n e	k
rZ   e
e dZY nX dZdZdd	 Zd
d Zdd Zdd Zdd Zdd ZddddddZe jdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd+ddddd(d)d*ZdS ),    N)OrderedDict)
_CacheInfo	_make_keypartialwraps)ensure_futureasyncz1.0.2)
alru_cachec                 C   s0   z
|   W S  tk
r*   tj| d Y S X d S )Nloop)create_futureAttributeErrorasyncioZFuturer
    r   :/opt/alt/python38/lib/python3.8/site-packages/async_lru.pyr      s    
r   c                 C   s   t | dr| j} q | S )Nfunc)hasattrr   )fnr   r   r   	unpartial   s    
r   c                 C   sD   |  r|   d S | }|d k	r2| | d S | |  d S N)Z	cancelledcancelZ	exceptionZset_exceptionZ
set_resultresult)futtaskexcr   r   r   _done_callback   s    
r   c                 O   s*   t |||}|| jk}|r&| j| |S r   )r   _cachepop)wrappedtypedargskwargskeyexistsr   r   r   _cache_invalidate*   s
    
r$   c                 C   s    d | _ | _t | _t | _d S )Nr   )hitsmissesr   r   settasks)r   r   r   r   _cache_clear5   s    r)   c                 C   s`   | j std| j| j  koDt| j  koDt| j  koDdkn  }|sVtdd| _ d S )Nzalru_cache is not closedr   z#alru_cache was not closed correctlyF)closedRuntimeErrorr%   r&   lenr(   r   )r   Z
was_closedr   r   r   _open;   s    r-   FT)r   return_exceptionsr   c                C   sB   | j rtdd| _ |r4| jD ]}| s|  qt| ||dS )Nzalru_cache is closedTr.   r   )r*   r+   r(   doner   _wait_closed)r   r   r.   r   r   r   r   r   _closeM   s    

r2   c                c   sV   |d krt  }t j| j||d}|tt|  |E d H }t jd|dE d H  |S )Nr/   r   r
   )r   get_event_loopZgatherr(   add_done_callbackr   _close_waitedsleep)r   r.   r   Zwait_closedZretr   r   r   r1   _   s    
r1   c                 C   s   |    d S r   )cache_clear)r   _r   r   r   r5   t   s    r5   c                 C   s   t | j| j|t| jS r   )r   r%   r&   r,   r   )r   maxsizer   r   r   _cache_infox   s    r:   c                 C   s*   z| j | W n tk
r$   Y nX d S r   )r   move_to_endKeyErrorr   r"   r   r   r   __cache_touch   s    r>   c                 C   s   |  j d7  _ t| | d S N   )r%   r>   r=   r   r   r   
_cache_hit   s    rA   c                 C   s   |  j d7  _ t| | d S r?   )r&   r>   r=   r   r   r   _cache_miss   s    rB   c                C   sv   t |tr\| |A std| rRt|dd }|d krF|s>td|d }t||}qr|| }n|d krnt }n|}|S )Nz"choose self.loop or kwargs["loop"]__self__zseems not unbound functionr   )
isinstancestrAssertionErrorgetattrr   r3   )clsr!   r   fn_args	fn_kwargsr   Z_self_loopr   r   r   	_get_loop   s    


rL      )rH   r!   cache_exceptionsr   c                   sN    fdd}| d kr"|S t | s4t| dr<|| S td| d S )Nc              
      s   t  }t|s td t dr2   t tj fddt	 |_
d_tt_tt	_tt_tt_tt_S )Nz&Coroutine function is required, got {}_make_unbound_methodc                  ?   s:  j rtdtj| |d}t| |}j|}|d k	r| spt	| t
j||dE d H S |j}|d ks rt	| | S j| t|d}| |}t||d}|tt| j| |jj |j|< d k	rtjkrjjdd t| t
j||dE d H S )Nzalru_cache is closed for {}r
   F)Zlast)r*   r+   formatrL   _originr   r   getr0   rA   r   ZshieldZ
_exceptionr   r   r   r   r4   r   r   r(   addremover,   popitemrB   )rI   rJ   rK   r"   r   r   coror   )rN   rH   r   r!   r   r9   r   r   r   r   r      sD    	





z,alru_cache.<locals>.wrapper.<locals>.wrappedF)r   r   Ziscoroutinefunctionr+   rP   r   rO   r   	coroutiner)   rQ   r*   r   r:   
cache_infor7   r$   Z
invalidater2   closer-   open)r   rQ   rN   rH   r!   r   r9   r   )r   r   r   wrapper   s&    

0zalru_cache.<locals>.wrapperrO   z{} decorating is not supported)callabler   NotImplementedErrorrP   )r   r9   r   rH   r!   rN   r   r\   r   r[   r   r	      s    
Hr	   )NrM   F)r   collectionsr   	functoolsr   r   r   r   r   ImportErrorrG   __version____all__r   r   r   r$   r)   r-   r2   rW   r1   r5   r:   r>   rA   rB   rL   r	   r   r   r   r   <module>   s@   
	   