U
    ³.¬býE  ã                   @   s¨   d Z ddlZddl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 ddlmZ e e¡ZddgZdd	d
dddddddddddddgZG dd„ dƒZdS )z²Internal module to help with normalizing botocore client args.

This module (and all function/classes within this module) should be
considered internal, and *not* a public API.

é    N)ÚConfig)ÚEndpointCreator)ÚRequestSignerÚlegacyZregionalzap-northeast-1z
ap-south-1zap-southeast-1zap-southeast-2ú
aws-globalzca-central-1zeu-central-1z
eu-north-1z	eu-west-1z	eu-west-2z	eu-west-3z	sa-east-1ú	us-east-1z	us-east-2z	us-west-1z	us-west-2c                   @   s¬   e Z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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'd(„ Zd)S )*ÚClientArgsCreatorc                 C   s(   || _ || _|| _|| _|| _|| _d S ©N)Ú_event_emitterÚ_user_agentÚ_response_parser_factoryÚ_loaderÚ_exceptions_factoryÚ_config_store)ÚselfÚevent_emitterÚ
user_agentÚresponse_parser_factoryÚloaderÚexceptions_factoryZconfig_store© r   ú1/tmp/pip-unpacked-wheel-7df6wvge/botocore/args.pyÚ__init__;   s    	zClientArgsCreator.__init__c
                 C   s  |   |||	||||¡}
|
d }|
d }|
d }|
d }|
d }|
d }|d  dd ¡}|
d	 }|d
 }|d }t | j¡}t|j||d |d ||ƒ}||d< tf |Ž}t|ƒ}|j|||d || j	|j
|j|j|jf||j|jd�}tj ||¡}tj |¡}||||||| j||| jdœ
S )NÚservice_nameÚparameter_validationÚendpoint_configÚprotocolÚconfig_kwargsÚ	s3_configÚmetadataÚ	partitionÚsocket_optionsÚsigning_regionÚregion_nameZsigning_nameÚsignature_versionÚs3Úendpoint_url)
r#   r&   Úverifyr   Úmax_pool_connectionsÚproxiesÚtimeoutr!   Úclient_certÚproxies_config)
Ú
serializerÚendpointÚresponse_parserr   Zrequest_signerÚservice_modelr   Úclient_configr    r   )Úcompute_client_argsÚgetÚcopyr
   r   Z
service_idr   r   Zcreate_endpointr   r(   r)   Úconnect_timeoutÚread_timeoutr+   r,   ÚbotocoreÚ	serializeZcreate_serializerÚparsersÚcreate_parserr   r   )r   r0   r#   Ú	is_securer&   r'   ÚcredentialsÚscoped_configr1   Úendpoint_bridgeZ
final_argsr   r   r   r   r   r   r    r!   r"   Zendpoint_region_namer   ZsignerZ
new_configZendpoint_creatorr.   r-   r/   r   r   r   Úget_client_argsK   sx    ù
ú	

õ ÿöz!ClientArgsCreator.get_client_argsc              
   C   s†  |j }|jd }	d}
|r$|js$d}
n"|rF| d¡}|d k	rFtj |¡}
| j}|d k	r||jd k	rd|j}|j	d k	r||d|j	 7 }|  
|¡}| j||||||d�}|d  dg ¡}t|d	 |d
 |d�}d|krÖ|jdd� d|krê|jdd� |d k	�r|j|j|j|j|j|j|j|j|jd� |  |¡ |  |¡ |  
|¡}|dk}|�rjd|k�rj|d k�rbi }d|d< ||
|||	|||  |¡dœS )Nr   TFr   z %s)r   r#   r&   r;   r>   r   r   Útagsr#   r$   )r#   r$   r   Z	dualstack)Úuse_dualstack_endpointZfips)Zuse_fips_endpoint)r5   r6   r(   r)   r,   Úretriesr+   Úinject_host_prefix)r%   z
s3-controlrA   )r   r   r   r   r   r   r   r!   )Zendpoint_prefixr   r   r3   r7   ÚutilsZensure_booleanr   r   Zuser_agent_extraÚcompute_s3_configÚ_compute_endpoint_configÚdictÚupdater5   r6   r(   r)   r,   rB   r+   rC   Ú_compute_retry_configÚ_compute_connect_timeoutÚ_compute_socket_options)r   r0   r1   r>   r#   r&   r;   r=   r   r   r   Z	raw_valuer   r   r   Úendpoint_variant_tagsr   Zis_s3_servicer   r   r   r2   š   s|    






úý
ø




øz%ClientArgsCreator.compute_client_argsc                 C   sF   | j  d¡}|d k	rB|jd k	rB|d kr.|j}n| ¡ }| |j¡ |S )Nr%   )r   Úget_config_variabler%   r4   rH   )r   r1   Zs3_configurationr   r   r   rE   í   s    
z#ClientArgsCreator.compute_s3_configc                 C   sL   |||||dœ}|dkr,| j f d|i|—ŽS |dkr@| jf |ŽS | jf |ŽS )N)r   r#   r&   r;   r>   r%   r   Ústs)Ú_compute_s3_endpoint_configÚ_compute_sts_endpoint_configÚ_resolve_endpoint)r   r   r#   r&   r;   r>   r   Úresolve_endpoint_kwargsr   r   r   rF      s    
ûÿÿz*ClientArgsCreator._compute_endpoint_configc                 K   sT   |   |d |¡}|rd |d< | jf |Ž}|  ||d ¡ |rP|d dkrPd|d< |S )Nr#   r>   r   r   )Ú_should_force_s3_globalrQ   Ú!_set_region_if_custom_s3_endpoint)r   r   rR   Zforce_s3_globalr   r   r   r   rO     s     ÿ ÿz-ClientArgsCreator._compute_s3_endpoint_configc                 C   s6   d}|r"d|kr"|d }|   |¡ |dk}|dko4|S )Nr   Zus_east_1_regional_endpoint)r   N)Ú_validate_s3_regional_config)r   r#   r   Zs3_regional_configZis_global_regionr   r   r   rS   -  s    
z)ClientArgsCreator._should_force_s3_globalc                 C   s   |t krtjj|d�‚d S )N)Z%s3_us_east_1_regional_endpoint_config)ÚVALID_REGIONAL_ENDPOINTS_CONFIGr7   Ú
exceptionsZ+InvalidS3UsEast1RegionalEndpointConfigError)r   Z
config_valr   r   r   rU   6  s    ÿz.ClientArgsCreator._validate_s3_regional_configc                 C   s>   |d d kr:|d d kr:|  d¡}|d |d< |d |d< d S )Nr"   r#   r%   ©Úresolve)r   r   r>   r.   r   r   r   rT   <  s    
ÿ
þ
z3ClientArgsCreator._set_region_if_custom_s3_endpointc                 K   s6   | j f |Ž}|  |d |d |¡r2|  ||d ¡ |S )Nr#   r&   r;   )rQ   Ú_should_set_global_sts_endpointÚ_set_global_sts_endpoint)r   rR   r   r   r   r   rP   J  s    ý ÿz.ClientArgsCreator._compute_sts_endpoint_configc                 C   s.   |d   d¡}|s|rdS |  ¡ dko,|tkS )Nr   r@   Fr   )r3   Ú"_get_sts_regional_endpoints_configÚLEGACY_GLOBAL_STS_REGIONS)r   r#   r&   r   rL   r   r   r   rZ   V  s    þz1ClientArgsCreator._should_set_global_sts_endpointc                 C   s.   | j  d¡}|sd}|tkr*tjj|d�‚|S )NZsts_regional_endpointsr   )Ústs_regional_endpoints_config)r   rM   rV   r7   rW   Z&InvalidSTSRegionalEndpointsConfigError)r   r^   r   r   r   r\   a  s    ÿÿÿÿz4ClientArgsCreator._get_sts_regional_endpoints_configc                 C   s$   |rdnd}d| |d< d|d< d S )NÚhttpsÚhttpz%s://sts.amazonaws.comr&   r   r"   r   )r   r   r;   Úschemer   r   r   r[   p  s    z*ClientArgsCreator._set_global_sts_endpointc                 C   s   |  ||||¡S r	   rX   )r   r   r#   r&   r;   r>   r   r   r   rQ   u  s       ÿz#ClientArgsCreator._resolve_endpointc                 C   s>   t jt jdfg}|r:|  | dd¡¡r:| t jt jdf¡ |S )Né   Ztcp_keepaliveF)ÚsocketÚIPPROTO_TCPÚTCP_NODELAYÚ_ensure_booleanr3   ÚappendÚ
SOL_SOCKETÚSO_KEEPALIVE)r   r=   r!   r   r   r   rK   �  s    ÿz)ClientArgsCreator._compute_socket_optionsc                 C   s   |   |¡ |  |¡ d S r	   )Ú_compute_retry_max_attemptsÚ_compute_retry_mode)r   r   r   r   r   rI   �  s    
z'ClientArgsCreator._compute_retry_configc                 C   s€   |  d¡}|d k	rLd|kr*| dd ¡ d S d|krL| d¡}|d |d< d S | j d¡}|d k	r||d krti }||d< ||d< d S )NrB   Ztotal_max_attemptsÚmax_attemptsrb   )r3   Úpopr   rM   )r   r   rB   Úvaluerl   r   r   r   rj   ‘  s    


z-ClientArgsCreator._compute_retry_max_attemptsc                 C   sP   |  d¡}|d kr i }||d< nd|kr,d S | j d¡}|d krDd}||d< d S )NrB   ÚmodeÚ
retry_moder   ©r3   r   rM   )r   r   rB   rp   r   r   r   rk   ±  s    

z%ClientArgsCreator._compute_retry_modec                 C   s2   |  d¡}|d k	rd S | j d¡}|r.||d< d S )Nr5   rq   )r   r   r5   r   r   r   rJ   ¿  s    
ÿz*ClientArgsCreator._compute_connect_timeoutc                 C   s   t |tƒr|S | ¡ dkS d S )NÚtrue)Ú
isinstanceÚboolÚlower)r   Úvalr   r   r   rf   Ì  s    
z!ClientArgsCreator._ensure_booleanN)Ú__name__Ú
__module__Ú__qualname__r   r?   r2   rE   rF   rO   rS   rU   rT   rP   rZ   r\   r[   rQ   rK   rI   rj   rk   rJ   rf   r   r   r   r   r   :   s(   OS	 r   )Ú__doc__r4   Úloggingrc   Zbotocore.exceptionsr7   Zbotocore.parsersZbotocore.serializeZbotocore.utilsZbotocore.configr   Zbotocore.endpointr   Zbotocore.signersr   Ú	getLoggerrw   ÚloggerrV   r]   r   r   r   r   r   Ú<module>   s@   
þð