
    (i2                         d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZ d dlmZmZmZmZ d dlmZ d dl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  G d d      Zy)    N)ThreadPoolExecutor)AnyDictListOptionalUnion)ClientResponseClientSessionClientTimeoutTCPConnector)URI)
async_lock)generate_cache_key)DEFAULT_HTTP_TIMEOUT)TimeExhausted)SimpleCachec            
          e Zd ZU  ej                  d      Z ej                         Zej                  e	d<   	 	 	 d#de
de
deej                     ddfdZedefd	       Z	 	 d$d
edej                  dee   dej                  fdZd
edededej*                  fdZd
edededeeef   fdZd
edededej*                  fdZd
edededeeef   fdZd
edeeeeef   f   dedefdZedej*                  dededefd       Zde ej                     ddfdZ!	 	 d$d
edee"   dee#   de"fdZ$d
ededede%fdZ&d
edededeeef   fdZ'd
ededede%fdZ(d
edededeeef   fd Z)d
edeeeeef   f   dedefd!Z*dede e"   ddfd"Z+y)%HTTPSessionManagerz3web3._utils.http_session_manager.HTTPSessionManager_lockN
cache_sizesession_pool_max_workersexplicit_sessionreturnc                 T    t        |      | _        t        |      | _        || _        y )N)max_workers)r   session_cacher   session_pool_explicit_session)selfr   r   r   s       Q/var/www/br/venv/lib/python3.12/site-packages/web3/_utils/http_session_manager.py__init__zHTTPSessionManager.__init__1   s'     )4.;ST!1    c                  T    t        t        j                  j                  dd            S )NWEB3_HTTP_PROVIDER_URIzhttp://localhost:8545)r   osenvironget r"   r    get_default_http_endpointz,HTTPSessionManager.get_default_http_endpoint;   s    2::>>":<STUUr"   endpoint_urisessionrequest_timeoutc                    | j                   | j                   S t        t        j                          d|       }| j                  j                  |      }||S |t        j                         }| j                  5  | j                  j                  ||      \  }}| j                  j                  d||       d d d        o|j                         }|D ]  }| j                  j                  d|         t        j                  |xs	 t        dz   | j                  |g      j!                          |S # 1 sw Y   |xY w)N:zSession cached: %s, %sz2Session cache full. Session evicted from cache: %s皙?)args)r   r   	threading	get_identr   get_cache_entryrequestsSessionr   cacheloggerdebugvaluesTimerr   _close_evicted_sessionsstart)	r   r*   r+   r,   	cache_keycached_sessionevicted_itemsevicted_sessionsevicted_sessions	            r    cache_and_return_sessionz+HTTPSessionManager.cache_and_return_session?   sC    !!-))) ')*=*=*?)@,'PQ	++;;IF% "!?&&(GZZ 	V,0,>,>,D,DYPW,X)NMKK6nU	V $,335#3 !!H#
 OO  =#7##=,,&' eg'	V 	Vs   <=D44D=r0   kwargsc                     |j                  dt               | j                  ||d         } |j                  |g|i |}|S Ntimeout)r,   )
setdefaultr   rB   r'   r   r*   r0   rC   r+   responses         r    get_response_from_get_requestz0HTTPSessionManager.get_response_from_get_requestn   sU     	)%9://&*; 0 
 7;;|=d=f=r"   c                 n     | j                   |g|i |}|j                          |j                         S N)rJ   raise_for_statusjsonr   r*   r0   rC   rI   s        r    json_make_get_requestz(HTTPSessionManager.json_make_get_requestx   s8     6455lTTTVT!!#}}r"   c                     |j                  dt               | j                  ||d         } |j                  |g|i |S rE   )rG   r   rB   post)r   r*   r0   rC   r+   s        r    get_response_from_post_requestz1HTTPSessionManager.get_response_from_post_request   sQ     	)%9://&*; 0 
 w||L:4:6::r"   c                 n     | j                   |g|i |}|j                          |j                         S rL   )rS   rM   rN   rO   s        r    json_make_post_requestz)HTTPSessionManager.json_make_post_request   s8     7466|UdUfU!!#}}r"   datac                 l   |j                  dt               |j                  dd       t        j                         }|d   } | j                  |fd|i|5 }|j	                          |j                  d      r| j                  |||      cd d d        S |j                  cd d d        S # 1 sw Y   y xY w)NrF   streamFrV   )rG   r   timerS   rM   r'   _handle_streaming_responsecontent)r   r*   rV   rC   r<   rF   rI   s          r    make_post_requestz$HTTPSessionManager.make_post_request   s     	)%9:(E*		#0T00
#
'-
 	(%%'zz(#66xP	( 	(  ''	( 	( 	(s   4B*B**B3rI   r<   rF   c                 ~    d}| j                         D ]'  }||z  }t        j                         |z
  |kD  s#t         |S )Nr"   )iter_contentrY   r   )rI   r<   rF   response_bodyrV   s        r    rZ   z-HTTPSessionManager._handle_streaming_response   sN     ))+ 	$DT!M 		e#w.##	$ r"   r@   c                 j    |D ].  }|j                          | j                  j                  d|       0 y )NzClosed evicted session: %s)closer7   r8   )r   r@   rA   s      r    r;   z*HTTPSessionManager._close_evicted_sessions   s4    / 	MO!!#KK:OL	Mr"   c                   K   t        t        t        j                                d|       }d }t	        | j
                  | j                        4 d {    || j                  vrX|t        dt        dd            }| j                  j                  ||      \  }}| j                  j                  d||       n| j                  j                  |      }|j                  }|j                  j!                         }|rdn|rdnd }	|	r| j                  j                  d|	||       | j                  j"                  j%                  |       |s|j'                          d {    | j                  j                  d	|       t        dt        dd            }
| j                  j                  ||
      \  }}| j                  j                  d||       d d d       d {    |vt)        |j+                               }|D ]  }| j                  j                  d
|         t        j,                  | j/                  |j0                  xs	 t2        dz   |             S 7 7 7 # 1 d {  7  sw Y   xY ww)Nr.   T)force_closeenable_cleanup_closed)rM   	connectorzAsync session cached: %s, %szAsync session was closedz!Loop was closed for async sessionz=%s: %s, %s. Creating and caching a new async session for uri.z/Async session closed and evicted from cache: %sz8Async session cache full. Session evicted from cache: %sr/   )r   idasyncioget_event_loopr   r   r   r   r
   r   r6   r7   r8   r3   closed_loop	is_closed_datapopra   listr9   create_task_async_close_evicted_sessionstotalr   )r   r*   r+   r,   r=   r?   r>   session_is_closedsession_loop_is_closedwarning_sessionr@   rA   s                r    async_cache_and_return_sessionz1HTTPSessionManager.async_cache_and_return_session   s     '"W-C-C-E*F)Gq'WX	d//< =	 =	 2 22?+)-".(,D#G 150B0B0H0Hw1- !!2L. "&!3!3!C!CI!N$2$9$9!)7)=)=)G)G)I& ) / 2 <!  KK%%W$&	 &&,,00;,,22444KK%%I&  -)-".(,D# H 594F4F4L4L!851NM KK%%6nw=	 =	~ $  $M$8$8$:;#3 !!N# 22 $))G-AC-G$ s=	V 5W=	 =	 =	 =	s]   AJ I#J DI+$I&%A4I+J $I)%A?J &I+)J +I=1I42I=9J c                    K   |j                  dt        t                     | j                  ||d          d {   } |j                  |g|i | d {   }|S 7 $7 wrE   )rG   r   r   rv   r'   rH   s         r    #async_get_response_from_get_requestz6HTTPSessionManager.async_get_response_from_get_request  sr      	)]3G%HI;;&*; < 
 
 %\CDCFCC	
 D!   9A$A A$A"A$"A$c                    K    | j                   |g|i | d {   }|j                          |j                          d {   S 7 ,7 wrL   )rx   rM   rN   rO   s        r    async_json_make_get_requestz.HTTPSessionManager.async_json_make_get_request$  s[      BAA

#)
 
 	!!#]]_$$	
 %!   AA	'AAAAc                    K   |j                  dt        t                     | j                  ||d          d {   } |j                  |g|i | d {   }|S 7 $7 wrE   )rG   r   r   rv   rR   rH   s         r    $async_get_response_from_post_requestz7HTTPSessionManager.async_get_response_from_post_request-  sr      	)]3G%HI;;&*; < 
 
 &lDTDVDD	
 Ery   c                    K    | j                   |g|i | d {   }|j                          |j                          d {   S 7 ,7 wrL   )r~   rM   rN   rO   s        r    async_json_make_post_requestz/HTTPSessionManager.async_json_make_post_request7  s[      CBB

#)
 
 	!!#]]_$$	
 %r|   c                    K    | j                   |fd|i| d {   }|j                          |j                          d {   S 7 ,7 w)NrV   )r~   rM   read)r   r*   rV   rC   rI   s        r    async_make_post_requestz*HTTPSessionManager.async_make_post_request@  s[      CBB
#
'-
 
 	!!#]]_$$	
 %s!   AA'AA
A
Ac                 "  K   t        j                  |       d {    |D ]6  }|j                          d {    | j                  j	                  d|       8 t        d |D              r| j                  j                  d|       y y 7 o7 Tw)Nz Closed evicted async session: %sc              3   6   K   | ]  }|j                      y wrL   )ri   ).0rA   s     r    	<genexpr>zCHTTPSessionManager._async_close_evicted_sessions.<locals>.<genexpr>R  s     Ro?)))Rs   z8Some evicted async sessions were not properly closed: %s)rg   sleepra   r7   r8   anyrt   )r   rF   r@   rA   s       r    rp   z0HTTPSessionManager._async_close_evicted_sessionsI  s      mmG$$$/ 	SO!'')))KK@/R	S RAQRRKKJ  S 	% *s    BBBBABB)d      N)NN),__name__
__module____qualname__logging	getLoggerr7   r1   Lockr   __annotations__intr   r4   r5   r!   staticmethodr   r)   floatrB   r   ResponserJ   r   strrP   rS   rU   r   bytesr\   rZ   r   r;   r
   r   rv   r	   rx   r{   r~   r   r   rp   r(   r"   r    r   r   -   sR   WTUF*INN,E9>>, ()7;	22 #&2 #8#3#34	2
 
2 Vs V V %)+/	-- !!- "%	-
 
		-^(+7:			(+7:	c3h;;(+;7:;			;(+7:	c3h((',UDcN-B'C(OR(	($ 
##
,1
<A
	
 
MX=M=M8N MSW M ,037	cc -(c "-0	c
 
cJ(+7:	%%(+%7:%	c3h%(+7:	%%(+%7:%	c3h%%%',UDcN-B'C%OR%	%04]0C	r"   r   ) rg   concurrent.futuresr   r   r%   r1   rY   typingr   r   r   r   r   aiohttpr	   r
   r   r   
eth_typingr   r4   web3._utils.async_cachingr   web3._utils.cachingr   web3._utils.httpr   web3.exceptionsr   web3.utils.cachingr   r   r(   r"   r    <module>r      s^      	     
i ir"   