o
    9_Wca                     @   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 ddlmZ ddlmZ ddlmZ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)EndpointRulesetResolver)RequestSigner)ensure_booleanis_s3_accelerate_url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,d- ZdS )0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   /D:\Flask\env\Lib\site-packages\botocore/args.py__init__=   s   	
zClientArgsCreator.__init__Nc                  C   sD  |  |||	||||}|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   Zendpoint_ruleset_resolverr   )compute_client_argsgetcopyr   r   Z
service_idr   r   Zcreate_endpointr   r,   r-   connect_timeoutread_timeoutr/   r0   botocore	serializeZcreate_serializerparsersZcreate_parser_build_endpoint_resolverr   r   ) r   r4   r'   	is_securer*   r+   credentialsscoped_configr5   endpoint_bridgeZ
auth_tokenendpoints_ruleset_datapartition_dataZ
final_argsr   r   r   r    r!   r"   r$   r%   r&   endpoint_region_namer   ZsignerZ
new_configZendpoint_creatorr2   r1   r3   Zruleset_resolverr   r   r   get_client_argsM   s   


z!ClientArgsCreator.get_client_argsc                 C   s  |j }|jd }	d}
|r|jsd}
n|r!|d}|d ur!t|}
| j}|d ur<|jd ur0|j}|jd ur<|d|j 7 }| |}| j	||||||d}|d dg }t
|d	 |d
 |d}d|v ri|jdd d|v rs|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?   rB   r"   r#   tagsr'   r(   )r'   r(   r   Z	dualstack)use_dualstack_endpointZfips)use_fips_endpoint)	r9   r:   r,   r-   r0   retriesr/   inject_host_prefixtcp_keepalive)r)   z
s3-controlrH   )r   r   r   r   r    r!   r"   r%   )endpoint_prefixr#   r   r7   r   r   r   Zuser_agent_extracompute_s3_config_compute_endpoint_configdictupdater9   r:   r,   r-   r0   rJ   r/   rK   rL   _compute_retry_config_compute_connect_timeout_compute_socket_options)r   r4   r5   rB   r'   r*   r?   rA   r   r    r   Z	raw_valuer   r"   r   Zendpoint_variant_tagsr!   Zis_s3_servicer   r   r   r6      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)   r8   rQ   )r   r5   Zs3_configurationr   r   r   rN     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?   rB   r)   r"   stsr   )_compute_s3_endpoint_config_compute_sts_endpoint_config_resolve_endpoint)r   r   r'   r*   r?   rB   r"   resolve_endpoint_kwargsr   r   r   rO     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'   rB   r
   r   r   )_should_force_s3_globalrY   !_set_region_if_custom_s3_endpoint)r   r"   rZ   Zforce_s3_globalr   r   r   r   rW   1  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   r[   F  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_CONFIGr;   
exceptionsZ+InvalidS3UsEast1RegionalEndpointConfigError)r   Z
config_valr   r   r   r]   O  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   rB   r2   r   r   r   r\   U  s   


z3ClientArgsCreator._set_region_if_custom_s3_endpointc                 K   s:   | j di |}| |d |d |r| ||d  |S )Nr'   r*   r?   r   )rY   _should_set_global_sts_endpoint_set_global_sts_endpoint)r   rZ   r   r   r   r   rX   c  s   z.ClientArgsCreator._compute_sts_endpoint_configc                 C   s6   |o
| di  d}|s|rdS |  dko|tv S )Nr#   rG   Fr	   )r7   "_get_sts_regional_endpoints_configLEGACY_GLOBAL_STS_REGIONS)r   r'   r*   r   Zhas_variant_tagsr   r   r   rb   o  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   rU   r^   r;   r_   Z&InvalidSTSRegionalEndpointsConfigError)r   rf   r   r   r   rd   |  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   rc     s   z*ClientArgsCreator._set_global_sts_endpointc                 C   s   | ||||S r   r`   )r   r   r'   r*   r?   rB   r   r   r   rY     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   rL   F)	socketIPPROTO_TCPTCP_NODELAYrL   _ensure_booleanr7   append
SOL_SOCKETSO_KEEPALIVE)r   rA   r5   r%   Zclient_keepaliveZscoped_keepaliver   r   r   rT     s   

z)ClientArgsCreator._compute_socket_optionsc                 C   s   |  | | | d S r   )_compute_retry_max_attempts_compute_retry_mode)r   r!   r   r   r   rR     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 )NrJ   Ztotal_max_attemptsmax_attemptsrj   )r7   popr   rU   )r   r!   rJ   valuert   r   r   r   rr     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 )NrJ   mode
retry_moder	   r7   r   rU   )r   r!   rJ   rx   r   r   r   rs     s   

z%ClientArgsCreator._compute_retry_modec                 C   s6   | d}|d urd S | jd}|r||d< d S d S )Nr9   ry   )r   r!   r9   r   r   r   rS     s   
z*ClientArgsCreator._compute_connect_timeoutc                 C   s   t |tr|S | dkS )Ntrue)
isinstanceboollower)r   valr   r   r   rn     s   
z!ClientArgsCreator._ensure_booleanc              
   C   s   |d u rd S |  |pi }|j}|dv r|}n|}| j||||
||jd}|dkr+|ni }|d ur4|jnd }t|||||||	|dS )N)r)   rV   )r'   r   r"   rB   client_endpoint_urllegacy_endpoint_urlr)   )Zendpoint_ruleset_datarD   r4   builtinsclient_contextr   Zuse_sslZrequested_auth_scheme)rN   rM   *compute_endpoint_resolver_builtin_defaultshostr(   r   )r   rC   rD   r5   r4   rE   r'   r*   r2   r?   rB   r   Zs3_config_rawZservice_name_rawZeprv2_region_nameZresolver_builtinsr   Zsig_versionr   r   r   r>     s<   z*ClientArgsCreator._build_endpoint_resolverc           	      C   s   |r|}n	|  s|}nd }|ddrd}n|d ur't|s'|ddk}n|ddk}tj|tj|d u r<|dp=dtj|d u rH||pIdtj	| j
|d d dtj| ||tj|ddtj|tj|dd	tj|ddtj|d
dtj|iS )NZuse_accelerate_endpointFZaddressing_styleZvirtualpathrI   )r'   r*   r   Zuse_arn_regionTZ$s3_disable_multiregion_access_points)Zresolver_uses_builtin_datar7   r   EPRBuiltinsZ
AWS_REGIONZAWS_USE_FIPSZ$_resolve_endpoint_variant_config_varZAWS_USE_DUALSTACKZ_resolve_use_dualstack_endpointZAWS_STS_USE_GLOBAL_ENDPOINTrb   ZAWS_S3_USE_GLOBAL_ENDPOINTr[   ZAWS_S3_ACCELERATEZ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"   rB   r   r   Zgiven_endpointZforce_path_styler   r   r   r   *  sd   

z<ClientArgsCreator.compute_endpoint_resolver_builtin_defaults)NNNr   )__name__
__module____qualname__r   rF   r6   rN   rO   rW   r[   r]   r\   rX   rb   rd   rc   rY   rT   rR   rr   rs   rS   rn   r>   r   r   r   r   r   r   <   s4    
cV	
 <r   )__doc__r8   loggingrk   Zbotocore.exceptionsr;   Zbotocore.parsersZbotocore.serializeZbotocore.configr   Zbotocore.endpointr   Zbotocore.regionsr   r   r   Zbotocore.signersr   Zbotocore.utilsr   r   	getLoggerr   loggerr^   re   r   r   r   r   r   <module>   s&   
