
    (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
mZ d dlmZ d dlmZmZ d dl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$ erd dl%m&Z&  G d de!      Z'y)    N)	TYPE_CHECKINGAnyDictIterableListOptionalTupleUnioncast)URI)combomethodto_dict)Emptyempty)construct_user_agent)RPCEndpointRPCResponse   )#sort_batch_response_by_response_ids)handle_request_caching)HTTPSessionManager   )JSONBaseProvider   )ExceptionRetryConfigurationcheck_if_retry_on_failure)
Middlewarec                       e Zd Z ej                  d      ZdZdZdddefde	e
eef      de	e   de	e   de	e
eef      deddf 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# xZ$S )HTTPProviderzweb3.providers.HTTPProviderNendpoint_urirequest_kwargssessionexception_retry_configurationkwargsreturnc                     t        |   di | t        |      | _        | | j                  j	                         | _        nt        |      | _        |xs i | _        || _        y )N)explicit_session )	super__init__r   _request_session_managerget_default_http_endpointr    r   _request_kwargs_exception_retry_configuration)selfr    r!   r"   r#   r$   	__class__s         G/var/www/br/venv/lib/python3.12/site-packages/web3/providers/rpc/rpc.pyr*   zHTTPProvider.__init__@   sh     	"6" );G(T%--GGI  !$L 1D-3.K+    c                      d| j                    S )NzRPC connection )r    r/   s    r1   __str__zHTTPProvider.__str__Y   s     !2!2 344r2   c                     t        | j                  t              r4t        t        t
        j                  t
        j                  f      | _        | j                  S )N)errors)
isinstancer.   r   r   ConnectionErrorrequests	HTTPErrorTimeoutr4   s    r1   r#   z*HTTPProvider.exception_retry_configuration\   sG    d995A2M#&&$$3D/ 222r2   valuec                     || _         y )N)r.   )r/   r=   s     r1   r#   z*HTTPProvider.exception_retry_configurationh   s     /4+r2   c              #      K   d| j                   vrd| j                         f | j                   j                         E d {    y 7 w)Nheaders)r-   get_request_headersitemsr4   s    r1   get_request_kwargszHTTPProvider.get_request_kwargsn   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)r8   r   r0   __name__
__module__r   )clscls_namemodules      r1   rA   z HTTPProvider.get_request_headerst   sF    c<(}}--H||H /.vx@
 	
r2   methodrequest_datac                 x   | j                   }t        || j                   j                        r]t        | j                   j                        D ]:  }	  | j
                  j                  | j                  |fi | j                         c S  y | j
                  j                  | j                  |fi | j                         S # t        | j                   j                        $ rW}|| j                   j                  dz
  k  r4t        j                  | j                   j                  d|z  z         Y d}~|d}~ww xY 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+   make_post_requestr    rC   tupler7   timesleepbackoff_factor)r/   rJ   rK   ies        r1   _make_requestzHTTPProvider._make_request   s0    ..:)::KK 4==EEF   J488JJ))<;?;R;R;T   B400BB!!<373J3J3L  T??FFG  4==EEII

 >>MMPQSTPTT ! s   5C  "D9"AD42D44D9paramsc                    | j                   j                  d| j                  |       | j                  ||      }| j	                  ||      }| j                  |      }| j                   j                  d| j                  ||       |S )Nz(Making request HTTP. URI: %s, Method: %sz8Getting response HTTP. URI: %s, Method: %s, Response: %s)loggerdebugr    encode_rpc_requestrW   decode_rpc_response)r/   rJ   rX   rK   raw_responseresponses         r1   make_requestzHTTPProvider.make_request   s    68I8I6	
 ..vv>))&,?++L9F		
 r2   batch_requestsc                    | j                   j                  d| j                         | j                  |      } | j                  j
                  | j                  |fi | j                         }| j                   j                  d       | j                  |      }t        |t              s|S t        t        t        t           t        |                  S )Nz$Making batch request HTTP, uri: `%s`zReceived batch response HTTP.)rZ   r[   r    encode_batch_rpc_requestr+   rP   rC   r]   r8   listr   r   r   r   )r/   ra   rK   r^   r_   s        r1   make_batch_requestzHTTPProvider.make_batch_request   s     	@$BSBST44^DFt44FF|
/3/F/F/H
 	9:++L9(D)O2k"$G$QR
 	
r2   )%rE   rF   __qualname__logging	getLoggerrZ   r    r-   r   r   r
   r   strr   r   r   r*   r5   propertyr#   setterr   r   r	   rC   r   r   rA   r   bytesrW   r   r   r`   r   re   __classcell__)r0   s   @r1   r   r   ;   s   W<=FLO 37(,!% LuS#X/L !L #	L
 (0-u45(
L L 
L25 5 	3/J 	3 	3 #))46=>4	4 *4
 0HU38_$= 0 0
 
DcN 
 
K u  < ;    
"5c)9#:;
	tK +-	.
r2   r   )(rg   rR   typingr   r   r   r   r   r   r	   r
   r   
eth_typingr   	eth_utilsr   r   r:   web3._utils.emptyr   r   web3._utils.httpr   
web3.typesr   r   _utils.batchingr   _utils.cachingr   _utils.http_session_managerr   baser   utilsr   r   web3.middleware.baser   r   r(   r2   r1   <module>rz      sj     
 
 
 

 
D
# D
r2   