
    (i                        d Z 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
mZ ddlmZ ddlmZ  G d de      Z G d	 d
ej$                  e	e         Z G d dej$                        Zeddedef   dedeee      dedee   f
dZy)zP
A minimal implementation of the various gevent APIs used within this codebase.
    N)TracebackType)AnyCallableGenericLiteralType)Web3ValueError)TReturnc                       e Zd ZdZdZdZdZdZ	 	 ddede	e
   dededdf
dZdd	Zd
e	e
   de
deded   fdZdefdZedefd       ZddZddZddZdeddfdZdeddfdZy)TimeoutzC
    A limited subset of the `gevent.Timeout` context manager.
    Nseconds	exceptionargskwargsreturnc                      || _         || _        y N)r   r   )selfr   r   r   r   s        D/var/www/br/venv/lib/python3.12/site-packages/web3/_utils/threads.py__init__zTimeout.__init__%   s     "    c                 &    | j                          | S r   )startr   s    r   	__enter__zTimeout.__enter__/   s    

r   exc_typeexc_valexc_tbFc                      yNF )r   r   r   r   s       r   __exit__zTimeout.__exit__3   s     r   c                 :    | j                   y| j                    dS )N z seconds)r   r   s    r   __str__zTimeout.__str__;   s     <<,,x((r   c                     | j                   t        d      | j                  t        d      | j                  | j                   z   S )Nz>Timeouts with `seconds == None` do not have an expiration timeTimeout has not been started)r   r	   begun_atr   s    r   	expire_atzTimeout.expire_at@   sG    << P  ]]" !?@@}}t||++r   c                 r    | j                   t        d      t        j                         | _        d| _         y )Nz Timeout has already been startedT)
is_runningr	   timer(   r   s    r   r   zTimeout.startJ   s,    ??& !CDD		r   c                    | j                   t        d      | j                   du rt        d      | j                  y t        j                         | j                  kD  rcd| _         t        | j                  t              r| j                  t        |             t        | j                  t              r| j                  | y )Nr'   Fz"Timeout has already been cancelled)
r+   r	   r   r,   r)   
isinstancer   typestr	Exceptionr   s    r   checkzTimeout.checkP   s    ??" !?@@__% !EFF\\!YY[4>>)#DO$..$/nnSY//DNNI6nn$
 *r   c                     d| _         y r    )r+   r   s    r   cancelzTimeout.cancel`   s	    r   c                 N    t        j                  |       | j                          y r   )r,   sleepr2   r   r   s     r   r6   zTimeout.sleepc   s    

7

r   c                 j   K   t        j                  |       d {    | j                          y 7 wr   )asyncior6   r2   r7   s     r   async_sleepzTimeout.async_sleepg   s&     mmG$$$

 	%s   313)NN)r   r   r   N)__name__
__module____qualname____doc__r   r   r(   r+   floatr   BaseExceptionr   r   r   r   r   r"   r0   r%   propertyintr)   r   r2   r4   r6   r:   r!   r   r   r   r      s     GIHJ )-## &# 	#
 # 
#}%  	
 
) )
 ,3 , ,  U t  4 r   r   c            	       \     e Zd Z	 	 	 ddedef   dededdf fdZddZdd	edefd
Z	 xZ
S )ThreadWithReturnNtarget.r   r   r   c                 t    t         |   ||xs
 t               |xs i        || _        || _        || _        y )NrF   r   r   )superr   tuplerF   r   r   )r   rF   r   r   	__class__s       r   r   zThreadWithReturn.__init__m   sA     	<R 	 	

 	r   c                 Z     | j                   | j                  i | j                  | _        y r   )rF   r   r   _returnr   s    r   runzThreadWithReturn.run|   s!    "t{{DII==r   timeoutc                 n    | j                  |       	 | j                  S # t        $ r t        d      w xY w)Nz4Something went wrong.  No `_return` property was set)joinrM   AttributeErrorRuntimeError)r   rO   s     r   getzThreadWithReturn.get   s;    		'	W<< 	WUVV	Ws    4)NNNr;   r   )r<   r=   r>   r   r
   r   r   rN   r@   rT   __classcell__)rK   s   @r   rE   rE   l   s]     *.	g&  	
 
>W5 WG Wr   rE   c                   >    e Zd Zdededef   deddfdZd
dZd
d	Zy)
TimerClassintervalcallback.r   r   Nc                     t         j                  j                  |        || _        t        j                         | _        || _        || _        y r   )	threadingThreadr   rY   Eventterminate_eventrX   r   )r   rX   rY   r   s       r   r   zTimerClass.__init__   s:    !!$' (0 	r   c                     | j                   j                         sZ | j                  | j                    | j                   j	                  | j
                         | j                   j                         sYy y r   )r^   is_setrY   r   waitrX   r   s    r   rN   zTimerClass.run   sR    &&--/DMM499%  %%dmm4 &&--/r   c                 8    | j                   j                          y r   )r^   setr   s    r   stopzTimerClass.stop   s      "r   r;   )	r<   r=   r>   rC   r   r   r   rN   rd   r!   r   r   rW   rW      s7     c0B 3 SW 5
#r   rW   )thread_classrF   .r   re   r   r   c                J     || ||      }d|_         |j                          |S )NrH   T)daemonr   )rF   re   r   r   threads        r   spawnri      s.     F
 FM
LLNMr   )r?   r9   r[   r,   typesr   typingr   r   r   r   r   web3.exceptionsr	   
web3.typesr
   r1   r   r\   rE   rW   ri   r!   r   r   <module>rn      s       
Ni NbWy'')9 W6#!! #( 5ES'\" '01 	
 gr   