o
    di'                     @  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m	Z	 d dl
mZ d dlmZmZmZ d dlZd dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlm Z  d dl!Z"d d	l#m$Z$ d
dl%m&Z& zd dl'Z'W n e(y}   dZ'Y nw erd dlm)Z) G dd dZ*dS )    )annotationsN)AsyncIterableIterable)CancelledError)TYPE_CHECKINGAnycast)AWSPreparedRequest)MAX_POOL_CONNECTIONSConnectionClosedErrorConnectTimeoutErrorEndpointConnectionErrorHTTPClientErrorProxyConnectionErrorReadTimeoutErrorcreate_urllib3_contextensure_booleanget_cert_pathlogger)CIMultiDict_text   )DEFAULT_KEEPALIVE_TIMEOUT)
SSLContextc                   @  sV   e Zd Zdddeddddfd$ddZdd Zdd Zd%ddZd&ddZd'd"d#Z	dS )(HttpxSessionTNverifyboolproxiesdict[str, str] | Nonetimeout0float | list[float] | tuple[float, float] | Nonemax_pool_connectionsintsocket_optionslist[Any] | Noneclient_certstr | tuple[str, str] | Noneproxies_configconnector_argsdict[str, Any] | Nonec	                 C  s  t d u rtd|s|rtd|d u rdti| _n|| _d | _t|ttfr,|\}	}
n| }	}
| j	dd}| j	dd}t j
|	|
||d| _d | _d | _t|trW|| _nt|trc|\| _| _n|d urnt| dd	| jv rwtd
d| jv rtdd| jv rtd|| _|| _|d u rg | _d }|| _|sd S d| jv rtd| jd | _d S |  }t|}|r||d d  |d ur|| _d S d S )Nz1Using HttpxSession requires httpx to be installedz4Proxy support not implemented with httpx as backend.keepalive_timeoutwrite_timeout   pool_timeout)connectreadwritepoolz must be str or tuple[str,str]use_dns_cachezYDNS caching is not implemented by httpx. https://github.com/encode/httpx/discussions/2211force_closez$Not supported with httpx as backend.resolverssl_contextr   )httpxRuntimeErrorNotImplementedErrorr   _connector_args_session
isinstancelisttuplegetTimeout_timeout
_cert_file	_key_filestr	TypeError_max_pool_connections_socket_options_verifyr   _get_ssl_contextr   load_verify_locations)selfr   r   r    r"   r$   r&   r(   r)   conn_timeoutread_timeoutr,   r.   r6   ca_certs rO   L/home/ubuntu/.local/lib/python3.10/site-packages/aiobotocore/httpxsession.py__init__,   sx   








zHttpxSession.__init__c                   sj   | j rJ tj| j| jd d}| jr| jd u r| j}n| jr'| j| jf}nd }tj| j||d| _ | S )Nr+   )max_connectionskeepalive_expiry)r    limitscert)	r;   r7   LimitsrF   r:   rB   rC   AsyncClientrA   )rK   rT   rU   rO   rO   rP   
__aenter__   s   
zHttpxSession.__aenter__c                   s2   | j r| j |||I d H  d | _ d | _d S d S N)r;   	__aexit__
_connector)rK   exc_typeexc_valexc_tbrO   rO   rP   rZ      s   
zHttpxSession.__aexit__returnr   c                 C  s    t  }| jr|| j| j |S rY   )r   rB   load_cert_chainrC   )rK   r6   rO   rO   rP   rI      s   zHttpxSession._get_ssl_contextNonec                   s   |  d d d I d H  d S rY   )rZ   )rK   rO   rO   rP   close   s   zHttpxSession.closerequestr	   'aiobotocore.awsrequest.HttpxAWSResponsec              
     s  z|j }|j}ttjddrtdtdd | D }d|d< d }ddd}t	|j
ttjfr@t	|j
tr@||j
}n|j
}dt|ddi}| jd usRJ | jj|j||||d}t	|jtjsgJ | jj|ddI d H }	tjj|	j }
tjt|	j |	j|
|	}|j s|j!I d H  |W S  tj"y } zt#|j |dd }~w t$j%fy } zt#|j |dd }~w t&j'y } zt(|j |dd }~w tj)y } zt(|j |dd }~w tj*y } zt+|j |dd }~w tj,y	 } zt-|j |dd }~w tj.y } zt/|j |dd }~w t0j1y)   tj2j1 ty1     t3y9     t4yS } zd}t5j6|dd t7|dd }~ww )N(BOTO_EXPERIMENTAL__ADD_PROXY_HOST_HEADER zHhttpx implementation of aiobotocore does not (currently) support proxiesc                 s  s(    | ]}|d  t |d ddfV  qdS )r   r   utf-8encodingNr   ).0zrO   rO   rP   	<genexpr>   s    
z$HttpxSession.send.<locals>.<genexpr>identityzAccept-Encodingstreamr   r_   r   c                 S sN   t | tr| 2 z	3 d H W }|V  q6 d S | D ]}|V  tdI d H  qd S )Nr   )r<   r   asynciosleep)rn   itemrO   rO   rP   to_async_iterable   s   
z,HttpxSession.send.<locals>.to_async_iterabletargetrg   rh   )methodurlheaderscontent
extensionsT)rn   )endpoint_urlerrorz2Exception received when sending httpx HTTP request)exc_info)rz   )rn   r   r_   r   )8ru   rv   r   osenvironr?   r9   r   itemsr<   bodyr   ioBytesIOr   bytesr;   build_requestrt   rn   r7   AsyncByteStreamsendbotocorecompatHTTPHeaders
from_pairsaiobotocore
awsrequestHttpxAWSResponserD   status_codestream_outputrw   ConnectErrorr   socketgaierrorro   TimeoutErrorr   ReadTimeoutTimeoutExceptionr   
ProxyErrorr   
CloseErrorr   sslSSLError
exceptionsr   	Exceptionr   debugr   )rK   rc   ru   rv   headers_rw   rr   rx   httpx_requestresponseresponse_headershttp_responseemessagerO   rO   rP   r      s   
	

zHttpxSession.send)r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   r)   r*   )r_   r   )r_   ra   )rc   r	   r_   rd   )
__name__
__module____qualname__r
   rQ   rX   rZ   rI   rb   r   rO   rO   rO   rP   r   +   s    Z

r   )+
__future__r   ro   r   r|   r   r   collections.abcr   r   concurrent.futuresr   typingr   r   r   r   botocore.awsrequestr	   botocore.httpsessionr
   r   r   r   r   r   r   r   r   r   r   	multidictr   aiobotocore.awsrequestr   aiobotocore._endpoint_helpersr   
_constantsr   r7   ImportErrorr   r   rO   rO   rO   rP   <module>   s0    4