o
    <&ßa!B  ã                   @   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m	Z	 ddl
mZ ddlmZ e e¡ZddgZg d¢ZG d	d
„ d
eƒ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)ÚRequestSigner)ÚConfig)ÚEndpointCreatorÚlegacyÚregional)z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'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_factoryÚconfig_store© r   ú//usr/lib/python3/dist-packages/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di |¤Ž}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_nameÚsigning_nameÚsignature_versionÚs3Úendpoint_url)
r%   r)   Úverifyr   Úmax_pool_connectionsÚproxiesÚtimeoutr#   Úclient_certÚproxies_config)
Ú
serializerÚendpointÚresponse_parserr   Úrequest_signerÚservice_modelr   Úclient_configr"   r   r   )Úcompute_client_argsÚgetÚcopyr   r   Ú
service_idr   r   Úcreate_endpointr   r+   r,   Úconnect_timeoutÚread_timeoutr.   r/   ÚbotocoreÚ	serializeÚcreate_serializerÚparsersÚcreate_parserr   r   )r   r4   r%   Ú	is_securer)   r*   ÚcredentialsÚscoped_configr5   Úendpoint_bridgeÚ
final_argsr   r   r   r   r   r    r"   r#   r$   Úendpoint_region_namer   ÚsignerÚ
new_configÚendpoint_creatorr1   r0   r2   r   r   r   Úget_client_argsD   sd   þü
÷ÿöz!ClientArgsCreator.get_client_argsc              
   C   st  |j }|jd }	d}
|r|jsd}
n|r#| d¡}|d ur#tj |¡}
| j}|d ur>|jd ur2|j}|j	d ur>|d|j	 7 }|  
|¡}| j||||||d�}|d  dg ¡}t|d	 |d
 |d�}d|v rk|jdd� d|v ru|jdd� |d urŽ|j|j|j|j|j|j|j|j|jd� |  |¡ |  
|¡}|dv }|r¬d|v r¬|d u r¨i }d|d< ||
|||	|||  |¡dœS )Nr   TFr   z %s)r   r%   r)   rB   rE   r    r!   Útagsr%   r'   )r%   r'   r   Ú	dualstack)Úuse_dualstack_endpointÚfips)Úuse_fips_endpoint)r;   r<   r+   r,   r/   Úretriesr.   Úinject_host_prefix)r(   z
s3-controlrN   )r   r   r   r   r   r   r    r#   )Úendpoint_prefixr!   r   r7   r=   ÚutilsÚensure_booleanr   r   Úuser_agent_extraÚcompute_s3_configÚ_compute_endpoint_configÚdictÚupdater;   r<   r+   r,   r/   rQ   r.   rR   Ú_compute_retry_configÚ_compute_socket_options)r   r4   r5   rE   r%   r)   rB   rD   r   r   r   Ú	raw_valuer   r    r   Úendpoint_variant_tagsr   Úis_s3_servicer   r   r   r6   ~   sz   





úýø


øz%ClientArgsCreator.compute_client_argsc                 C   sH   | j  d¡}|d ur"|jd ur"|d u r|j}|S | ¡ }| |j¡ |S )Nr(   )r   Úget_config_variabler(   r8   rZ   )r   r5   Ús3_configurationr   r   r   rW   È   s   
	ýz#ClientArgsCreator.compute_s3_configc                 C   sT   |||||dœ}|dkr| j dd|i|¤ŽS |dkr"| jdi |¤ŽS | jdi |¤ŽS )N)r   r%   r)   rB   rE   r(   r    Ústsr   )Ú_compute_s3_endpoint_configÚ_compute_sts_endpoint_configÚ_resolve_endpoint)r   r   r%   r)   rB   rE   r    Úresolve_endpoint_kwargsr   r   r   rX   Û   s   ûÿÿz*ClientArgsCreator._compute_endpoint_configc                 K   sX   |   |d |¡}|rd |d< | jdi |¤Ž}|  ||d ¡ |r*|d dkr*d|d< |S )Nr%   rE   r   r   r   )Ú_should_force_s3_globalre   Ú!_set_region_if_custom_s3_endpoint)r   r    rf   Úforce_s3_globalr   r   r   r   rc   ë   s   ÿÿz-ClientArgsCreator._compute_s3_endpoint_configc                 C   s2   d}|rd|v r|d }|   |¡ |dko|dv S )Nr   Úus_east_1_regional_endpoint)r   N)Ú_validate_s3_regional_config)r   r%   r    Ús3_regional_configr   r   r   rg   ý   s   
þz)ClientArgsCreator._should_force_s3_globalc                 C   s   |t vrtjj|d�‚d S )N)Ú%s3_us_east_1_regional_endpoint_config)ÚVALID_REGIONAL_ENDPOINTS_CONFIGr=   Ú
exceptionsÚ+InvalidS3UsEast1RegionalEndpointConfigError)r   Ú
config_valr   r   r   rk     s   þÿz.ClientArgsCreator._validate_s3_regional_configc                 C   sF   |d d u r|d d u r!|  d¡}|d |d< |d |d< d S d S d S )Nr$   r%   r(   ©Úresolve)r   r   rE   r1   r   r   r   rh     s   
üz3ClientArgsCreator._set_region_if_custom_s3_endpointc                 K   s:   | j di |¤Ž}|  |d |d |¡r|  ||d ¡ |S )Nr%   r)   rB   r   )re   Ú_should_set_global_sts_endpointÚ_set_global_sts_endpoint)r   rf   r   r   r   r   rd     s   ýÿz.ClientArgsCreator._compute_sts_endpoint_configc                 C   s.   |d   d¡}|s|rdS |  ¡ dko|tv S )Nr!   rL   Fr   )r7   Ú"_get_sts_regional_endpoints_configÚLEGACY_GLOBAL_STS_REGIONS)r   r%   r)   r   r^   r   r   r   rt   #  s   þz1ClientArgsCreator._should_set_global_sts_endpointc                 C   s.   | j  d¡}|s
d}|tvrtjj|d�‚|S )NÚsts_regional_endpointsr   )Ústs_regional_endpoints_config)r   r`   rn   r=   ro   Ú&InvalidSTSRegionalEndpointsConfigError)r   ry   r   r   r   rv   -  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   rB   Úschemer   r   r   ru   8  s   z*ClientArgsCreator._set_global_sts_endpointc                 C   s   |  ||||¡S r
   rr   )r   r   r%   r)   rB   rE   r   r   r   re   =  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é   Útcp_keepaliveF)ÚsocketÚIPPROTO_TCPÚTCP_NODELAYÚ_ensure_booleanr7   ÚappendÚ
SOL_SOCKETÚSO_KEEPALIVE)r   rD   r#   r   r   r   r\   B  s   ÿz)ClientArgsCreator._compute_socket_optionsc                 C   s   |   |¡ |  |¡ d S r
   )Ú_compute_retry_max_attemptsÚ_compute_retry_mode)r   r   r   r   r   r[   M  s   
z'ClientArgsCreator._compute_retry_configc                 C   s„   |  d¡}|d ur&d|v r| dd ¡ d S d|v r&| d¡}|d |d< d S | j d¡}|d ur@|d u r:i }||d< ||d< d S d S )NrQ   Útotal_max_attemptsÚmax_attemptsr~   )r7   Úpopr   r`   )r   r   rQ   ÚvaluerŠ   r   r   r   r‡   Q  s    


üz-ClientArgsCreator._compute_retry_max_attemptsc                 C   sP   |  d¡}|d u ri }||d< nd|v rd S | j d¡}|d u r"d}||d< d S )NrQ   ÚmodeÚ
retry_moder   )r7   r   r`   )r   r   rQ   rŽ   r   r   r   rˆ   q  s   

z%ClientArgsCreator._compute_retry_modec                 C   s   t |tƒr|S | ¡ dkS )NÚtrue)Ú
isinstanceÚboolÚlower)r   Úvalr   r   r   rƒ     s   
z!ClientArgsCreator._ensure_booleanN)Ú__name__Ú
__module__Ú__qualname__r   rK   r6   rW   rX   rc   rg   rk   rh   rd   rt   rv   ru   re   r\   r[   r‡   rˆ   rƒ   r   r   r   r   r	   :   s(    	:J

 r	   )Ú__doc__r8   Úloggingr€   Úbotocore.exceptionsr=   Úbotocore.serializeÚbotocore.utilsÚbotocore.signersr   Úbotocore.configr   Úbotocore.endpointr   Ú	getLoggerr”   Úloggerrn   rw   Úobjectr	   r   r   r   r   Ú<module>   s    
þ