o
    @Zc                     @   s   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
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mZ ddlmZ ddlmZ dZde dee  fddZ!G dd deZ"dS )    N)TracebackType)IteratorOptionalType   )ConnectErrorConnectionNotAvailableConnectTimeout)OriginRequestResponse)default_ssl_context)Lock)Trace)SyncBackend)NetworkBackendNetworkStream   )HTTP11Connection)ConnectionInterfaceg      ?factorreturnc                 c   s.    dV  t dD ]}| d|d   V  q	d S )Nr   r   )	itertoolscount)r   n r   O/var/www/chikooza/env/lib/python3.10/site-packages/httpcore/_sync/connection.pyexponential_backoff   s
   r   c                   @   s6  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dfddZdedefddZdedefddZdedefddZd.ddZdefddZdefddZdefddZdefd d!Zde
fd"d#Zde
fd$d%Zd/d&d'Z			d0d(eee  d)ee d*ee ddfd+d,ZdS )1HTTPConnectionNTFr   originssl_contextkeepalive_expiryhttp1http2retrieslocal_addressudsnetwork_backendr   c
           
      C   s\   || _ || _|| _|| _|| _|| _|| _|| _|	d u rt n|	| _	d | _
d| _t | _d S )NF)_origin_ssl_context_keepalive_expiry_http1_http2_retries_local_address_udsr   _network_backend_connection_connect_failedr   _request_lock)
selfr   r    r!   r"   r#   r$   r%   r&   r'   r   r   r   __init__   s   zHTTPConnection.__init__requestc                 C   s
  |  |jjstd|jj d| j | j` | jd u rhz9| |}|d}|d uo1|	 dk}|s:| j
rK| jsKddlm} || j|| jd| _n
t| j|| jd| _W n tyg } zd| _|d }~ww | j spt W d    n1 szw   Y  | j|S )	NzAttempted to send request to z on connection to 
ssl_objecth2r   )HTTP2Connection)r   streamr!   T)can_handle_requesturlr   RuntimeErrorr(   r3   r1   _connectget_extra_infoselected_alpn_protocolr,   r+   r#   r9   r*   r   	Exceptionr2   is_availabler   handle_request)r4   r6   r:   r7   http2_negotiatedr9   excr   r   r   rC   6   sF   





zHTTPConnection.handle_requestc              	   C   s  |j di }|dd }| j}ttd}	 za| jd u rN| jjd| jj	| j
|d}td||}| jjdi |}||_W d    n1 sHw   Y  n(| j|d}td	||}| jjdi |}||_W d    n1 sqw   Y  W n ttfy   |d
kr |d8 }t|}	| j|	 Y nw nq| jjdkr| jd u rt n| j}
| jrddgndg}|
| |
| jjd|d}td||}|jdi |}||_W d    |S 1 sw   Y  |S )Ntimeoutconnect)r   Tascii)hostportr%   rF   zconnection.connect_tcp)pathrF   zconnection.connect_unix_socketr   r      httpszhttp/1.1r8   )r    server_hostnamerF   zconnection.start_tlsr   )
extensionsgetr-   r   RETRIES_BACKOFF_FACTORr/   r(   rI   decoderJ   r.   r   r0   connect_tcpreturn_valueconnect_unix_socketr   r	   nextsleepschemer)   r   r,   set_alpn_protocols	start_tls)r4   r6   timeoutsrF   retries_leftdelayskwargstracer:   delayr    alpn_protocolsr   r   r   r>   \   sx   


$

zHTTPConnection._connectc                 C   s
   || j kS N)r(   )r4   r   r   r   r   r;      s   
z!HTTPConnection.can_handle_requestc                 C   s   | j d ur| j   d S d S ra   )r1   closer4   r   r   r   rb      s   
zHTTPConnection.closec                 C   s6   | j d u r| jo| jjdkp| j o| j S | j  S )NrL   )r1   r,   r(   rW   r+   r2   rB   rc   r   r   r   rB      s   

zHTTPConnection.is_availablec                 C      | j d u r| jS | j  S ra   )r1   r2   has_expiredrc   r   r   r   re         

zHTTPConnection.has_expiredc                 C   rd   ra   )r1   r2   is_idlerc   r   r   r   rg      rf   zHTTPConnection.is_idlec                 C   rd   ra   )r1   r2   	is_closedrc   r   r   r   rh      rf   zHTTPConnection.is_closedc                 C   s"   | j d u r| jr
dS dS | j  S )NzCONNECTION FAILED
CONNECTING)r1   r2   inforc   r   r   r   rj      s   

zHTTPConnection.infoc                 C   s   d| j j d|   dS )N<z [z]>)	__class____name__rj   rc   r   r   r   __repr__   s   zHTTPConnection.__repr__c                 C   s   | S ra   r   rc   r   r   r   	__enter__   s   zHTTPConnection.__enter__exc_type	exc_value	tracebackc                 C   s   |    d S ra   )rb   )r4   rp   rq   rr   r   r   r   __exit__   s   zHTTPConnection.__exit__)NNTFr   NNN)r   N)r   r   )NNN)rm   
__module____qualname__r
   r   ssl
SSLContextfloatboolintstrr   r5   r   r   rC   r   r>   r;   rb   rB   re   rg   rh   rj   rn   ro   r   BaseExceptionr   rs   r   r   r   r   r      sj    	

&>


r   )#r   rv   typesr   typingr   r   r   _exceptionsr   r   r	   _modelsr
   r   r   _sslr   _synchronizationr   _tracer   backends.syncr   backends.baser   r   http11r   
interfacesr   rP   rx   r   r   r   r   r   r   <module>   s     