
    (i                         d dl Z d dlZd dlZd dlZd dlmZ d dlZd dl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mZmZ d	d
lmZ dedede
e j4                  e j6                  f   fdZ G d de      Zy)    N)Path)AnyOptionalTupleUnion)RPCEndpointRPCResponse   )PersistentConnectionProvider   )PersistentConnectionClosedOKProviderConnectionErrorReadBufferLimitReachedWeb3TypeError   )get_default_ipc_pathipc_pathread_buffer_limitreturnc                    K   t         j                  dk(  rddlm}  ||       S t	        j
                  | |       d {   S 7 w)Nwin32r   )	NamedPipe)limit)sysplatformweb3._utils.windowsr   asyncioopen_unix_connection)r   r   r   s      T/var/www/br/venv/lib/python3.12/site-packages/web3/providers/persistent/async_ipc.pyasync_get_ipc_socketr    #   s@      ||w	
 ""11(BSTTTTs   <AAAc            	       ~    e Zd ZU  ej                  d      ZdZeej                     e
d<   dZeej                     e
d<    ej                         Zej                  e
d<   	 	 ddeeeef      deded	df fd
Zd	efdZdded	efdZded	dfdZd	efdZded	dfdZddZddZddZ d	efdZ!de"d	df fdZ# xZ$S )AsyncIPCProviderzweb3.providers.AsyncIPCProviderN_reader_writer_decoderr   r   kwargsr   c                    |t               | _        nat        |t              st        |t              r6t        t	        |      j                         j                               | _        nt        d      t        | $  di | || _
        y )Nz/ipc_path must be of type string or pathlib.Path )r   r   
isinstancestrr   
expanduserresolver   super__init__r   )selfr   r   r&   	__class__s       r   r.   zAsyncIPCProvider.__init__8   sn     02DM#&*Xt*DX 9 9 ; C C EFDM QRR"6"!2    c                 P    d| j                   j                   d| j                   dS )N< >)r0   __name__r   r/   s    r   __str__zAsyncIPCProvider.__str__I   s&    4>>**+1T]]O1==r1   show_tracebackc                    K   | j                   r| j                  sy	 | j                  t        d      g        d {    y7 # t        t
        f$ r&}|rt        dt        |       d|       Y d }~yd }~ww xY ww)NFweb3_clientVersionTz+Problem connecting to provider with error: z: )r$   r#   make_requestr   OSErrorr   type)r/   r9   es      r   is_connectedzAsyncIPCProvider.is_connectedL   s~     ||4<<	##K0D$ErJJJ K01 	-A$q'"QCP  	s>   A;A AA  A;A A8A3.A;3A88A;request_datac                    K   | j                   t        d      t        j                  | j	                  |      | j
                         d {   S 7 w)NzAConnection to ipc socket has not been initiated for the provider.)timeout)r$   r   r   wait_for_socket_sendrequest_timeout)r/   rA   s     r   socket_sendzAsyncIPCProvider.socket_sendZ   sU     <<)S  %%l+T5I5I
 
 	
 
s   AAAAc                   K   	 | j                   j                          d {   }|st        d      | j                  |      S 7 ## t        $ r4t        fddD              rt	        d| j
                   d       d ww xY ww)Nc              3   8   K   | ]  }|t              v   y wN)r*   ).0kwr?   s     r   	<genexpr>z/AsyncIPCProvider.socket_recv.<locals>.<genexpr>h   s     =B2Q<=s   )r   chunkzRead buffer limit of `z[` bytes was reached. Consider increasing the ``read_buffer_limit`` on the AsyncIPCProvider.z%Socket reader received end of stream.)user_message)r#   readline
ValueErrorallr   r   r   decode_rpc_response)r/   datar?   s     @r   socket_recvzAsyncIPCProvider.socket_recvd   s     		..00D .D  ''-- 1 	=*<==,,T-C-C,D E( ( 	
 	s7   BA AA BA 	B/B  BBc                   K   	 | j                   j                  |dz          | j                   j                          d {    y 7 # t        $ r}|j                  t        j
                  k(  r\| j                          d {  7   | j                   j                  |       | j                   j                          d {  7   Y d }~y Y d }~y d }~ww xY ww)N   
)r$   writedrainr=   errnoEPIPE_reset_socket)r/   rA   r?   s      r   rE   zAsyncIPCProvider._socket_sendx   s     		+LL|e34,,$$&&& 	+ww%++%((***""<0ll((***	 &	+sW   C;A A A CA 	C0C B=C>C?C
CCCc                    K   | j                   j                          | j                   j                          d {    t        | j                  | j
                         d {   \  | _        | _         y 7 :7 wrJ   )r$   closewait_closedr    r   r   r#   r7   s    r   r\   zAsyncIPCProvider._reset_socket   s^     ll&&(((+?MM411,
 &
"dl 	)&
s!   8A9A5'A9"A7#A97A9c                 z   K   t        | j                  | j                         d {   \  | _        | _        y 7 wrJ   )r    r   r   r#   r$   r7   s    r   _provider_specific_connectz+AsyncIPCProvider._provider_specific_connect   s2     +?MM411,
 &
"dl &
s   $;9;c                 
  K   | j                   r]| j                   j                         sC| j                   j                          | j                   j                          d {    d | _         | j                  rd | _        y y 7  wrJ   )r$   
is_closingr^   r_   r#   r7   s    r   _provider_specific_disconnectz.AsyncIPCProvider._provider_specific_disconnect   sa     << 7 7 9LL ,,**,,,DL<<DL  -s   AB B!!Bc                 >   K   | j                          d {   S 7 wrJ   )rU   r7   s    r    _provider_specific_socket_readerz1AsyncIPCProvider._provider_specific_socket_reader   s     %%''''s   r?   c                 $    t         |   |       y rJ   )r-   "_error_log_listener_task_exception)r/   r?   r0   s     r   rh   z3AsyncIPCProvider._error_log_listener_task_exception   s    215r1   )Ni  @)F)r   N)%r6   
__module____qualname__logging	getLoggerloggerr#   r   r   StreamReader__annotations__r$   StreamWriterjsonJSONDecoderr%   r   r*   r   intr   r.   r8   boolr@   bytesrG   r	   rU   rE   r\   ra   rd   rf   	Exceptionrh   __classcell__)r0   s   @r   r"   r"   1   s    W@AF.2GXg**+2.2GXg**+2!1!1!1!3Hd3 04!135d+,3 3
 3 
3"> > $ 
e 
 
.; .(
+u 
+ 
+


 ( (6I 6$ 6 6r1   r"   )r   rZ   rq   rk   pathlibr   r   typingr   r   r   r   
web3.typesr   r	    r   
exceptionsr   r   r   r   ipcr   r*   rs   rn   rp   r    r"   r(   r1   r   <module>r~      s         
 
UU&)U
7!5!556Ul63 l6r1   