
    (i                     F   d dl 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 d dlZd dlmZ d dlmZ d dlmZmZ er4d 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" d dl#m$Z$ d dlm%Z%m&Z& dZ'e
e
def   e
edf   f   Z(h dZ) G d dee         Z*de	d   de	d   fdZ+y)    )TracebackType)TYPE_CHECKINGAnyCallable	CoroutineDictGenericListTupleTypeUnioncastN)Self)Web3ValueError)TFuncTReturn)	AsyncWeb3Web3)AsyncContractFunction)ContractFunction)Method)PersistentConnectionProvider)AsyncJSONBaseProvider)JSONBaseProvider)RPCEndpointRPCResponsebatch_requestr   .>   eth_signeth_subscribeeth_unsubscribeeth_signTypedDataeth_sendTransactioneth_signTransactioneth_sendRawTransactionc                   &   e Zd Zded   ddfdZeded   fd       ZddZdd	Zdd
Z	de
ddfdZdeededef   ddf   ee   f   ddfdZded   fdZddZddZdefdZdee   dededdfdZded   fdZdefdZdee   dededdfdZy)RequestBatcherweb3)zAsyncWeb3[Any]r   returnNc                 N    || _         g | _        g | _        | j                          y N)r'   _requests_info_async_requests_info_initialize_batching)selfr'   s     E/var/www/br/venv/lib/python3.12/site-packages/web3/_utils/batching.py__init__zRequestBatcher.__init__J   s,    	=?  	! 	!!#    )r   r   c                     | j                   j                  j                  r t        d| j                   j                        S t        d| j                   j                        S )Nr   r   )r'   provideris_asyncr   r.   s    r/   	_providerzRequestBatcher._providerR   sO     yy!!** ($))*<*<=	
 ($))*<*<=	
r1   c                 F    | j                   j                  st        d      y )Nz[Batch has already been executed or cancelled. Create a new batch to issue batched requests.)r6   _is_batchingr   r5   s    r/   _validate_is_batchingz$RequestBatcher._validate_is_batchingZ   s&    ~~** *  +r1   c                 n    | j                   j                  j                  |        | j                          y r*   )r6   _batching_contextsetclearr5   s    r/   r-   z#RequestBatcher._initialize_batchinga   s#    ((,,T2

r1   c                 n    | j                          | j                  j                  j                  d        y r*   )r=   r6   r;   r<   r5   s    r/   _end_batchingzRequestBatcher._end_batchinge   s#    

((,,T2r1   batch_payloadc                 R   | j                          t        |d      r|j                         }| j                  j                  r<| j
                  j                  t        t        t        t        t        f   |             y | j                  j                  t        t        |             y )Ncall)r9   hasattrrB   r6   r4   r,   appendr   r   r   BatchRequestInformationr+   )r.   r@   s     r/   addzRequestBatcher.addi   s~    ""$=&))..0M
 >>""%%,,YsC)@@A=Q &&t,C]'STr1   zMethod[Callable[..., Any]].r   r   c                     | j                          |j                         D ]#  \  }}|D ]  }| j                   ||              % y r*   )r9   itemsrF   )r.   r@   methodparamsparams        r/   add_mappingzRequestBatcher.add_mappingy   sK     	""$+113 	(NFF ('(	(r1   r   c                     | j                          | j                  j                  j                  | j                        }| j                          |S r*   )r9   r'   manager_make_batch_requestr+   r?   r.   	responsess     r/   executezRequestBatcher.execute   s@    ""$II%%99$:M:MN	r1   c                      g | _         g | _        y r*   )r+   r,   r5   s    r/   r=   zRequestBatcher.clear   s     $&!r1   c                 $    | j                          y r*   r?   r5   s    r/   cancelzRequestBatcher.cancel   s    r1   c                 &    | j                          | S r*   r-   r5   s    r/   	__enter__zRequestBatcher.__enter__   s    !!#r1   exc_typeexc_valexc_tbc                 $    | j                          y r*   rU   r.   rZ   r[   r\   s       r/   __exit__zRequestBatcher.__exit__   s     	r1   c                 `  K   | j                          | j                  j                  r8| j                  j                  j                  | j                         d {   }n7| j                  j                  j                  | j                         d {   }| j                          |S 7 N7 wr*   )	r9   r6   has_persistent_connectionr'   rN    _async_make_socket_batch_requestr,   _async_make_batch_requestr?   rP   s     r/   async_executezRequestBatcher.async_execute   s     ""$>>33"ii//PP)) I #ii//II)) I 	s$   AB.B*7B.B,B.,B.c                 .   K   | j                          | S wr*   rX   r5   s    r/   
__aenter__zRequestBatcher.__aenter__   s     !!#s   c                 ,   K   | j                          y wr*   rU   r^   s       r/   	__aexit__zRequestBatcher.__aexit__   s      	s   )r(   N)__name__
__module____qualname__r   r0   propertyr6   r9   r-   r?   r   rF   r   r   r   r
   rL   rR   r=   rV   r   rY   r   BaseExceptionr   r_   rd   rf   rh    r1   r/   r&   r&   I   sQ   $U#;< $ $ 
5!LM 
 
3U UT U (,c""') I
( 
("m, '
4 }%  	
 
T-%8 $ }%  	
 
r1   r&   rQ   r   r(   c                 ~    t        d | D              rt        | d       S t        j                  dt        d       | S )Nc              3   B   K   | ]  }|j                  d       du  yw)idN)get).0responses     r/   	<genexpr>z6sort_batch_response_by_response_ids.<locals>.<genexpr>   s     
Dh8<<T)
Ds   c                     | d   S )Nrq   rn   )rt   s    r/   <lambda>z5sort_batch_response_by_response_ids.<locals>.<lambda>   s
    htn r1   )keyz|Received batch response with missing `id` for one or more responses. Relying on provider to return these responses in order.   )
stacklevel)allsortedwarningswarnRuntimeWarning)rQ   s    r/   #sort_batch_response_by_response_idsr      sD     
D)
DD i%DEE
 	F		
 r1   ),typesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r}   web3._utils.compatr   web3.exceptionsr   
web3.typesr   r   r'   r   r   web3.contract.async_contractr   web3.contract.contractr   web3.methodr   web3.providersr   web3.providers.async_baser   web3.providers.baser   r   r   BATCH_REQUEST_IDrE   $RPC_METHODS_UNSUPPORTED_DURING_BATCHr&   r   rn   r1   r/   <module>r      s       
  # mS&8 95c? JK ( $wWU^ wtM"	-r1   