o
    i%                     @   sH  d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ejdkrLd dl
mZ nd dlmZ dZdZed	Zed
Z eeee f Z!ede!e  f Z"ee"e  ddf Z#eG dd deZ$eej%G dd dee  Z&eG dd dee  Z'eG dd dee ef Z(	d#dee) de*dee+ dee#e  ge'e  f fddZ,e		d$dddee) de*dee+ dee#e  ge'e  f fdd Z-ede#e  de'e  fd!d Z-		d$dddeee) e#e  f de*dee+ deee#e  ge'e  f e'e  f fd"d Z-dS )%    N)_is_coroutine)
_CacheInfo	_make_keypartialpartialmethod)AnyCallable	CoroutineGenericHashableOptionalOrderedDictSetType	TypedDictTypeVarUnioncastfinaloverload)      )Selfz2.0.4)
alru_cache_T_R.zpartial[_Coro[_R]]zpartialmethod[_Coro[_R]]c                   @   s2   e Zd ZU eed< ee ed< eed< eed< dS )_CacheParameterstypedmaxsizetasksclosedN)__name__
__module____qualname__bool__annotations__r   int r'   r'   M/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/async_lru/__init__.pyr   +   s
   
 r   c                   @   s.   e Zd ZU ded< eej ed< dddZdS )	
_CacheItemasyncio.Future[_R]fut
later_callreturnNc                 C   s"   | j d ur| j   d | _ d S d S N)r,   cancelselfr'   r'   r(   r/   9   s   


z_CacheItem.cancelr-   N)r!   r"   r#   r%   r   asyncioHandler/   r'   r'   r'   r(   r)   3   s   
 r)   c                
   @   s  e Zd Zdee dee dedee ddf
ddZ	d	e
d
edefddZd,ddZdddeddfddZdefddZdefddZde
ddfddZde
ddfddZddde
dd ddfd!d"Zd#ed$edefd%d&Zd'ed(eee  deed)f fd*d+ZdS )-_LRUCacheWrapperfnr   r   ttlr-   Nc                 C   s
  z|j | _ W n	 ty   Y nw z|j| _W n	 ty   Y nw z|j| _W n	 ty/   Y nw z|j| _W n	 ty?   Y nw z|j| _W n	 tyO   Y nw z	| j|j W n	 tyb   Y nw t| _|| _	|| _
|| _|| _t | _d| _d| _d| _t | _d S )NFr   )r"   AttributeErrorr!   r#   __doc__r%   __dict__updater   __wrapped___LRUCacheWrapper__maxsize_LRUCacheWrapper__typed_LRUCacheWrapper__ttlr   _LRUCacheWrapper__cache_LRUCacheWrapper__closed_LRUCacheWrapper__hits_LRUCacheWrapper__missesset_LRUCacheWrapper__tasks)r1   r6   r   r   r7   r'   r'   r(   __init__A   sP   z_LRUCacheWrapper.__init__argskwargsc                O   s4   t ||| j}| j|d }|d u rdS |  dS )NFT)r   r>   r@   popr/   )r1   rG   rH   key
cache_itemr'   r'   r(   cache_invalidatem   s   z!_LRUCacheWrapper.cache_invalidatec                 C   sD   d| _ d| _| j D ]
}|jr|j  q| j  | j  d S )Nr   )rB   rC   r@   valuesr,   r/   clearrE   )r1   cr'   r'   r(   cache_clearw   s   

z_LRUCacheWrapper.cache_clearF)waitrQ   c                   sR   d| _ t| j}|sd S |s|D ]
}| s|  qtj|ddiI d H  d S )NTreturn_exceptions)rA   listrE   doner/   r3   gather)r1   rQ   r   taskr'   r'   r(   cache_close   s   
z_LRUCacheWrapper.cache_closec                 C   s   t | j| j| jt| jS r.   )r   rB   rC   r=   lenr@   r0   r'   r'   r(   
cache_info   s   z_LRUCacheWrapper.cache_infoc                 C   s   t | j| jt| j| jdS )N)r   r   r   r    )r   r=   r>   rX   rE   rA   r0   r'   r'   r(   cache_parameters   s   z!_LRUCacheWrapper.cache_parametersrJ   c                 C   s   |  j d7  _ | j| d S N   )rB   r@   move_to_endr1   rJ   r'   r'   r(   
_cache_hit   s   z_LRUCacheWrapper._cache_hitc                 C   s   |  j d7  _ d S r[   )rC   r^   r'   r'   r(   _cache_miss   s   z_LRUCacheWrapper._cache_missr+   r*   rV   zasyncio.Task[_R]c                 C   s   | j | | j|}| jd ur%|d ur%t }|| j| jj|d |_	|
 r/|  d S | }|d ur>|| d S ||  d S r.   )rE   discardr@   getr?   r3   get_running_loop
call_laterrI   r,   	cancelledr/   	exceptionset_exception
set_resultresult)r1   r+   rJ   rV   rK   loopexcr'   r'   r(   _task_done_callback   s   
z$_LRUCacheWrapper._task_done_callbackfn_args	fn_kwargsc                   s>  | j rtd|  t }t||| j}| j|}|d urO|j	 s3| 
| t|jI d H S |jj}|d u rE| 
| |j S | j|}|  | }| j|i |}||}	| j|	 |	t| j|| t|d | j|< | jd urt| j| jkr| jjdd\}
}|  | | t|I d H S )Nzalru_cache is closed for F)last)rA   RuntimeErrorr3   rc   r   r>   r@   rb   r+   rT   r_   shield
_exceptionri   rI   r/   create_futurer<   create_taskrE   addadd_done_callbackr   rl   r)   r=   rX   popitemr`   )r1   rm   rn   rj   rJ   rK   rk   r+   cororV   dropped_keyr'   r'   r(   __call__   s6   





z_LRUCacheWrapper.__call__instanceownerz&_LRUCacheWrapperInstanceMethod[_R, _T]c                 C   s   |d u r| S t | |S r.   )_LRUCacheWrapperInstanceMethod)r1   r{   r|   r'   r'   r(   __get__   s   
z_LRUCacheWrapper.__get__r2   )r!   r"   r#   _CBr   r   r&   r$   floatrF   r   r   rL   rP   rW   r   rY   r   rZ   r_   r`   rl   rz   r   r   r   r   r~   r'   r'   r'   r(   r5   ?   sH    
,



(

r5   c                   @   s   e Zd Zdee deddfddZdedede	fd	d
Z
dddZdddde	de	ddfddZdefddZdefddZdededefddZdS )r}   wrapperr{   r-   Nc                 C   s   z|j | _ W n	 ty   Y nw z|j| _W n	 ty   Y nw z|j| _W n	 ty/   Y nw z|j| _W n	 ty?   Y nw z|j| _W n	 tyO   Y nw z	| j|j W n	 tyb   Y nw t| _|j	| _	|| _
|| _d S r.   )r"   r8   r!   r#   r9   r%   r:   r;   r   r<   (_LRUCacheWrapperInstanceMethod__instance'_LRUCacheWrapperInstanceMethod__wrapper)r1   r   r{   r'   r'   r(   rF      sD   
z'_LRUCacheWrapperInstanceMethod.__init__rG   rH   c                O   s   | j j| jg|R i |S r.   )r   rL   r   )r1   rG   rH   r'   r'   r(   rL     s   z/_LRUCacheWrapperInstanceMethod.cache_invalidatec                 C   s   | j   d S r.   )r   rP   r0   r'   r'   r(   rP     s   z*_LRUCacheWrapperInstanceMethod.cache_clearFT)r/   rR   r/   rR   c                   s   | j  I d H  d S r.   )r   rW   )r1   r/   rR   r'   r'   r(   rW     s   z*_LRUCacheWrapperInstanceMethod.cache_closec                 C   
   | j  S r.   )r   rY   r0   r'   r'   r(   rY        
z)_LRUCacheWrapperInstanceMethod.cache_infoc                 C   r   r.   )r   rZ   r0   r'   r'   r(   rZ   "  r   z/_LRUCacheWrapperInstanceMethod.cache_parametersrm   rn   c                   s"   | j | jg|R i |I d H S r.   )r   r   )r1   rm   rn   r'   r'   r(   rz   %  s    z'_LRUCacheWrapperInstanceMethod.__call__r2   )r!   r"   r#   r5   r   r   rF   r   r   r$   rL   rP   rW   r   rY   r   rZ   rz   r'   r'   r'   r(   r}      s*    
$

r}   r   r   r7   r-   c                    s&   dt t dtt f fdd}|S )Nr6   r-   c                    sh   | }t |ttfr|j}t |ttfs	t|std| t| dr(|  } t	t
tt |  S )Nz$Coroutine function is required, got _make_unbound_method)
isinstancer   r   funcr3   iscoroutinefunctionrp   hasattrr   r5   r   r   r   )r6   originr   r7   r   r'   r(   r   .  s   

z_make_wrapper.<locals>.wrapper)_CBPr   r5   )r   r   r7   r   r'   r   r(   _make_wrapper)  s   "r      F)r7   c                C      d S r.   r'   )r   r   r7   r'   r'   r(   r   @  s   r   c                C   r   r.   r'   )r   r'   r'   r(   r   J  s   c                C   s\   | d u s	t | trt| ||S ttt | }t|st|dr'tddd |S t|d)Nr   r   Fz decorating is not supported)	r   r&   r   r   r   r   callabler   NotImplementedError)r   r   r7   r6   r'   r'   r(   r   R  s   r.   )r   F).r3   dataclassessysasyncio.coroutinesr   	functoolsr   r   r   r   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   version_infor   typing_extensions__version____all__r   r   _Coror   r   r   	dataclassr)   r5   r}   r&   r$   r   r   r   r'   r'   r'   r(   <module>   s    D

 /=
	 