o
    ~j@c6Q                     @   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 ddlmZ eeZddgZg d	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)EndpointResolverBuiltins)RequestSignerlegacyZ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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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   1usr/lib/python3.10/site-packages/botocore/args.py__init__<   s   	
zClientArgsCreator.__init__Nc                 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_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   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parsersZcreate_parserr   r   )r   r1   r$   	is_securer'   r(   Zcredentialsscoped_configr2   endpoint_bridgeZ
auth_tokenZ
final_argsr   r   r   r   r   r   r!   r"   r#   Zendpoint_region_namer   ZsignerZ
new_configZendpoint_creatorr/   r.   r0   r   r   r   get_client_argsL   sx   


z!ClientArgsCreator.get_client_argsc                 C   s  |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|jd	 | | | | | 
|}|dv }|rd|v r|d u ri }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)use_fips_endpoint)	r6   r7   r)   r*   r-   retriesr,   inject_host_prefixtcp_keepalive)r&   z
s3-controlr@   )r   r   r   r   r   r   r   r"   )Zendpoint_prefixr    r   r4   r8   utilsZensure_booleanr   r   Zuser_agent_extracompute_s3_config_compute_endpoint_configdictupdater6   r7   r)   r*   r-   rB   r,   rC   rD   _compute_retry_config_compute_connect_timeout_compute_socket_options)r   r1   r2   r=   r$   r'   r;   r<   r   r   r   Z	raw_valuer   r   r   Zendpoint_variant_tagsr   Zis_s3_servicer   r   r   r3      s   









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&   r5   rI   )r   r2   Zs3_configurationr   r   r   rF      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'   r;   r=   r&   r   stsr   )_compute_s3_endpoint_config_compute_sts_endpoint_config_resolve_endpoint)r   r   r$   r'   r;   r=   r   resolve_endpoint_kwargsr   r   r   rG     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$   r=   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|v r|d }|  | |dv }|dko|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   3  s   
z)ClientArgsCreator._should_force_s3_globalc                 C   s   |t vrtjj|dd S )N)Z%s3_us_east_1_regional_endpoint_config)VALID_REGIONAL_ENDPOINTS_CONFIGr8   
exceptionsZ+InvalidS3UsEast1RegionalEndpointConfigError)r   Z
config_valr   r   r   rU   <  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   r=   r/   r   r   r   rT   B  s   
z3ClientArgsCreator._set_region_if_custom_s3_endpointc                 K   s:   | j di |}| |d |d |r| ||d  |S )Nr$   r'   r;   r   )rQ   _should_set_global_sts_endpoint_set_global_sts_endpoint)r   rR   r   r   r   r   rP   P  s   z.ClientArgsCreator._compute_sts_endpoint_configc                 C   s6   |o
| di  d}|s|rdS |  dko|tv S )Nr    r?   Fr   )r4   "_get_sts_regional_endpoints_configLEGACY_GLOBAL_STS_REGIONS)r   r$   r'   r   Zhas_variant_tagsr   r   r   rZ   \  s   z1ClientArgsCreator._should_set_global_sts_endpointc                 C   s.   | j d}|s
d}|tvrtjj|d|S )NZsts_regional_endpointsr   )sts_regional_endpoints_config)r   rM   rV   r8   rW   Z&InvalidSTSRegionalEndpointsConfigError)r   r^   r   r   r   r\   i  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[   x  s   z*ClientArgsCreator._set_global_sts_endpointc                 C   s   | ||||S r
   rX   )r   r   r$   r'   r;   r=   r   r   r   rQ   }  s   z#ClientArgsCreator._resolve_endpointc                 C   sP   t jt jdfg}|o|j}|o| |dd}|s|r&|t jt jdf |S )N   rD   F)	socketIPPROTO_TCPTCP_NODELAYrD   _ensure_booleanr4   append
SOL_SOCKETSO_KEEPALIVE)r   r<   r2   r"   Zclient_keepaliveZscoped_keepaliver   r   r   rL     s   

z)ClientArgsCreator._compute_socket_optionsc                 C   s   |  | | | d S r
   )_compute_retry_max_attempts_compute_retry_mode)r   r   r   r   r   rJ     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 )NrB   Ztotal_max_attemptsmax_attemptsrb   )r4   popr   rM   )r   r   rB   valuerl   r   r   r   rj     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 )NrB   mode
retry_moder   r4   r   rM   )r   r   rB   rp   r   r   r   rk     s   

z%ClientArgsCreator._compute_retry_modec                 C   s6   | d}|d urd S | jd}|r||d< d S d S )Nr6   rq   )r   r   r6   r   r   r   rK     s   
z*ClientArgsCreator._compute_connect_timeoutc                 C   s   t |tr|S | dkS )Ntrue)
isinstanceboollower)r   valr   r   r   rf     s   
z!ClientArgsCreator._ensure_booleanc                 C   s   |r|}n	|j js|}nd }tj|tj|dpdtj||p!dtj| j	|d d dtj
| ||tj|ddtj|ddktj|ddtj|ddtj|d	dtj|iS )
NrA   F)r$   r'   r   Zuse_accelerate_endpointZaddressing_stylepathZuse_arn_regionTZ$s3_disable_multiregion_access_points)Zendpoint_resolverZuses_builtin_dataEPRBuiltinsZ
AWS_REGIONZAWS_USE_FIPSZ$_resolve_endpoint_variant_config_varZAWS_USE_DUALSTACKZ_resolve_use_dualstack_endpointZAWS_STS_USE_GLOBAL_ENDPOINTrZ   ZAWS_S3_USE_GLOBAL_ENDPOINTrS   ZAWS_S3_ACCELERATEr4   ZAWS_S3_FORCE_PATH_STYLEZAWS_S3_USE_ARN_REGIONZAWS_S3CONTROL_USE_ARN_REGIONZAWS_S3_DISABLE_MRAPZSDK_ENDPOINT)r   r$   r   r   r=   Zclient_endpoint_urlZlegacy_endpoint_urlZgiven_endpointr   r   r   *compute_endpoint_resolver_builtin_defaults  sL   

z<ClientArgsCreator.compute_endpoint_resolver_builtin_defaultsr
   )__name__
__module____qualname__r   r>   r3   rF   rG   rO   rS   rU   rT   rP   rZ   r\   r[   rQ   rL   rJ   rj   rk   rK   rf   ry   r   r   r   r   r	   ;   s.    
QV	
 r	   )__doc__r5   loggingrc   Zbotocore.exceptionsr8   Zbotocore.parsersZbotocore.serializeZbotocore.utilsZbotocore.configr   Zbotocore.endpointr   Zbotocore.regionsr   rx   Zbotocore.signersr   	getLoggerrz   loggerrV   r]   r	   r   r   r   r   <module>   s$   
