o
    óT·jq   ã                   @  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é   )ÚAutoBackend)ÚSOCKET_OPTIONÚAsyncNetworkBackendÚAsyncNetworkStream)ÚConnectErrorÚConnectTimeout)ÚOriginÚRequestÚResponse)Údefault_ssl_context)Ú	AsyncLock)ÚTraceé   )ÚAsyncHTTP11Connection)ÚAsyncConnectionInterfaceg      à?zhttpcore2.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   ú^/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/httpcore2/_async/connection.pyÚexponential_backoff   s
   €ÿr   c                   @  s¾   e Zd Z									dBdCdd„ZdDdd„ZdEd!d"„ZdFd#d$„ZdGd%d&„ZdHd'd(„ZdHd)d*„Z	dHd+d,„Z
dHd-d.„ZdHd/d0„ZdHd1d2„ZdId4d5„ZdId6d7„ZdJd8d9„Z			dKdLd@dA„ZdS )MÚAsyncHTTPConnectionNTFr   Úoriginr
   Ússl_contextússl.SSLContext | NoneÚkeepalive_expiryúfloat | NoneÚhttp1ÚboolÚhttp2ÚretriesÚintÚlocal_addressú
str | NoneÚudsÚnetwork_backendúAsyncNetworkBackend | 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AsyncHTTPConnection.__init__Úrequestr   r   c              
   Ã  s  �|   |jj¡std|jj› d| j› �ƒ‚z^| j4 I d H šJ | jd u r]|  |¡I d H }| d¡}|d uo9| 	¡ dk}|sB| j
rS| jsSddlm} || j|| jd�| _n
t| j|| jd�| _W d   ƒI d H  n1 I d H smw   Y  W n ty„ } zd| _|‚d }~ww | j |¡I d H S )	NzAttempted to send request to z on connection to Ú
ssl_objectÚh2r   )ÚAsyncHTTP2Connection)r   Ústreamr!   T)Úcan_handle_requestÚurlr   ÚRuntimeErrorr0   r;   r9   Ú_connectÚget_extra_infoÚselected_alpn_protocolr4   r3   r%   rB   r2   r   ÚBaseExceptionr:   Úhandle_async_request)r=   r?   rC   r@   Úhttp2_negotiatedrB   Úexcr   r   r   rK   C   s:   €


ý
ý(ñ€€þz(AsyncHTTPConnection.handle_async_requestr   c                 Ã  s˜  �|j  di ¡}|j  dd ¡}| dd ¡}| j}ttd�}	 zç| jd u rf| jj d¡| jj	| j
|| jdœ}tdt||ƒ4 I d H š}| jjdi |¤ŽI d H }	|	|_W d   ƒI d H  n1 I d H s`w   Y  n8| j|| jd	œ}td
t||ƒ4 I d H š}| jjdi |¤ŽI d H }	|	|_W d   ƒI d H  n1 I d H s™w   Y  | jjdv �r| jd u r­tƒ n| j}
| jr½| jrºddgndgndg}|
 |¡ |
|pÎ| jj d¡|dœ}tdt||ƒ4 I d H š}|	jdi |¤ŽI d H }	|	|_W d   ƒI d H  |	W S 1 I d H sþw   Y  |	W S  ttf�yJ   |dk�r‚ |d8 }t|ƒ}tdt||ƒ4 I d H š}| j |¡I d H  W d   ƒI d H  n1 I d H �sCw   Y  Y nw q)NÚtimeoutÚsni_hostnameÚconnect)r   TÚascii)ÚhostÚportr(   rN   r-   Úconnect_tcp)ÚpathrN   r-   Úconnect_unix_socket)ó   httpss   wssrA   zhttp/1.1)r   Úserver_hostnamerN   Ú	start_tlsr   r   Úretryr   )Ú
extensionsÚgetr5   r   ÚRETRIES_BACKOFF_FACTORr7   r0   rR   ÚdecoderS   r6   r<   r   Úloggerr8   rT   Úreturn_valuerV   Úschemer1   r   r4   r3   Úset_alpn_protocolsrY   r   r	   ÚnextÚsleep)r=   r?   ÚtimeoutsrO   rN   Úretries_leftÚdelaysÚkwargsÚtracerC   r   Úalpn_protocolsÚdelayr   r   r   rG   b   sl   €

û(þ€ý(þ 
ýþý
*ÿ€ûÛzAsyncHTTPConnection._connectc                 C  s
   || j kS ©N)r0   )r=   r   r   r   r   rD   —   s   
z&AsyncHTTPConnection.can_handle_requestc              	   Ã  sh   �| j d ur2tdtd i ƒ4 I d H š | j  ¡ I d H  W d   ƒI d H  d S 1 I d H s+w   Y  d S d S )NÚclose)r9   r   r_   Úaclose©r=   r   r   r   rn   š   s   €
.ÿÿzAsyncHTTPConnection.aclosec                 C  ó   | j d uo	| j  ¡ S rl   )r9   Úis_connectedro   r   r   r   rq   Ÿ   ó   z AsyncHTTPConnection.is_connectedc                 C  s6   | j d u r| jo| jjdks| j o| j S | j  ¡ S )NrW   )r9   r4   r0   ra   r3   r:   Úis_availablero   r   r   r   rs   ¢   s   
"
z AsyncHTTPConnection.is_availablec                 C  ó   | j d u r| jS | j  ¡ S rl   )r9   r:   Úhas_expiredro   r   r   r   ru   ª   ó   

zAsyncHTTPConnection.has_expiredc                 C  rt   rl   )r9   r:   Úis_idlero   r   r   r   rw   ¯   rv   zAsyncHTTPConnection.is_idlec                 C  rp   rl   )r9   Úcan_multiplexro   r   r   r   rx   ´   rr   z!AsyncHTTPConnection.can_multiplexc                 C  rt   rl   )r9   r:   Ú	is_closedro   r   r   r   ry   ·   rv   zAsyncHTTPConnection.is_closedÚstrc                 C  s"   | j d u r| jr
dS dS | j  ¡ S )NzCONNECTION FAILEDÚ
CONNECTING)r9   r:   Úinforo   r   r   r   r|   ¼   s   

zAsyncHTTPConnection.infoc                 C  s   d| j j› d|  ¡ › d�S )Nú<z [z]>)Ú	__class__Ú__name__r|   ro   r   r   r   Ú__repr__Á   s   zAsyncHTTPConnection.__repr__c                 Ã  s   �| S rl   r   ro   r   r   r   Ú
__aenter__Ç   s   €zAsyncHTTPConnection.__aenter__Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackútypes.TracebackType | Nonec                 Ã  s   �|   ¡ I d H  d S rl   )rn   )r=   r‚   r„   r†   r   r   r   Ú	__aexit__Ê   s   €zAsyncHTTPConnection.__aexit__)	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   rz   )r   r   )NNN)r‚   rƒ   r„   r…   r†   r‡   r   r/   )r   Ú
__module__Ú__qualname__r>   rK   rG   rD   rn   rq   rs   ru   rw   rx   ry   r|   r€   r�   rˆ   r   r   r   r   r   &   s8    õ


5









ür   )r   r   r   r   )#Ú
__future__r   r   ÚloggingÚsslÚtypesÚtypingÚ_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>   s&    

