
    ՟fQ                         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   )SyncBackend)SOCKET_OPTIONNetworkBackendNetworkStream)ConnectErrorConnectTimeout)OriginRequestResponse)default_ssl_context)Lock)Trace   )HTTP11Connection)ConnectionInterfaceg      ?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     T/var/www/cvtools/html/venv/lib/python3.12/site-packages/httpcore/_sync/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)"HTTPConnectionN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HTTPConnection.__init__%   sy     '!1+	 -4KM/ 	 ;?%*!V-    requestc                    | j                  |j                  j                        s/t        d|j                  j                   d| j                         	 | j
                  5  | j                  | j                  |      }|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        | j                  j%                  |      S # 1 sw Y   $xY w# t         $ r}d| _        |d }~ww xY w)	NzAttempted to send request to z on connection to 
ssl_objecth2r   )HTTP2Connection)r"   streamr$   T)can_handle_requesturlr"   RuntimeErrorr-   r8   r6   _connectget_extra_infoselected_alpn_protocolr1   r0   r&   rA   r/   r   BaseExceptionr7   handle_request)r:   r=   rB   r?   http2_negotiatedrA   excs          r   rJ   zHTTPConnection.handle_requestC   sI   &&w{{'9'9:/0B0B/CCUVZVbVbUcd 	## ##+!]]73F!'!6!6|!DJ"$. H&==?4G % (DKK:+:#'<<#)-1-C-C,( ,<#'<<#)-1-C-C,(%6 ..w777 .  	#'D I	s1   E "B4D9E 9E>E 	E	EEc                 n   |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        ||      5 } | j                  j                  di |}	|	|_        d d d        nX| j
                  || j                  d}t        d	t        ||      5 } | j                  j"                  di |}	|	|_        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        ||      5 } 	j.                  di |}	|	|_        d d d        |	S 	S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   	S xY w# t0        t2        f$ r\ |dk  r |dz  }t5        |      }t        dt        |      5 }| j                  j7                  |       d d d        n# 1 sw Y   nxY wY nw xY wO)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HTTPConnection._connectg   s   %%)))R8))--ndC,,y$/}}$,BC3799$ $ 1 1 8 8 A $ 1 1)-)<)<#**.*>*>F }fgvF 4%!B!6!6!B!B!LV!L-3*4 4
 !%		#**.*>*>F
 -vw 4!J!6!6!J!J "$" .4*4 <<&&*<<  ,,4 ,-!..  
 <@;;j$%7ZLN22>B (3+7 ,=<<,,33G<#*	F {FGVD 4!1!1!1!;F!;-3*4 vG4 44 4.4  .1 71$!V7FGV< 7))//67 7 77] s   )A1I $H">5I 3$H.B%I <H:	I  I "H+'I .H73I :I?I I 7J2>J#	J2#J,	(J21J2c                      || j                   k(  S N)r-   )r:   r"   s     r   rC   z!HTTPConnection.can_handle_request   s    %%r<   c                     | j                   6t        dt        d i       5  | j                   j                          d d d        y y # 1 sw Y   y xY w)Nclose)r6   r   r`   rp   r:   s    r   rp   zHTTPConnection.close   sM    'wb1 )  &&() ) () )s   AA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_availablerq   s    r   rs   zHTTPConnection.is_available   sf    #
  -\\((H4GDKK-,,,
 ,,..r<   c                 f    | j                   | j                  S | j                   j                         S rn   )r6   r7   has_expiredrq   s    r   ru   zHTTPConnection.has_expired   s/    #'''++--r<   c                 f    | j                   | j                  S | j                   j                         S rn   )r6   r7   is_idlerq   s    r   rw   zHTTPConnection.is_idle   s/    #'''''))r<   c                 f    | j                   | j                  S | j                   j                         S rn   )r6   r7   	is_closedrq   s    r   ry   zHTTPConnection.is_closed   s/    #'''))++r<   c                 n    | j                   | j                  rdS dS | j                   j                         S )NzCONNECTION FAILED
CONNECTING)r6   r7   inforq   s    r   r|   zHTTPConnection.info   s7    #*.*>*>&PLP$$&&r<   c                 X    d| j                   j                   d| j                          dS )N<z [z]>)	__class____name__r|   rq   s    r   __repr__zHTTPConnection.__repr__   s(    4>>**+2diik]"==r<   c                     | S rn   r[   rq   s    r   	__enter__zHTTPConnection.__enter__   s    r<   exc_type	exc_value	tracebackc                 $    | j                          y rn   )rp   )r:   r   r   r   s       r   __exit__zHTTPConnection.__exit__   s     	

r<   )	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   rp   rs   ru   rw   ry   r|   r   r   r   rI   r   r   r[   r<   r   r!   r!   $   s    15,0'+!48<@.. cnn-. #5/	.
 . . .  }. c]. ".1. !-!89. 
.<"8g "8( "8H<7 <7M <7|& &D &)

/d 
/.T .
* *
,4 ,
'c '
># >
 37-1-1	4./ M* M*	
 
r<   r!   )'r   loggingr   typesr   typingr   r   r   r   _backends.syncr	   _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 ( I I 6 / / & #  $ +  
		0	1
 
(5/ 
x( xr<   