
    (i                     B   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl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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dhZ dZ!de jD                  ddfdZ#de jD                  fdZ$defdZ% G d d      Z& G d de      Z'y)    N)Thread)TracebackType)AnyListOptionalTupleTypeUnioncast)URI)WebSocketClientProtocolconnect)#sort_batch_response_by_response_ids)handle_request_caching)Web3ValidationError)JSONBaseProvider)RPCEndpointRPCResponseuriloop   returnc                 n    t        j                  |        | j                          | j                          y N)asyncioset_event_looprun_foreverclose)r   s    P/var/www/br/venv/lib/python3.12/site-packages/web3/providers/legacy_websocket.py_start_event_loopr    2   s%    4 JJL    c                  t    t        j                         } t        t        | fd      }|j	                          | S )NT)targetargsdaemon)r   new_event_loopr   r    start)new_loopthread_loops     r   _get_threaded_loopr*   8   s2    %%'H 1DQKOr!   c                  T    t        t        j                  j                  dd            S )NWEB3_WS_PROVIDER_URIzws://127.0.0.1:8546)r   osenvironget r!   r   get_default_endpointr1   ?   s    rzz~~46KLMMr!   c                   J    e Zd ZdededdfdZdefdZdee	   de	d	e
ddfd
Zy)PersistentWebSocketendpoint_uriwebsocket_kwargsr   Nc                 .    d | _         || _        || _        y r   )wsr4   r5   )selfr4   r5   s      r   __init__zPersistentWebSocket.__init__D   s    59( 0r!   c                    K   | j                   .t        dd| j                  i| j                   d {   | _         | j                   S 7 w)Nr   r0   )r7   r   r4   r5   r8   s    r   
__aenter__zPersistentWebSocket.__aenter__I   sA     77?#S(9(9ST=R=RSSDGww Ts   1AA	Aexc_typeexc_valexc_tbc                    K   |+	 | j                   j                          d {    d | _         y y 7 # t        $ r Y w xY wwr   )r7   r   	Exception)r8   r=   r>   r?   s       r   	__aexit__zPersistentWebSocket.__aexit__N   sH      ggmmo%% DG % s,   A3 13 	A3 	?A?A)__name__
__module____qualname__r   r   r9   r   r<   r	   BaseExceptionr   rB   r0   r!   r   r3   r3   C   sY    1S 1C 1D 1
"9 
}%  	
 
r!   r3   c                        e Zd Z ej                  d      ZdZddefdee	e
ef      dee   dededdf
 fdZdefd	Z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   fdZ xZS )LegacyWebSocketProviderz web3.providers.WebSocketProviderNr4   r5   websocket_timeoutkwargsr   c                 v   t        |   di | t        |      | _        || _        | j                  t               | _        t        j                  t               t        _        |i }n4t        |      j                  t              }|rt        t         d|       t        | j                  |      | _        y )Nz- are not allowed in websocket_kwargs, found: r0   )superr9   r   r4   rI   r1   rH   _loopr*   setintersectionRESTRICTED_WEBSOCKET_KWARGSr   r3   conn)r8   r4   r5   rI   rJ   found_restricted_keys	__class__s         r   r9   z LegacyWebSocketProvider.__init__`   s     	"6"-!2$ 4 6D"((0,>,@#)#!$'(8$9$F$F+%! %)23 433H2IK  ((9(9;KL	r!   c                      d| j                    S )NzWS connection )r4   r;   s    r   __str__zLegacyWebSocketProvider.__str__{   s     1 1233r!   request_datac                   K   | j                   4 d {   }t        j                  |j                  |      | j                         d {    t        j                  t        j                  |j                         | j                         d {         cd d d       d {    S 7 7 a7 7 # 1 d {  7  sw Y   y xY ww)N)timeout)rQ   r   wait_forsendrI   jsonloadsrecv)r8   rV   rQ   s      r   coro_make_requestz)LegacyWebSocketProvider.coro_make_request~   s     99 	 	""		,'1G1G   ::&&tyy{D<R<RSS		 	 	 T	 	 	 	si   CB+C4B3B-AB3B/
B3C%B1&C-B3/B31C3C9B<:CCmethodparamsc                     | j                   j                  d| j                  |       | j                  ||      }t	        j
                  | j                  |      t        j                        }|j                         S )Nz-Making request WebSocket. URI: %s, Method: %s)
loggerdebugr4   encode_rpc_requestr   run_coroutine_threadsafer^   rH   rM   result)r8   r_   r`   rV   futures        r   make_requestz$LegacyWebSocketProvider.make_request   sk    ;T=N=NPV	
 ..vv>11""<02I2O2O
 }}r!   requestsc                 8   | j                   j                  d| j                  |       | j                  |      }t	        j
                  | j                  |      t        j                        }t        t        t           |j                               }t        |      S )Nz4Making batch request WebSocket. URI: %s, Methods: %s)rb   rc   r4   encode_batch_rpc_requestr   re   r^   rH   rM   r   r   r   rf   r   )r8   ri   rV   rg   responses        r   make_batch_requestz*LegacyWebSocketProvider.make_batch_request   s     	B	

 44X>11""<02I2O2O
 [)6==?;28<<r!   )rC   rD   rE   logging	getLoggerrb   rM   DEFAULT_WEBSOCKET_TIMEOUTr   r
   r   strr   intr9   rU   bytesr   r^   r   r   rh   r   r   rm   __classcell__)rS   s   @r   rH   rH   \   s    WABFE 37*.!:	MuS#X/M #3-M 	M
 M 
M64 4E k  ;    =U;#345=	k	=r!   rH   )(r   r[   rn   r-   	threadingr   typesr   typingr   r   r   r   r	   r
   r   
eth_typingr   websockets.legacy.clientr   r   web3._utils.batchingr   web3._utils.cachingr   web3.exceptionsr   web3.providers.baser   
web3.typesr   r   rP   rp   AbstractEventLoopr    r*   r1   r3   rH   r0   r!   r   <module>r      s       	  

  %fo  G55 $ G55 Nc N 2C=. C=r!   