o
    di'                     @   s  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 d dl	Z	d dl	m
Z
mZmZmZmZmZm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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.m/Z/ G dd dZ0dS )    N)CancelledError)Optional)ClientConnectionErrorClientConnectorErrorClientHttpProxyErrorClientProxyConnectionErrorClientSSLErrorServerDisconnectedErrorServerTimeoutError)URL)MAX_POOL_CONNECTIONSConnectionClosedErrorConnectTimeoutErrorEndpointConnectionErrorHTTPClientErrorInvalidProxiesConfigErrorLocationParseErrorProxyConfigurationProxyConnectionErrorReadTimeoutErrorSSLError_is_ipaddresscreate_urllib3_contextensure_booleanget_cert_pathloggermask_proxy_url	parse_urlurlparse)CIMultiDict   )DEFAULT_KEEPALIVE_TIMEOUT)_IOBaseWrapper_textc                	   @   s   e Zd Zdddeddddfdedeeef dedefddZ	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )AIOHTTPSessionTNverifyproxiestimeoutmax_pool_connectionsc	                 C   s   t  | _i | _|| _t||d| _t|tt	fr|\}	}
n| }	}
t
j|	|
d}d | _d | _t|tr8|| _nt|t	rC|\| _| _|| _|| _| jd u rTttd| _|| _|| _|d u rcg | _d S d S )N)r&   proxies_settings)sock_connect	sock_read)keepalive_timeout)
contextlibAsyncExitStack_exit_stack	_sessions_verifyr   _proxy_config
isinstancelisttupleaiohttpClientTimeout
_cert_file	_key_filestr_timeout_connector_argsdictr!   _max_pool_connections_socket_options)selfr%   r&   r'   r(   socket_optionsclient_certproxies_configconnector_argsconn_timeoutread_timeout rG   K/home/ubuntu/.local/lib/python3.10/site-packages/aiobotocore/httpsession.py__init__2   s:   





zAIOHTTPSession.__init__c                    s   | j rJ | S N)r0   r@   rG   rG   rH   
__aenter__f   s   
zAIOHTTPSession.__aenter__c                    s    | j   | j I d H  d S rJ   )r0   clearr/   aclose)r@   exc_typeexc_valexc_tbrG   rG   rH   	__aexit__k   s   
zAIOHTTPSession.__aexit__c                 C   s   t  S rJ   )r   rK   rG   rG   rH   _get_ssl_contexto   s   zAIOHTTPSession._get_ssl_contextc              
   C   s   | j j}|d}|d}|d u r|d u rd S |  }z6t|}t|js)d|_|d ur3|j|d t	|t
rF|j|d |d d |W S t	|trP|| |W S  ttfye } zt|dd }~ww )	Nproxy_ca_bundleproxy_client_certT)cafiler   r    )keyfileerror)r2   settingsgetrS   r   r   hostcheck_hostnameload_verify_locationsr3   r5   load_cert_chainr:   OSErrorr   r   )r@   	proxy_urlr)   rT   
proxy_certcontexturlerG   rG   rH   _setup_proxy_ssl_contextr   s,   






z'AIOHTTPSession._setup_proxy_ssl_contextc                 C   s*   | dd}| dk }r|d= |pd S )NzTransfer-Encoding chunked)r[   lower)r@   headerstransfer_encodingrh   rG   rG   rH   _chunked   s   zAIOHTTPSession._chunkedc                 C   sz   d }t | jr.|r| |}n|  }|r.| jr || j| j t| j}|r.||d d  t	j
d| j|p6dd| jS )NF)limitsslrG   )boolr1   rf   rS   r8   r_   r9   r   r^   r6   TCPConnectorr>   r<   )r@   ra   ssl_contextca_certsrG   rG   rH   _create_connector   s(   

z AIOHTTPSession._create_connectorc                    sN   | j | }s%| |}| jtj|| jdhddI d H  | j |< }|S )NzCONTENT-TYPEF)	connectorr'   skip_auto_headersauto_decompress)r0   r[   rs   r/   enter_async_contextr6   ClientSessionr;   )r@   ra   sessionrt   rG   rG   rH   _get_session   s   


zAIOHTTPSession._get_sessionc                    s   |  d d d I d H  d S rJ   )rR   rK   rG   rG   rH   close   s   zAIOHTTPSession.closec              
      sl  z| j |j}| j |j}|j}|j}|j}ttj	ddr,t
|jj}||d< tdd | D }d|d< t|tjrEt|}t|dd	}| |I d H }	|	j|j|| |||||d
I d H }
dd |
jD }tjt|
j|
j||
}|js|jI d H  |W S  ty } zt |j|dd }~w t!t"fy } zt#t$||dd }~w t%t&j't&j(j)fy } zt*|||jdd }~w t+y } zt|, -drt.|j|dt/|j|dd }~w t0t1t2j3fy } zt4|j|dd }~w t5j6y } zt/|j|dd }~w t7y     t8y5 } zd}t9j:|dd t;|dd }~ww )N(BOTO_EXPERIMENTAL__ADD_PROXY_HOST_HEADERrg   r\   c                 s   s(    | ]}|d  t |d ddfV  qdS )r   r    utf-8)encodingN)r#   ).0zrG   rG   rH   	<genexpr>   s    
z&AIOHTTPSession.send.<locals>.<genexpr>identityzAccept-EncodingT)encoded)rd   rh   rj   dataproxyproxy_headersc                 S   s&   i | ]\}}| d  | d qS )r}   )decoderi   )r   kvrG   rG   rH   
<dictcomp>   s    z'AIOHTTPSession.send.<locals>.<dictcomp>)endpoint_urlrY   )ra   rY   )rY   requestr   connectz4Exception received when sending urllib3 HTTP request)exc_inforX   )<r2   proxy_url_forrd   proxy_headers_forrj   bodyr   osenvironr[   r   hostnamer   itemsr3   ioIOBaser"   r   rz   r   methodrl   raw_headersaiobotocore
awsrequestAioAWSResponser:   statusstream_outputcontentr   r   r   r   r   r   r	   r6   ClientPayloadErrorhttp_exceptionsBadStatusLiner   r
   ri   
startswithr   r   r   r   socketgaierrorr   asyncioTimeoutErrorr   	Exceptionr   debugr   )r@   r   ra   r   rd   rj   r   r\   headers_ry   responsehttp_responsere   messagerG   rG   rH   send   s   
zAIOHTTPSession.send)__name__
__module____qualname__r   ro   r=   r:   floatintrI   rL   rR   rS   rf   rl   rs   rz   r{   r   rG   rG   rG   rH   r$   1   s6    

4r$   )1r   r-   r   r   r   concurrent.futuresr   typingr   r6   r   r   r   r   r   r	   r
   aiohttp.clientr   botocore.httpsessionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	multidictr   aiobotocore.awsrequestr   
_constantsr!   _endpoint_helpersr"   r#   r$   rG   rG   rG   rH   <module>   s     $	T