o
    "`^h*x                     @   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 dd	lmZmZ eeZd
dgZg dZ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)UserAgentString)ensure_booleanis_s3_accelerate_url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-22   c                   @   s   e Zd Z	d: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 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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 ZdS )<ClientArgsCreatorNc                 C   s>   || _ || _|| _|| _|| _|d u rt | _d S || _d S N)_event_emitter_response_parser_factory_loader_exceptions_factory_config_storer   from_environment_session_ua_creator)selfevent_emitter
user_agentresponse_parser_factoryloaderexceptions_factoryconfig_storeuser_agent_creator r    K/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/botocore/args.py__init__B   s   

zClientArgsCreator.__init__c           #      C   sn  |  |||	||||}|d }|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|}!|r|jnd }"|"|_||||||| j||| j| |!dS )Nservice_nameparameter_validationendpoint_configprotocolconfig_kwargs	s3_configmetadata	partitionsocket_optionsconfigured_endpoint_urlsigning_regionregion_namesigning_namesignature_versions3endpoint_url)
r.   r2   verifyr   max_pool_connectionsproxiestimeoutr+   client_certproxies_config)
serializerendpointresponse_parserr   request_signerservice_modelr   client_configr*   r   endpoint_ruleset_resolverr   r    )compute_client_argsgetcopyr   r   
service_idr   r   create_endpointr   r4   r5   connect_timeoutread_timeoutr7   r8   botocore	serializecreate_serializerparserscreate_parser_build_endpoint_resolverr   with_client_configr   _supplied_user_agentr   r   )#r   r=   r.   	is_securer2   r3   credentialsscoped_configr>   endpoint_bridge
auth_tokenendpoints_ruleset_datapartition_data
final_argsr#   r$   r%   r&   r'   r(   r*   r+   r,   r-   endpoint_region_namer   signer
new_configendpoint_creatorr:   r9   r;   ruleset_resolverclient_ua_creatorsupplied_uar    r    r!   get_client_argsV   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}| j||||||d}|d dg }| j	|
 }t|d	 |d
 |d}d|v r]|jdd d|v rg|jdd |d ur|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|jd | | | | | | | | | |}|  |}|rd|v r|d u ri }d|d< ||
|||	||| !||dS )Nr&   TFr$   )r>   r2   )r#   r.   r2   rO   rR   r(   r)   tagsr.   r0   )r.   r0   r   	dualstack)use_dualstack_endpointfips)use_fips_endpoint)rE   rF   r4   r5   r8   retriesr7   inject_host_prefixtcp_keepaliveuser_agent_extrauser_agent_appid"request_min_compression_size_bytesdisable_request_compressionclient_context_paramssigv4a_signing_region_setra   )r#   r$   r,   r%   r&   r'   r(   r+   )"endpoint_prefixr)   r$   rA   r   compute_s3_config _compute_configured_endpoint_url_compute_endpoint_configr   rM   	to_stringdictupdaterE   rF   r4   r5   r8   rd   r7   re   rf   rg   rh   ri   rj   rk   rl   _compute_retry_config_compute_connect_timeout _compute_user_agent_appid_config#_compute_request_compression_config_is_s3_service_compute_socket_options)r   r=   r>   rR   r.   r2   rO   rQ   r#   r&   r$   	raw_valuer(   r,   r%   endpoint_variant_tagspreliminary_ua_stringr'   is_s3_servicer    r    r!   r@      s   










z%ClientArgsCreator.compute_client_argsc                 C   s0   |d ur|S |  |rtd |S | jdS )Nz"Ignoring configured endpoint URLs.r2   ) _ignore_configured_endpoint_urlsloggerdebugr   get_config_variable)r   r>   r2   r    r    r!   ro   -  s   

z2ClientArgsCreator._compute_configured_endpoint_urlc                 C   s    |r
|j d ur
|j S | jdS )Nignore_configured_endpoint_urls)r   r   r   )r   r>   r    r    r!   r~   7  s   
z2ClientArgsCreator._ignore_configured_endpoint_urlsc                 C   sH   | j d}|d ur"|jd ur"|d u r|j}|S | }||j |S )Nr1   )r   r   r1   rB   rs   )r   r>   s3_configurationr    r    r!   rn   B  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'.
        )r1   z
s3-controlr    )r   r#   r    r    r!   rx   U  s   z ClientArgsCreator._is_s3_servicec                 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.   r2   rO   rR   r1   r(   stsr    )_compute_s3_endpoint_config_compute_sts_endpoint_config_resolve_endpoint)r   r#   r.   r2   rO   rR   r(   resolve_endpoint_kwargsr    r    r!   rp   _  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.   rR   r   r   r    )_should_force_s3_globalr   !_set_region_if_custom_s3_endpoint)r   r(   r   force_s3_globalr%   r    r    r!   r   w  s   z-ClientArgsCreator._compute_s3_endpoint_configc                 C   s6   d}|rd|v r|d }|  | |dv }|dko|S )Nr
   us_east_1_regional_endpoint)r   N)_validate_s3_regional_config)r   r.   r(   s3_regional_configis_global_regionr    r    r!   r     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_CONFIGrG   
exceptions+InvalidS3UsEast1RegionalEndpointConfigError)r   
config_valr    r    r!   r     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.   r1   resolve)r   r%   rR   r:   r    r    r!   r     s   
z3ClientArgsCreator._set_region_if_custom_s3_endpointc                 K   s:   | j di |}| |d |d |r| ||d  |S )Nr.   r2   rO   r    )r   _should_set_global_sts_endpoint_set_global_sts_endpoint)r   r   r%   r    r    r!   r     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
   )rA   "_get_sts_regional_endpoints_configLEGACY_GLOBAL_STS_REGIONS)r   r.   r2   r%   has_variant_tagsr    r    r!   r     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   r   rG   r   &InvalidSTSRegionalEndpointsConfigError)r   r   r    r    r!   r     s   z4ClientArgsCreator._get_sts_regional_endpoints_configc                 C   s&   |rdnd}| d|d< d|d< d S )Nhttpshttpz://sts.amazonaws.comr2   r   r-   r    )r   r%   rO   schemer    r    r!   r     s   z*ClientArgsCreator._set_global_sts_endpointc                 C   s   | ||||S r   r   )r   r#   r.   r2   rO   rR   r    r    r!   r     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   rf   F)	socketIPPROTO_TCPTCP_NODELAYrf   _ensure_booleanrA   append
SOL_SOCKETSO_KEEPALIVE)r   rQ   r>   r+   client_keepalivescoped_keepaliver    r    r!   ry     s   

z)ClientArgsCreator._compute_socket_optionsc                 C   s   |  | | | d S r   )_compute_retry_max_attempts_compute_retry_mode)r   r'   r    r    r!   rt     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 )Nrd   total_max_attemptsmax_attemptsr   )rA   popr   r   )r   r'   rd   valuer   r    r    r!   r     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 )Nrd   mode
retry_moder
   rA   r   r   )r   r'   rd   r   r    r    r!   r     s   

z%ClientArgsCreator._compute_retry_modec                 C   s6   | d}|d urd S | jd}|r||d< d S d S )NrE   r   )r   r'   rE   r    r    r!   ru   !  s   
z*ClientArgsCreator._compute_connect_timeoutc                 C   sd   | d}| d}|d u r| jd}| |}||d< |d u r(| jd}nt|}||d< d S )Nri   rj   )rA   r   r   _validate_min_compression_sizer   )r   r'   min_sizedisabledr    r    r!   rw   .  s   


z5ClientArgsCreator._compute_request_compression_configc              	   C   s   d}d}|d urLd| d}zt |}W n ttfy.   | dt| d}tjj|dw ||  kr9|ksLn | d| d	| d
}tjj|d|S )Nr   i   zInvalid value "z)" for request_min_compression_size_bytes.z$ Value must be an integer. Received z	 instead.)	error_msgz Value must be between z and .)int
ValueError	TypeErrortyperG   r   InvalidConfigError)r   r   min_allowed_min_sizemax_allowed_min_sizeerror_msg_basemsgr    r    r!   r   D  s.   
z0ClientArgsCreator._validate_min_compression_sizec                 C   s   t |tr|S | dkS )Ntrue)
isinstanceboollower)r   valr    r    r!   r   ]  s   
z!ClientArgsCreator._ensure_booleanc              
   C   s   |d u rd S |  |pi }|j}|dv s|d u r|}n|}| j||||
||jd}|d ur3|jp1i }ni }| |r?|| |d urF|jnd }t|||||||	|dS )N)r1   r   )r.   r#   r(   rR   client_endpoint_urllegacy_endpoint_url)endpoint_ruleset_datarU   r=   builtinsclient_contextr   use_sslrequested_auth_scheme)	rn   rm   *compute_endpoint_resolver_builtin_defaultshostrk   rx   rs   r0   r   )r   rT   rU   r>   r=   rW   r.   r2   r:   rO   rR   r   s3_config_rawservice_name_raweprv2_region_nameresolver_builtinsr   sig_versionr    r    r!   rL   c  sD   

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 )Nuse_accelerate_endpointFaddressing_stylevirtualpathrc   )r.   r2   r%   use_arn_regionT$s3_disable_multiregion_access_points)resolver_uses_builtin_datarA   r	   EPRBuiltins
AWS_REGIONAWS_USE_FIPS$_resolve_endpoint_variant_config_varAWS_USE_DUALSTACK_resolve_use_dualstack_endpointAWS_STS_USE_GLOBAL_ENDPOINTr   AWS_S3_USE_GLOBAL_ENDPOINTr   AWS_S3_ACCELERATEAWS_S3_FORCE_PATH_STYLEAWS_S3_USE_ARN_REGIONAWS_S3CONTROL_USE_ARN_REGIONAWS_S3_DISABLE_MRAPSDK_ENDPOINT)	r   r.   r#   r(   rR   r   r   given_endpointforce_path_styler    r    r!   r     sd   

z<ClientArgsCreator.compute_endpoint_resolver_builtin_defaultsc                 C   sP   | d}|d u r| jd}|d ur"t|tkr"tdt d ||d< d S )Nrh   zHThe configured value for user_agent_appid exceeds the maximum length of z characters.)rA   r   r   lenUSERAGENT_APPID_MAXLENr   warning)r   r'   rh   r    r    r!   rv     s   
z2ClientArgsCreator._compute_user_agent_appid_configr   )NNN)__name__
__module____qualname__r"   r^   r@   ro   r~   rn   rx   rp   r   r   r   r   r   r   r   r   r   ry   rt   r   r   ru   rw   r   r   rL   r   rv   r    r    r    r!   r   A   sB    	

kl

	
 @Tr   )__doc__rB   loggingr   botocore.exceptionsrG   botocore.parsersbotocore.serializebotocore.configr   botocore.endpointr   botocore.regionsr   r   r   botocore.signersr   botocore.useragentr   botocore.utilsr   r	   	getLoggerr   r   r   r   r   r   r    r    r    r!   <module>   s*   
