U
    .bE                     @   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 )zInternal 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@   
