
    ՟f$!                        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m	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jD                  d      Z#de$dee$   fdZ% G d de       Z&y)    N)TracebackType)IterableIteratorOptionalType   )AutoBackend)SOCKET_OPTIONAsyncNetworkBackendAsyncNetworkStream)ConnectErrorConnectTimeout)OriginRequestResponse)default_ssl_context)	AsyncLock)Trace   )AsyncHTTP11Connection)AsyncConnectionInterfaceg      ?zhttpcore.connectionfactorreturnc              #   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)r   ns     U/var/www/cvtools/html/venv/lib/python3.12/site-packages/httpcore/_async/connection.pyexponential_backoffr      s1      G__ q!tms   )+c                   R   e Zd Z	 	 	 	 	 	 	 	 	 ddedeej                     dee   dedede	dee
   d	ee
   d
ee   deee      ddfdZdedefdZdedefdZdedefdZddZdefdZdefdZdefdZdefdZde
fdZde
fdZd dZ	 	 	 d!deee      dee   dee   ddfdZ y)"AsyncHTTPConnectionNoriginssl_contextkeepalive_expiryhttp1http2retrieslocal_addressudsnetwork_backendsocket_optionsr   c                     || _         || _        || _        || _        || _        || _        || _        || _        |	
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)selfr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   s              r   __init__zAsyncHTTPConnection.__init__%   s{     '!1+	 -4KM/ 	 @D%*&[-    requestc                 (  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-   r8   r6   _connectget_extra_infoselected_alpn_protocolr1   r0   r&   rA   r/   r   BaseExceptionr7   handle_async_request)r:   r=   rB   r?   http2_negotiatedrA   excs          r   rJ   z(AsyncHTTPConnection.handle_async_requestC   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portr(   rN   r+   connect_tcp)pathrN   r+   connect_unix_socket)   httpss   wsszhttp/1.1r@   )r#   server_hostnamerN   	start_tlsr   r   retry )
extensionsgetr2   r   RETRIES_BACKOFF_FACTORr4   r-   rR   decoderS   r3   r9   r   loggerr5   rT   return_valuerV   schemer.   r   r1   set_alpn_protocolsrY   r   r   nextsleep)r:   r=   timeoutsrO   rN   retries_leftdelayskwargstracerB   r#   alpn_protocolsdelays                r   rF   zAsyncHTTPConnection._connectg   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   rC   z&AsyncHTTPConnection.can_handle_request   s    %%r<   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)r6   r   r`   acloser:   s    r   rq   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 )NrW   )r6   r1   r-   rb   r0   r7   is_availablerr   s    r   rt   z AsyncHTTPConnection.is_available   sf    #
  -\\((H4GDKK-,,,
 ,,..r<   c                 f    | j                   | j                  S | j                   j                         S rn   )r6   r7   has_expiredrr   s    r   rv   zAsyncHTTPConnection.has_expired   s/    #'''++--r<   c                 f    | j                   | j                  S | j                   j                         S rn   )r6   r7   is_idlerr   s    r   rx   zAsyncHTTPConnection.is_idle   s/    #'''''))r<   c                 f    | j                   | j                  S | j                   j                         S rn   )r6   r7   	is_closedrr   s    r   rz   zAsyncHTTPConnection.is_closed   s/    #'''))++r<   c                 n    | j                   | j                  rdS dS | j                   j                         S )NzCONNECTION FAILED
CONNECTING)r6   r7   inforr   s    r   r}   zAsyncHTTPConnection.info   s7    #*.*>*>&PLP$$&&r<   c                 X    d| j                   j                   d| j                          dS )N<z [z]>)	__class____name__r}   rr   s    r   __repr__zAsyncHTTPConnection.__repr__   s(    4>>**+2diik]"==r<   c                    K   | S wrn   r[   rr   s    r   
__aenter__zAsyncHTTPConnection.__aenter__   s     s   exc_type	exc_value	tracebackc                 @   K   | j                          d {    y 7 wrn   )rq   )r:   r   r   r   s       r   	__aexit__zAsyncHTTPConnection.__aexit__   s      kkms   )	NNTFr   NNNN)r   N)r   r!   )NNN)!r   
__module____qualname__r   r   ssl
SSLContextfloatboolintstrr   r   r
   r;   r   r   rJ   r   rF   rC   rq   rt   rv   rx   rz   r}   r   r   r   rI   r   r   r[   r<   r   r!   r!   $   s    15,0'+!9=<@.. cnn-. #5/	.
 . . .  }. c]. ""56. !-!89. 
.<"D' "Dh "DH<=g <=2D <=|& &D &0

/d 
/.T .
* *
,4 ,
'c '
># >
 37-1-1	4./ M* M*	
 
r<   r!   )'r   loggingr   typesr   typingr   r   r   r   _backends.autor	   _backends.baser
   r   r   _exceptionsr   r   _modelsr   r   r   _sslr   _synchronizationr   _tracer   http11r   
interfacesr   r^   	getLoggerr`   r   r   r!   r[   r<   r   <module>r      sy      
  5 5 ( S S 6 / / & (  ) 0  
		0	1
 
(5/ 
x2 xr<   