
    +h!                        d dl mZ d dlZ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
mZmZ ddlmZmZ ddlmZ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Z ej>                  d      Z ddZ! G d de      Z"y)    )annotationsN   )AutoBackend)SOCKET_OPTIONAsyncNetworkBackendAsyncNetworkStream)ConnectErrorConnectTimeout)OriginRequestResponse)default_ssl_context)	AsyncLock)Trace   )AsyncHTTP11Connection)AsyncConnectionInterfaceg      ?zhttpcore.connectionc              #  Z   K   d t        j                         D ]  }| d|z  z    yw)z
    Generate a geometric sequence that has a ratio of 2 and starts with 0.

    For example:
    - `factor = 2`: `0, 2, 4, 8, 16, 32, 64, ...`
    - `factor = 3`: `0, 3, 6, 12, 24, 48, 96, ...`
    r   r   N)	itertoolscount)factorns     M/var/www/html/venv/lib/python3.12/site-packages/httpcore/_async/connection.pyexponential_backoffr      s1      G__ q!tms   )+c                      e Zd Z	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZ	 	 	 d	 	 	 	 	 	 	 ddZy)AsyncHTTPConnectionNc                    || _         || _        || _        || _        || _        || _        || _        || _        |	
t               n|	| _	        d | _
        d| _        t               | _        |
| _        y )NF)_origin_ssl_context_keepalive_expiry_http1_http2_retries_local_address_udsr   _network_backend_connection_connect_failedr   _request_lock_socket_options)selforiginssl_contextkeepalive_expiryhttp1http2retrieslocal_addressudsnetwork_backendsocket_optionss              r   __init__zAsyncHTTPConnection.__init__'   sz     '!1+	 -4KM/ 	 =A%*&[-    c                (  K   | j                  |j                  j                        s/t        d|j                  j                   d| j                         	 | j
                  4 d {    | j                  | j                  |       d {   }|j                  d      }|d uxr |j                         dk(  }|s| j                  r7| j                  s+ddlm}  || j                  || j                        | _        n't        | j                  || j                        | _        d d d       d {    | j                  j%                  |       d {   S 7 7 7 +# 1 d {  7  sw Y   ;xY w# t         $ r}d| _        |d }~ww xY w7 9w)	NzAttempted to send request to z on connection to 
ssl_objecth2r   )AsyncHTTP2Connection)r,   streamr.   T)can_handle_requesturlr,   RuntimeErrorr   r)   r'   _connectget_extra_infoselected_alpn_protocolr"   r!   r0   r;   r    r   BaseExceptionr(   handle_async_request)r+   requestr<   r9   http2_negotiatedr;   excs          r   rD   z(AsyncHTTPConnection.handle_async_requestE   sy    &&w{{'9'9:/0B0B/CCUVZVbVbUcd 	))  ##+#'==#99F!'!6!6|!DJ"$. H&==?4G % (DKK?+?#'<<#)-1-C-C,( ,A#'<<#)-1-C-C,(% 6 %%::7CCC79   .  	#'D I	 Ds   AFE6 (E)E6 ,!E!EBE!(E6 3E4E6 8FFFE6 E!E6 !E3'E*(E3/E6 6	F?	FFFc                  K   |j                   j                  di       }|j                   j                  dd       }|j                  dd       }| j                  }t        t              }	 	 | j
                  | j                  j                  j                  d      | j                  j                  | j                  || j                  d}t        dt        ||      4 d {   } | j                  j                  di | d {   }	|	|_        d d d       d {    np| j
                  || j                  d}t        d	t        ||      4 d {   } | j                  j"                  di | d {   }	|	|_        d d d       d {    | j                  j$                  d
v r| j&                  
t)               n| j&                  }
| j*                  rddgndg}|
j-                  |       |
|xs% | j                  j                  j                  d      |d}t        dt        ||      4 d {   } 	j.                  di | d {   }	|	|_        d d d       d {    |	S 	S 7 7 k7 W# 1 d {  7  sw Y   xY w7 97 7 # 1 d {  7  sw Y   xY w7 v7 ^7 I# 1 d {  7  sw Y   	S xY w# t0        t2        f$ r |dk  r |dz  }t5        |      }t        dt        |      4 d {  7  }| j                  j7                  |       d {  7   d d d       d {  7   n# 1 d {  7  sw Y   nxY wY nw xY ww)Ntimeoutsni_hostnameconnect)r   ascii)hostportr2   rI   r5   connect_tcp)pathrI   r5   connect_unix_socket)   httpss   wsszhttp/1.1r:   )r-   server_hostnamerI   	start_tlsr   r   retry )
extensionsgetr#   r   RETRIES_BACKOFF_FACTORr%   r   rM   decoderN   r$   r*   r   loggerr&   rO   return_valuerQ   schemer   r   r"   set_alpn_protocolsrT   r	   r
   nextsleep)r+   rE   timeoutsrJ   rI   retries_leftdelayskwargstracer<   r-   alpn_protocolsdelays                r   r@   zAsyncHTTPConnection._connecti   sA    %%)))R8))--ndC,,y$/}}$,BC3=99$ $ 1 1 8 8 A $ 1 1)-)<)<#**.*>*>F  %]FGVL 4 4PU'Ht'<'<'H'H'R6'R!R-3*4 4 4
 !%		#**.*>*>F
  %-vw  4 4'Pt'<'<'P'P ($( " .4*4 4 <<&&*<<  ,,4 ,-!..  
 <@;;j$%7ZLN22>B (3+7 ,=<<,,33G<#*	F  %[&'6J 4 4e'7v'7'7'A&'A!A-3*4 4 vG4!R4 4 4 44"4 4 4 4.4!A4 4 4 4  .1 =1$!V &'6B = =e//55e<<<= = = = ==] s  A(M+A5K  I,!K $ I5I/I5K I25K J
K  J5J6JK JB%K 2J)3K 6J/J+J/K #J-$K )M*K +M,K /I52K 5J;I><JK JK J&JJ&!	K +J/-K /K5J86K=K MK ;M LML<$L'%L<*M5L86M<M	MM	
MMMMc                     || j                   k(  S N)r   )r+   r,   s     r   r=   z&AsyncHTTPConnection.can_handle_request   s    %%r7   c                   K   | j                   Nt        dt        d i       4 d {    | j                   j                          d {    d d d       d {    y y 7 87 7 
# 1 d {  7  sw Y   y xY ww)Nclose)r'   r   r[   acloser+   s    r   rl   zAsyncHTTPConnection.aclose   su     'WfdB7 0 0&&--///0 0 0 (0/0 0 0 0sV   #A9AA9A$A A$A9A"A9 A$"A9$A6*A-+A62A9c                    | j                   E| j                  xr7 | j                  j                  dk(  xs | j                   xr | j
                   S | j                   j                         S )NrR   )r'   r"   r   r]   r!   r(   is_availablerm   s    r   ro   z AsyncHTTPConnection.is_available   sf    #
  -\\((H4GDKK-,,,
 ,,..r7   c                f    | j                   | j                  S | j                   j                         S ri   )r'   r(   has_expiredrm   s    r   rq   zAsyncHTTPConnection.has_expired   s/    #'''++--r7   c                f    | j                   | j                  S | j                   j                         S ri   )r'   r(   is_idlerm   s    r   rs   zAsyncHTTPConnection.is_idle   s/    #'''''))r7   c                f    | j                   | j                  S | j                   j                         S ri   )r'   r(   	is_closedrm   s    r   ru   zAsyncHTTPConnection.is_closed   s/    #'''))++r7   c                n    | j                   | j                  rdS dS | j                   j                         S )NzCONNECTION FAILED
CONNECTING)r'   r(   inform   s    r   rx   zAsyncHTTPConnection.info   s7    #*.*>*>&PLP$$&&r7   c                X    d| j                   j                   d| j                          dS )N<z [z]>)	__class____name__rx   rm   s    r   __repr__zAsyncHTTPConnection.__repr__   s(    4>>**+2diik]"==r7   c                   K   | S wri   rV   rm   s    r   
__aenter__zAsyncHTTPConnection.__aenter__   s     s   c                @   K   | j                          d {    y 7 wri   )rl   )r+   exc_type	exc_value	tracebacks       r   	__aexit__zAsyncHTTPConnection.__aexit__   s      kkms   )	NNTFr   NNNN)r,   r   r-   zssl.SSLContext | Noner.   zfloat | Noner/   boolr0   r   r1   intr2   
str | Noner3   r   r4   zAsyncNetworkBackend | Noner5   z%typing.Iterable[SOCKET_OPTION] | NonereturnNone)rE   r   r   r   )rE   r   r   r   )r,   r   r   r   )r   r   )r   r   )r   str)r   r   )NNN)r   ztype[BaseException] | Noner   zBaseException | Noner   ztypes.TracebackType | Noner   r   )r|   
__module____qualname__r6   rD   r@   r=   rl   ro   rq   rs   ru   rx   r}   r   r   rV   r7   r   r   r   &   s     .2)-$(6:@D.. +. '	.
 . . . ". . 4. >. 
.<"DH<=|&0

/.
*
,
'
>
 04*.04	, ( .	
 
r7   r   )r   floatr   ztyping.Iterator[float])#
__future__r   r   loggingssltypestyping_backends.autor   _backends.baser   r   r   _exceptionsr	   r
   _modelsr   r   r   _sslr   _synchronizationr   _tracer   http11r   
interfacesr   rY   	getLoggerr[   r   r   rV   r7   r   <module>r      sg    "   
   ( S S 6 / / & (  ) 0  
		0	1
x2 xr7   