
    (i
                     r    d dl Z d dlmZ d dlmZ d dlZd dlmZmZm	Z	m
Z
mZ  G d de      Z G d d      Zy)	    N)OrderedDict)Enum)AnyDictListOptionalTuplec                       e Zd ZdZdZy)RequestCacheValidationThreshold	finalizedsafeN)__name__
__module____qualname__	FINALIZEDSAFE     C/var/www/br/venv/lib/python3.12/site-packages/web3/utils/caching.pyr   r      s    IDr   r   c            
           e Zd ZddefdZdedefdZdefdZdede	de
e	eee	f   f   fdZdedee	   fd	ZddZdee
ee	f      fdZdedee	   fdZddede
ee	f   fdZdefdZ	 ddedede
ee	f   fdZy
)SimpleCachesizec                 0    || _         t               | _        y N)_sizer   _data)selfr   s     r   __init__zSimpleCache.__init__   s    
,7M
r   keyreturnc                     || j                   v S r   r   r   r   s     r   __contains__zSimpleCache.__contains__   s    djj  r   c                 ,    t        | j                        S r   )lenr   r   s    r   __len__zSimpleCache.__len__   s    4::r   valuec                 "   i }|| j                   vrit        | j                         | j                  k\  rG| j                   j                  d      \  }}|||<   t        | j                         | j                  k\  rG|| j                   |<   ||xs d fS )NFlast)r   r&   r   popitem)r   r   r)   evicted_itemskvs         r   cachezSimpleCache.cache"   s    
 djj djj/TZZ/zz))u)51#$a  djj/TZZ/  

3 m+t++r   c                 @    || j                   v r| j                   |   S d S r   r"   r#   s     r   get_cache_entryzSimpleCache.get_cache_entry2   s     "%"3tzz#==r   Nc                 8    | j                   j                          y r   )r   clearr'   s    r   r5   zSimpleCache.clear5   s    

r   c                 H    t        | j                  j                               S r   )listr   itemsr'   s    r   r8   zSimpleCache.items8   s    DJJ$$&''r   c                 V    || j                   vry | j                   j                  |      S r   )r   popr#   s     r   r:   zSimpleCache.pop;   s$    djj zz~~c""r   r,   c                 :    | j                   j                  |      S )Nr+   )r   r-   )r   r,   s     r   r-   zSimpleCache.popitemA   s    zz!!t!,,r   c                 F    t        | j                        | j                  k\  S r   )r&   r   r   r'   s    r   is_fullzSimpleCache.is_fullD   s    4::$**,,r   timeoutc                 t  K   t        j                          }||z   }	 t        j                  d       d {    	 | j                  |      S 7 # t        $ r\ t        j                          }||k\  rt        j
                  d      t        j                  t        d||z
               d {  7   Y nw xY ww)Nr   r+   z(Timeout waiting for item to be availableg?)timeasynciosleepr-   KeyErrorTimeoutErrormin)r   r,   r>   startend_timenows         r   async_await_and_popitemz#SimpleCache.async_await_and_popitemI   s      		7?--""">|||.. #  >iik(?!..B  mmCX^$<===>	 s?   3B8AB8A B8AB4+B.,B41B83B44B8)d   )r    N)T)Tg      $@)r   r   r   intr   strboolr$   r(   r   r	   r   r1   r   r3   r5   r   r8   r:   r-   r=   floatrI   r   r   r   r   r      s    :S :! ! ! , ,S ,U3S#X3F-G , >3 >8C= >(tE#s(O, (#s #x} #-D -E#s(O -- - 37>>*/>	sCx>r   r   )rA   collectionsr   enumr   r@   typingr   r   r   r   r	   r   r   r   r   r   <module>rR      s9      d 
A> A>r   