
    (i                     (   U 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mZ d dlmZmZ d dlmZ d dlmZmZmZmZmZ erd dlmZmZ d dlmZ d dlmZ i i i d	Zeed
<   edededededef
d       Z edegef   Z!edegeeeef   f   Z" G d de      Z#y)    )TYPE_CHECKINGAnyCallable	CoroutineLiteralOptionalUnioncast)assoccurrymerge)BadResponseFormatWeb3ValueError)Web3MiddlewareBuilder)EthSubscriptionParams
FormattersFormattersDictRPCEndpointRPCResponse)	AsyncWeb3Web3)Web3Middleware)PersistentConnectionProvider)request_formattersresult_formatterserror_formattersFORMATTER_DEFAULTSmethodr   r   responsereturnc                 x   dt         d   dt        dt        f   dt        ffd}t	        t
              st        dj                              j                  d      | |v r |d||          S j                  d	      $d	   j                  d      | |v r |d	||          S d
v r| |v r |d
||          S S )Nresponse_type)resulterrorparamsmethod_response_formatter.r    c                     |    }| dk(  r7t        t        |          }t        | t        d   d ||d                     S t        |  ||            S )Nr%   r#   )r
   r   r   )r"   r&   appropriate_responser   s      K/var/www/br/venv/lib/python3.12/site-packages/web3/middleware/formatting.py_format_responsez4_apply_response_formatters.<locals>._format_response;   s|      (6H$#'(=x?V#W X&-.B8.LM  -)BCW)X     zHMalformed response: expected a valid JSON-RPC response object, got: `{}`r#   r%   r$   )	r   r   r   r   
isinstancedictr   formatget)r   r   r   r   r*   s      ` r)   _apply_response_formattersr0   4   s    :;#+CH#5 
, h%6(#
 	
 
h		+:K0K*;F*CDD 	X*X""8,8''*;F*CDD	H	+;!;)9&)ABBr+   r   AsyncWeb3[Any]c                      e Zd ZU dZeed<   dZeed<   dZeed<   dZe	ed<   dZ
eed<   ee	 	 	 	 	 dded   dee   dee   dee   dee	   dee   d	d fd
              Zddded	efdZdeddd	efdZddded	efdZdeddd	efdZy)FormattingMiddlewareBuilderNr   r   r   sync_formatters_builderasync_formatters_builderw3)r   r1   r    c                     ||||t        d      |||||t        d      t        |       }|xs i |_        |xs i |_        |xs i |_        ||_        ||_        |S )NzFMust specify both sync_formatters_builder and async_formatters_builderzACannot specify formatters_builder and formatters at the same time)r   r3   r   r   r   r4   r5   )r6   r   r   r   r4   r5   
middlewares          r)   buildz!FormattingMiddlewareBuilder.buildr   s     $+0H0T%16N6V X  #.3K3W".$0#/$W  14
(:(@b
%'8'>B
$&6&<"
#-D
*.F
+r+   r   r   r%   c           	          | j                   Jt        t        | j                  t        d| j                        |            }|j                  d      | _        || j                  v r| j                  |   } ||      }||fS )Nr   r   )r4   r   r   r
   _w3popr   selfr   r%   
formatters	formatters        r)   request_processorz-FormattingMiddlewareBuilder.request_processor   s|    ''3",,T&$((-CVLJ '1nn5I&JD#T,,,//7Iv&Fv~r+   r   r   c           	          | j                   Ht        t        | j                  t        d| j                        |            }|d   | _        |d   | _        t        || j
                  | j                  |      S )Nr   r   r   )r4   r   r   r
   r;   r   r   r0   )r>   r   r   r?   s       r)   response_processorz.FormattingMiddlewareBuilder.response_processor   sy    ''3",,T&$((-CVLJ &00C%DD"$./A$BD!)""!!	
 	
r+   c           	        K   | j                   Rt        t        | j                  t        d| j                        |       d {         }|j                  d      | _        || j                  v r| j                  |   } ||      }||fS 7 Gw)Nr1   r   )r5   r   r   r
   r;   r<   r   r=   s        r)   async_request_processorz3FormattingMiddlewareBuilder.async_request_processor   s     ((4"33)4884f J '1nn5I&JD#T,,,//7Iv&Fv~s   A BB

ABc           	        K   | j                   Pt        t        | j                  t        d| j                        |       d {         }|d   | _        |d   | _        | j                  j                  j                  r]t        d| j                  j                        }|j                  j                  |t        || j
                  | j                               |S t        || j
                  | j                  |      S 7 w)Nr1   r   r   r   )r5   r   r   r
   r;   r   r   providerhas_persistent_connection_request_processor$append_middleware_response_processorr0   )r>   r   r   r?   rG   s        r)   async_response_processorz4FormattingMiddlewareBuilder.async_response_processor   s      ((4"33)4884f J &00C%DD"$./A$BD!8866:DHH<M<MNH''LL***)) O-&&%%	 )s   A D C>
B<D )NNNNN)__name__
__module____qualname__r   r   __annotations__r   r   r4   SYNC_FORMATTERS_BUILDERr5   ASYNC_FORMATTERS_BUILDERstaticmethodr   r	   r   r9   r   rA   r   rC   rE   rK    r+   r)   r3   r3   k   s9   %)
)$(z(#'j'7;4;9=6=
 482615EIGK"*+" %Z0" $J/	"
 #:." "**A!B" #++C"D" 
'"  "H s s 
 
 
RU 
$M 3 SV  !-:	r+   r3   N)$typingr   r   r   r   r   r   r	   r
   eth_utils.toolzr   r   r   web3.exceptionsr   r   web3.middleware.baser   
web3.typesr   r   r   r   r   web3r   r   r   web3.providersr   r   rO   r0   rP   rQ   r3   rS   r+   r)   <module>r[      s   	 	 	   
 & N  --!- !- 	-
 - -` #FK#8.#HI #{#YsC/G%HH 
|"7 |r+   