a
    ݌xdb                     @   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d0d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d1d 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 )2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   E/var/www/html/Ranjet/env/lib/python3.9/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f 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_resolver)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|rB|d}|d urBt|}
| j}|d urx|jd ur`|j}|jd urx|d|j 7 }| |}| j	||||||d}|d dg }t
|d	 |d
 |d}d|v r|jdd d|v r|jdd |d ur|j|j|j|j|j|j|j|j|j|jd	 | | | | | |}| |}|rld|v rl|d u rdi }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_keepaliverH   )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_is_s3_service_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   sF   | j d}|d urB|jd urB|d u r.|j}n| }||j |S )Nr)   )r   get_config_variabler)   r8   rQ   )r   r5   Zs3_configurationr   r   r   rN     s    
z#ClientArgsCreator.compute_s3_configc                 C   s   |dv S )a,  Whether the service is S3 or S3 Control.

        Note that throughout this class, service_name refers to the endpoint
        prefix, not the folder name of the service in botocore/data. For
        S3 Control, the folder name is 's3control' but the endpoint prefix is
        's3-control'.
        )r)   z
s3-controlr   )r   r   r   r   r   rT     s    z ClientArgsCreator._is_s3_servicec                 C   sT   |||||d}|dkr,| j f d|i|S |dkrD| jf i |S | jf i |S )N)r   r'   r*   r?   rB   r)   r"   sts)_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f i |}| ||d  |rT|d dkrTd|d< |S )Nr'   rB   r
   r   )_should_force_s3_globalrZ   !_set_region_if_custom_s3_endpoint)r   r"   r[   Zforce_s3_globalr   r   r   r   rX   ;  s    z-ClientArgsCreator._compute_s3_endpoint_configc                 C   s6   d}|r"d|v r"|d }|  | |dv }|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   r\   P  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^   Y  s    z.ClientArgsCreator._validate_s3_regional_configc                 C   s>   |d d u r:|d d u r:| d}|d |d< |d |d< d S )Nr&   r'   r)   resolve)r   r   rB   r2   r   r   r   r]   _  s    


z3ClientArgsCreator._set_region_if_custom_s3_endpointc                 K   s:   | j f i |}| |d |d |r6| ||d  |S )Nr'   r*   r?   )rZ   _should_set_global_sts_endpoint_set_global_sts_endpoint)r   r[   r   r   r   r   rY   m  s    z.ClientArgsCreator._compute_sts_endpoint_configc                 C   s6   |o| di  d}|s|r"dS |  dko4|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   rc   y  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   rV   r_   r;   r`   Z&InvalidSTSRegionalEndpointsConfigError)r   rg   r   r   r   re     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   rd     s    z*ClientArgsCreator._set_global_sts_endpointc                 C   s   | ||||S r   ra   )r   r   r'   r*   r?   rB   r   r   r   rZ     s    z#ClientArgsCreator._resolve_endpointc                 C   sP   t jt jdfg}|o|j}|o.| |dd}|s8|rL|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   rU     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rLd|v r*|dd  d S d|v rL|d}|d |d< d S | jd}|d ur||d u rti }||d< ||d< d S )NrJ   Ztotal_max_attemptsmax_attemptsrk   )r7   popr   rV   )r   r!   rJ   valueru   r   r   r   rs     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 rDd}||d< d S )NrJ   mode
retry_moder	   r7   r   rV   )r   r!   rJ   ry   r   r   r   rt     s    

z%ClientArgsCreator._compute_retry_modec                 C   s2   | d}|d urd S | jd}|r.||d< d S )Nr9   rz   )r   r!   r9   r   r   r   rS     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   ro     s    
z!ClientArgsCreator._ensure_booleanc              
   C   s   |d u rd S |  |pi }|j}|dv s0|d u r6|}n|}| j||||
||jd}| |r`|ni }|d urr|jnd }t|||||||	|dS )N)r)   rW   )r'   r   r"   rB   client_endpoint_urllegacy_endpoint_url)Zendpoint_ruleset_datarD   r4   builtinsclient_contextr   Zuse_sslZrequested_auth_scheme)rN   rM   *compute_endpoint_resolver_builtin_defaultshostrT   r(   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rNt|sN|ddk}n|ddk}tj|tj|d u rx|dpzdtj|d u r||pd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_ENDPOINTrc   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   6  sd    

z<ClientArgsCreator.compute_endpoint_resolver_builtin_defaults)NNN)N)__name__
__module____qualname__r   rF   r6   rN   rT   rO   rX   r\   r^   r]   rY   rc   re   rd   rZ   rU   rR   rs   rt   rS   ro   r>   r   r   r   r   r   r   <   s4      
cV
	
 >r   )__doc__r8   loggingrl   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_   rf   r   r   r   r   r   <module>   s$   
