
    (i                         d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d	d
lmZ d	dlmZ d	dlm Z  ddl!m"Z" ddl#m$Z$m%Z%  G d de"      Z&y)    N)AnyDictIterableListOptionalTupleUnioncast)ClientErrorClientSession)URI)combomethodto_dict)Emptyempty)construct_user_agent)RPCEndpointRPCResponse   )#sort_batch_response_by_response_ids)async_handle_request_caching)HTTPSessionManager   )AsyncJSONBaseProvider   )ExceptionRetryConfigurationcheck_if_retry_on_failurec                       e Zd Z ej                  d      ZdZdZddefde	e
eef      de	e   de	e
eef      deddf
 fdZd	edefd
ZdefdZedefd       Zej,                  de
eef   ddfd       Zedeeeef      fd       Zedeeef   fd       ZdededefdZ e!dedede"fd       Z#de$eeef      de
e$e"   e"f   fdZ%ddZ& xZ'S )AsyncHTTPProviderz web3.providers.AsyncHTTPProviderNendpoint_urirequest_kwargsexception_retry_configurationkwargsreturnc                     t               | _        | | j                  j                         | _        nt	        |      | _        |xs i | _        || _        t        |    di | y )N )	r   _request_session_managerget_default_http_endpointr    r   _request_kwargs_exception_retry_configurationsuper__init__)selfr    r!   r"   r#   	__class__s        M/var/www/br/venv/lib/python3.12/site-packages/web3/providers/rpc/async_rpc.pyr,   zAsyncHTTPProvider.__init__=   sd     );(<%--GGI  !$L 1D-3.K+"6"    sessionc                 j   K   | j                   j                  | j                  |       d {   S 7 wN)r'   async_cache_and_return_sessionr    )r-   r1   s     r/   cache_async_sessionz%AsyncHTTPProvider.cache_async_sessionT   s4     22QQw
 
 	
 
s   *313c                      d| j                    S )NzRPC connection )r    r-   s    r/   __str__zAsyncHTTPProvider.__str__Y   s     !2!2 344r0   c                     t        | j                  t              rt        t        t
        f      | _        | j                  S )N)errors)
isinstancer*   r   r   r   TimeoutErrorr7   s    r/   r"   z/AsyncHTTPProvider.exception_retry_configuration\   s5    d995A2M#\23D/ 222r0   valuec                     || _         y r3   )r*   )r-   r=   s     r/   r"   z/AsyncHTTPProvider.exception_retry_configurationd   s     /4+r0   c              #      K   d| j                   vrd| j                         f | j                   j                         E d {    y 7 w)Nheaders)r)   get_request_headersitemsr7   s    r/   get_request_kwargsz$AsyncHTTPProvider.get_request_kwargsj   s@     D000T55777''--///s   A A
AA
c                     t        | t              r| j                  j                  }n| j                  }| j                  }dt        ||      dS )Nzapplication/json)zContent-Typez
User-Agent)r;   r   r.   __name__
__module__r   )clscls_namemodules      r/   rA   z%AsyncHTTPProvider.get_request_headersp   sG    c,-}}--H||H /.vx@
 	
r0   methodrequest_datac                   K   | j                   t        || j                   j                        ret        | j                   j                        D ]B  }	  | j
                  j                  | j                  |fi | j                          d{   c S  y | j
                  j                  | j                  |fi | j                          d{   S 7 F# t        | j                   j                        $ rX || j                   j                  dz
  k  r:t        j                  | j                   j                  d|z  z         d{  7   Y  w xY w7 w)z
        If exception_retry_configuration is set, retry on failure; otherwise, make
        the request without retrying.
        Nr   r   )r"   r   method_allowlistrangeretriesr'   async_make_post_requestr    rC   tupler:   asynciosleepbackoff_factor)r-   rJ   rK   is       r/   _make_requestzAsyncHTTPProvider._make_request}   sO     ..:)::KK 4==EEF !V!>!>!V!V))<";?;R;R;T"   N66NN!!<373J3J3L   T??FFG 4==EEII%mm >>MMPQSTPTT   !sU   AE9CCC>EEECA0EEE
EEEparamsc                 *  K   | j                   j                  d| j                  |       | j                  ||      }| j	                  ||       d {   }| j                  |      }| j                   j                  d| j                  ||       |S 7 ?w)Nz(Making request HTTP. URI: %s, Method: %sz8Getting response HTTP. URI: %s, Method: %s, Response: %s)loggerdebugr    encode_rpc_requestrV   decode_rpc_response)r-   rJ   rW   rK   raw_responseresponses         r/   make_requestzAsyncHTTPProvider.make_request   s     68I8I6	
 ..vv>!//EE++L9F		
  Fs   ABBA Bbatch_requestsc                   K   | j                   j                  d| j                         | j                  |      } | j                  j
                  | j                  |fi | j                          d {   }| j                   j                  d       | j                  |      }t        |t              s|S t        t        t        t           t        |                  S 7 kw)Nz%Making batch request HTTP - uri: `%s`zReceived batch response HTTP.)rY   rZ   r    encode_batch_rpc_requestr'   rP   rC   r\   r;   listr   r
   r   r   )r-   r`   rK   r]   r^   s        r/   make_batch_requestz$AsyncHTTPProvider.make_batch_request   s      	A4CTCTU44^DRT::RR|
/3/F/F/H
 
 	9:++L9(D)O2k"$G$QR
 	

s   A1C!3C4A,C!c                   K   | j                   j                  }|j                         D ]  \  }}|j                          d {     |j	                          | j
                  j                  d| j                         y 7 =w)Nz"Successfully disconnected from: %s)r'   session_cacherB   closeclearrY   infor    )r-   cache_r1   s       r/   
disconnectzAsyncHTTPProvider.disconnect   sh     --;;++- 	"JAw--/!!	"=t?P?PQ "s   A BB >B)r$   N)(rE   rF   __qualname__logging	getLoggerrY   r    r)   r   r   r	   r   strr   r   r   r,   r   r5   r8   propertyr"   setterr   r   r   rC   r   r   rA   r   bytesrV   r   r   r_   r   rd   rl   __classcell__)r.   s   @r/   r   r   8   s   WABFLO 37(, #uS#X/# !# (0-u45(
	# # 
#.
 
= 

5 5 3/J 3 3 #))46=>4	4 *4
 0HU38_$= 0 0
 

DcN 

 

+ U u < " c k  "
"5c)9#:;
	tK +-	.
"Rr0   r   )'rR   rn   typingr   r   r   r   r   r   r	   r
   aiohttpr   r   
eth_typingr   	eth_utilsr   r   web3._utils.emptyr   r   web3._utils.httpr   
web3.typesr   r   _utils.batchingr   _utils.cachingr   _utils.http_session_managerr   
async_baser   utilsr   r   r   r&   r0   r/   <module>r      sb     	 	 	

JR- JRr0   