o
    7'h.   ã                   @  sà   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 d¡Z ddd„Z!G dd„ deƒZ"dS )é    )ÚannotationsNé   )ÚSyncBackend)ÚSOCKET_OPTIONÚNetworkBackendÚNetworkStream)ÚConnectErrorÚConnectTimeout)ÚOriginÚRequestÚResponse)Údefault_ssl_context)ÚLock)ÚTraceé   )ÚHTTP11Connection)ÚConnectionInterfaceg      à?zhttpcore.connectionÚfactorÚfloatÚreturnútyping.Iterator[float]c                 c  s(   � dV  t  ¡ D ]	}| d|  V  qdS )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   Ún© r   úOC:\Users\shubh\Videos\agent\nova\Lib\site-packages\httpcore/_sync/connection.pyÚexponential_backoff   s
   €ÿr   c                   @  sª   e Zd Z									d>d?dd„Zd@dd„ZdAd!d"„ZdBd#d$„ZdCd%d&„ZdDd'd(„ZdDd)d*„Z	dDd+d,„Z
dDd-d.„ZdEd0d1„ZdEd2d3„ZdFd4d5„Z			dGdHd<d=„ZdS )IÚHTTPConnectionNTFr   Úoriginr
   Ússl_contextússl.SSLContext | NoneÚkeepalive_expiryúfloat | NoneÚhttp1ÚboolÚhttp2ÚretriesÚintÚlocal_addressú
str | NoneÚudsÚnetwork_backendúNetworkBackend | NoneÚsocket_optionsú%typing.Iterable[SOCKET_OPTION] | Noner   ÚNonec                 C  sb   || _ || _|| _|| _|| _|| _|| _|| _|	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Ú_socket_options)Úselfr   r   r!   r#   r%   r&   r(   r*   r+   r-   r   r   r   Ú__init__'   s   ÿ
zHTTPConnection.__init__Úrequestr   r   c              
   C  sú   |   |jj¡std|jj› d| j› �ƒ‚zQ| j�D | jd u rU|  |¡}| d¡}|d uo1| 	¡ dk}|s:| j
rK| jsKddlm} || j|| jd�| _n
t| j|| jd�| _W d   ƒ n1 s_w   Y  W n tyv } zd| _|‚d }~ww | j |¡S )	NzAttempted to send request to z on connection to Ú
ssl_objectÚh2r   )ÚHTTP2Connection)r   Ústreamr!   T)Úcan_handle_requestÚurlr   ÚRuntimeErrorr0   r;   r9   Ú_connectÚget_extra_infoÚselected_alpn_protocolr4   r3   r%   rB   r2   r   ÚBaseExceptionr:   Úhandle_request)r=   r?   rC   r@   Zhttp2_negotiatedrB   Úexcr   r   r   rK   E   sB   ÿ



þ
ýý€î€€þzHTTPConnection.handle_requestr   c                 C  s  |j  di ¡}|j  dd ¡}| dd ¡}| j}ttd�}	 z¹| jd u rX| jj d¡| jj	| j
|| jdœ}tdt||ƒ�}| jjdi |¤Ž}	|	|_W d   ƒ n1 sRw   Y  n+| j|| jd	œ}td
t||ƒ�}| jjdi |¤Ž}	|	|_W d   ƒ n1 s~w   Y  | jjdv rÔ| jd u r‘tƒ n| j}
| jr›ddgndg}|
 |¡ |
|p¬| jj d¡|dœ}tdt||ƒ�}|	jdi |¤Ž}	|	|_W d   ƒ |	W S 1 sÏw   Y  |	W S  ttf�y   |dkrå‚ |d8 }t|ƒ}tdt||ƒ�}| j |¡ W d   ƒ n	1 �sw   Y  Y nw q)NÚtimeoutÚsni_hostnameÚconnect)r   TÚascii)ÚhostÚportr(   rM   r-   Úconnect_tcp)ÚpathrM   r-   Úconnect_unix_socket)ó   httpss   wsszhttp/1.1rA   )r   Úserver_hostnamerM   Ú	start_tlsr   r   Úretryr   )Ú
extensionsÚgetr5   r   ÚRETRIES_BACKOFF_FACTORr7   r0   rQ   ÚdecoderR   r6   r<   r   Úloggerr8   rS   Úreturn_valuerU   Úschemer1   r   r4   Úset_alpn_protocolsrX   r   r	   ÚnextÚsleep)r=   r?   ZtimeoutsrN   rM   Zretries_leftZdelaysÚkwargsÚtracerC   r   Úalpn_protocolsÚdelayr   r   r   rG   i   s|   

ûþ€ýÿ
ÿú
ÿý
ü
þýÿ€ûÒzHTTPConnection._connectc                 C  s
   || j kS ©N)r0   )r=   r   r   r   r   rD   §   s   
z!HTTPConnection.can_handle_requestc                 C  sL   | j d ur$tdtd i ƒ� | j  ¡  W d   ƒ d S 1 sw   Y  d S d S )NÚclose)r9   r   r^   ri   ©r=   r   r   r   ri   ª   s
   
"ÿÿzHTTPConnection.closec                 C  s6   | j d u r| jo| jjdkp| j o| j S | j  ¡ S )NrV   )r9   r4   r0   r`   r3   r:   Úis_availablerj   r   r   r   rk   ¯   s   
ÿý
zHTTPConnection.is_availablec                 C  ó   | j d u r| jS | j  ¡ S rh   )r9   r:   Úhas_expiredrj   r   r   r   rm   »   ó   

zHTTPConnection.has_expiredc                 C  rl   rh   )r9   r:   Úis_idlerj   r   r   r   ro   À   rn   zHTTPConnection.is_idlec                 C  rl   rh   )r9   r:   Ú	is_closedrj   r   r   r   rp   Å   rn   zHTTPConnection.is_closedÚstrc                 C  s"   | j d u r| jr
dS dS | j  ¡ S )NzCONNECTION FAILEDZ
CONNECTING)r9   r:   Úinforj   r   r   r   rr   Ê   s   

zHTTPConnection.infoc                 C  s   d| j j› d|  ¡ › d�S )Nú<z [z]>)Ú	__class__Ú__name__rr   rj   r   r   r   Ú__repr__Ï   s   zHTTPConnection.__repr__c                 C  s   | S rh   r   rj   r   r   r   Ú	__enter__Õ   s   zHTTPConnection.__enter__Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackútypes.TracebackType | Nonec                 C  s   |   ¡  d S rh   )ri   )r=   rx   rz   r|   r   r   r   Ú__exit__Ø   s   zHTTPConnection.__exit__)	NNTFr   NNNN)r   r
   r   r    r!   r"   r#   r$   r%   r$   r&   r'   r(   r)   r*   r)   r+   r,   r-   r.   r   r/   )r?   r   r   r   )r?   r   r   r   )r   r
   r   r$   )r   r/   )r   r$   )r   rq   )r   r   )NNN)rx   ry   rz   r{   r|   r}   r   r/   )ru   Ú
__module__Ú__qualname__r>   rK   rG   rD   ri   rk   rm   ro   rp   rr   rv   rw   r~   r   r   r   r   r   &   s4    õ

$
>







ür   )r   r   r   r   )#Ú
__future__r   r   ÚloggingÚsslÚtypesÚtypingZ_backends.syncr   Z_backends.baser   r   r   Ú_exceptionsr   r	   Z_modelsr
   r   r   Ú_sslr   Z_synchronizationr   Ú_tracer   Zhttp11r   Z
interfacesr   r\   Ú	getLoggerr^   r   r   r   r   r   r   Ú<module>   s&    

