
­­­­­­­­­­­­­­­­­­
<!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asyncio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)	cancelledcancel	exceptionset_exception
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    r2   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r3   r   )r/   r0   r-   doner   _wait_closed)r#   r   r3   r   r   r   r   r   _closeM   s    

r7   c                c   sV   |d krt  }t j| j||d}|tt|  |E d H }t jd|dE d H  |S )Nr4   r   r
   )r   get_event_loopZgatherr-   add_done_callbackr   _close_waitedsleep)r#   r3   r   Zwait_closedretr   r   r   r6   _   s    
r6   c                 C   s   |    d S r   )cache_clear)r#   _r   r   r   r:   t   s    r:   c                 C   s   t | j| j|t| jS r   )r   r*   r+   r1   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    rD   c                 C   s   |  j d7  _ t| | d S N   )r*   rD   rC   r   r   r   
_cache_hit   s    rG   c                 C   s   |  j d7  _ t| | d S rE   )r+   rD   rC   r   r   r   _cache_miss   s    rH   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   r8   )clsr&   r   fn_args	fn_kwargsr   _self_loopr   r   r   	_get_loop   s    


rS      )rN   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)last)r/   r0   formatrS   _originr   r!   getr5   rG   r   Zshield
_exceptionr   r"   r   r   r9   r   r    r-   addremover1   popitemrH   )rO   rP   rR   r'   r   r   coror   )rU   rN   r   r&   r   r?   r$   r#   r   r   r#      sD    	





z,alru_cache.<locals>.wrapper.<locals>.wrappedF)r   r   iscoroutinefunctionr0   rX   r   rV   r   	coroutiner.   rY   r/   r   r@   
cache_infor=   r)   Z
invalidater7   closer2   open)r   rY   rU   rN   r&   r   r?   r$   )r   r#   r   wrapper   s&    

0zalru_cache.<locals>.wrapperrV   z{} decorating is not supported)callabler   NotImplementedErrorrX   )r   r?   r$   rN   r&   rU   r   rf   r   re   r   r	      s    
Hr	   )NrT   F)r   collectionsr   	functoolsr   r   r   r   r   ImportErrorrM   __version____all__r   r   r    r)   r.   r2   r7   ra   r6   r:   r@   rD   rG   rH   rS   r	   r   r   r   r   <module>   s@   
	   