o
    ic                     @   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 dd	lmZmZmZ eeZd
dgZg dZdZdZdZ dZ!G dd dZ"G dd dZ#G dd de$e#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register_feature_id)$PRIORITY_ORDERED_SUPPORTED_PROTOCOLS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   )Zwhen_supportedZwhen_required)	preferreddisabledrequiredc                   @   s:  e Zd Z	dJddZ			dKd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dJd&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:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dS )LClientArgsCreatorNc                 C   s>   || _ || _|| _|| _|| _|d u rt | _d S || _d S N)_event_emitter_response_parser_factory_loader_exceptions_factory_config_storer   Zfrom_environment_session_ua_creator)selfevent_emitter
user_agentresponse_parser_factoryloaderexceptions_factoryZconfig_storeuser_agent_creator r#   D/home/app/Keep/.python/lib/python3.10/site-packages/botocore/args.py__init__V   s   

zClientArgsCreator.__init__c           &      C   s  |  |||	||||}|d }|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}d| }dtjji} |j|||| d tjj||| d d}!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account_id_endpoint_modeZsigning_namesignature_versions3endpoint_url)
r1   r5   verifyr   max_pool_connectionsproxiestimeoutr.   client_certproxies_configzcreating-serializer.timestamp_precision)Zprotocol_nameservice_modelserializer_kwargs)r<   )
serializerendpointresponse_parserr   Zrequest_signerr=   r    client_configr-   r!   Zendpoint_ruleset_resolverr"   r#   )compute_client_argsgetcopyr   r   Z
service_idr   r   Zcreate_endpointr   r7   r8   connect_timeoutread_timeoutr:   r;   botocore	serializeZTIMESTAMP_PRECISION_DEFAULTemitZcreate_serializerparsersZcreate_parser_build_endpoint_resolverr   with_client_configr   Z_supplied_user_agentr   r   )&r   r=   r1   	is_securer5   r6   credentialsscoped_configrB   endpoint_bridgeZ
auth_tokenendpoints_ruleset_datapartition_dataZ
final_argsr&   r'   r(   r)   r*   r+   r-   r.   r/   r0   endpoint_region_namer2   r   ZsignerZ
new_configZendpoint_creatorr@   Z
event_namer>   r?   rA   Zruleset_resolverZclient_ua_creatorZsupplied_uar#   r#   r$   get_client_argsj   s   



z!ClientArgsCreator.get_client_argsc                 C   sH  |j }|j}	d}
|r|jsd}
n|r|d}|d urt|}
| |}| j||d}|d ur3td | j||||||d}|d dg }| j	
| }t|d	 |d
 |d}d|v rc|jdd d|v rm|jdd |d ur|jd%i d|jd|jd|jd|jd|jd|jd|jd|jd|jd|jd|jd|jd|jd|jd|jd|jd |jd!|jd"|j  | !| | "| | #| | $| | %| | &| | '| | (|| | )|| | *|| | |}| +|}|rd|v r|d u ri }d|d#< ||
|||	||| ,||d$S )&NTFr'   )rB   r5   ZENDPOINT_OVERRIDE)r&   r1   r5   rN   rQ   r+   r,   tagsr1   r3   )r1   r3   r   Z	dualstack)use_dualstack_endpointZfips)use_fips_endpointrF   rG   r7   r8   r;   retriesr:   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_setrequest_checksum_calculationresponse_checksum_validationr2   auth_scheme_preferencerW   )r&   r'   r/   r(   r)   r*   r+   r.   r#   )-endpoint_prefixZresolved_protocolr'   rD   r
   compute_s3_config _compute_configured_endpoint_urlr   _compute_endpoint_configr   rM   Z	to_stringdictupdaterF   rG   r7   r8   r;   rY   r:   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r2   rd   _compute_retry_config_compute_connect_timeout _compute_user_agent_appid_config#_compute_request_compression_config)_compute_sigv4a_signing_region_set_config_compute_checksum_config(_compute_account_id_endpoint_mode_config_compute_inject_host_prefix&_compute_auth_scheme_preference_config!_compute_signature_version_config_is_s3_service_compute_socket_options)r   r=   rB   rQ   r1   r5   rN   rP   r&   r)   r'   Z	raw_valuer+   r/   r(   Zendpoint_variant_tagsZpreliminary_ua_stringr*   Zis_s3_servicer#   r#   r$   rC      s   




	










z%ClientArgsCreator.compute_client_argsc                 C   sD   |d u s	|j dkr | jd}|d ur| |d< d S d|d< d S d S )NZUNSETZdisable_host_prefix_injectionrZ   T)Z_inject_host_prefixr   get_config_variable)r   rB   r*   Z(configured_disable_host_prefix_injectionr#   r#   r$   rr   d  s   
z-ClientArgsCreator._compute_inject_host_prefixc                 C   s0   |d ur|S |  |rtd |S | jdS )Nz"Ignoring configured endpoint URLs.r5   ) _ignore_configured_endpoint_urlsloggerdebugr   rw   )r   rB   r5   r#   r#   r$   rg   w  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   rw   )r   rB   r#   r#   r$   rx     s   
z2ClientArgsCreator._ignore_configured_endpoint_urlsc                 C   sH   | j d}|d ur"|jd ur"|d u r|j}|S | }||j |S )Nr4   )r   rw   r4   rE   rj   )r   rB   Zs3_configurationr#   r#   r$   rf     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'.
        )r4   z
s3-controlr#   )r   r&   r#   r#   r$   ru     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&   r1   r5   rN   rQ   r4   r+   stsr#   )_compute_s3_endpoint_config_compute_sts_endpoint_config_resolve_endpoint)r   r&   r1   r5   rN   rQ   r+   resolve_endpoint_kwargsr#   r#   r$   rh     s   
z*ClientArgsCreator._compute_endpoint_configc                 K   sX   |  |d |}|rd |d< | jdi |}| ||d  |r*|d dkr*d|d< |S )Nr1   rQ   r   r   r#   )_should_force_s3_globalr   !_set_region_if_custom_s3_endpoint)r   r+   r   Zforce_s3_globalr(   r#   r#   r$   r}     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   r1   r+   Zs3_regional_configZ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)Z%s3_us_east_1_regional_endpoint_config)VALID_REGIONAL_ENDPOINTS_CONFIGrH   
exceptionsZ+InvalidS3UsEast1RegionalEndpointConfigError)r   Z
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 )Nr0   r1   r4   resolve)r   r(   rQ   r@   r#   r#   r$   r     s   
z3ClientArgsCreator._set_region_if_custom_s3_endpointc                 K   s:   | j di |}| |d |d |r| ||d  |S )Nr1   r5   rN   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,   rV   Fr   )rD   "_get_sts_regional_endpoints_configLEGACY_GLOBAL_STS_REGIONS)r   r1   r5   r(   Z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 )NZsts_regional_endpointsr   )sts_regional_endpoints_config)r   rw   r   rH   r   Z&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.comr5   r   r0   r#   )r   r(   rN   schemer#   r#   r$   r     s   z*ClientArgsCreator._set_global_sts_endpointc                 C   s   | ||||S r   r   )r   r&   r1   r5   rN   rQ   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   r[   F)	socketIPPROTO_TCPTCP_NODELAYr[   _ensure_booleanrD   append
SOL_SOCKETSO_KEEPALIVE)r   rP   rB   r.   Zclient_keepaliveZscoped_keepaliver#   r#   r$   rv   ,  s   

z)ClientArgsCreator._compute_socket_optionsc                 C   s   |  | | | d S r   )_compute_retry_max_attempts_compute_retry_moder   r*   r#   r#   r$   rk   9  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 )NrY   Ztotal_max_attemptsmax_attemptsr   )rD   popr   rw   )r   r*   rY   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 )NrY   mode
retry_moder   rD   r   rw   )r   r*   rY   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 )NrF   r   )r   r*   rF   r#   r#   r$   rl   k  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 )Nr^   r_   )rD   r   rw   _validate_min_compression_sizer
   )r   r*   min_sizer   r#   r#   r$   rn   x  s   


z5ClientArgsCreator._compute_request_compression_configc              	   C   s   d}d}d| d}zt |}W n ttfy*   | dt| d}tjj|dw ||  kr5|ksHn | 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typerH   r   InvalidConfigError)r   r   Zmin_allowed_min_sizeZmax_allowed_min_sizeZerror_msg_basemsgr#   r#   r$   r     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r5|jp3i }ni }| |rA|| |d urH|jnd }t|||||||	|dS )N)r4   r|   )r1   r&   r+   rQ   client_endpoint_urllegacy_endpoint_urlrO   r2   )Zendpoint_ruleset_datarS   r=   builtinsclient_contextr   Zuse_sslZrequested_auth_scheme)	rf   re   *compute_endpoint_resolver_builtin_defaultshostr`   ru   rj   r3   r   )r   rR   rS   rB   r=   rT   r1   r5   r@   rN   rQ   r   rO   r2   Zs3_config_rawZservice_name_rawZeprv2_region_nameZresolver_builtinsr   Zsig_versionr#   r#   r$   rL     sH   

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|	tj|r|dnd tj|iS )NZuse_accelerate_endpointFZaddressing_styleZvirtualpathrX   )r1   r5   r(   Zuse_arn_regionTZ$s3_disable_multiregion_access_pointsZ
account_id)Zresolver_uses_builtin_datarD   r   EPRBuiltinsZ
AWS_REGIONZAWS_USE_FIPSZ$_resolve_endpoint_variant_config_varZAWS_USE_DUALSTACKZ_resolve_use_dualstack_endpointZAWS_STS_USE_GLOBAL_ENDPOINTr   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_ENDPOINTZ
ACCOUNT_IDZget_deferred_propertyZACCOUNT_ID_ENDPOINT_MODE)r   r1   r&   r+   rQ   r   r   rO   r2   Zgiven_endpointZforce_path_styler#   r#   r$   r     sr   

z<ClientArgsCreator.compute_endpoint_resolver_builtin_defaultsc                 C   sJ   | d}|d u r| jd}|d urt|tkrtdt ||d< d S )Nr]   zVThe configured value for user_agent_appid exceeds the maximum length of %d characters.)rD   r   rw   lenUSERAGENT_APPID_MAXLENry   warning)r   r*   r]   r#   r#   r$   rm   L  s   
z2ClientArgsCreator._compute_user_agent_appid_configc                 C   s*   | d}|d u r| jd}||d< d S )Nra   r   )r   r*   ra   r#   r#   r$   ro   ]  s   z;ClientArgsCreator._compute_sigv4a_signing_region_set_configc                 C   s$   | j |dtd | j |dtd d S )Nrb   )
config_keyvalid_optionsrc   )_handle_checksum_config)VALID_REQUEST_CHECKSUM_CALCULATION_CONFIG)VALID_RESPONSE_CHECKSUM_VALIDATION_CONFIGr   r#   r#   r$   rp   g  s   
z*ClientArgsCreator._compute_checksum_configc                 C   sb   | |}|d u r| j|}t|tr| }||vr%tjj|||d| 	|| |||< d S )N)r   Zconfig_valuer   )
rD   r   rw   r   strr   rH   r   ZInvalidChecksumConfigError%_register_checksum_config_feature_ids)r   r*   r   r   r   r#   r#   r$   r   s  s   

z)ClientArgsCreator._handle_checksum_configc                 C   sJ   d }|dkrd|   }n|dkrd|   }|d ur#t| d S d S )Nrb   ZFLEXIBLE_CHECKSUMS_REQ_rc   ZFLEXIBLE_CHECKSUMS_RES_)upperr   )r   r   r   Zchecksum_config_feature_idr#   r#   r$   r     s   z7ClientArgsCreator._register_checksum_config_feature_idsc                 C   s   d}| d}|tju rd||< d S | |}|d u r!| j|}t|tr*| }|tvr?tj	j
d| d| dt dd|||< d S )	Nr2   r3   r   zThe configured value 'z' for 'z ' is invalid. Valid values are: r   r   )rD   rH   ZUNSIGNEDr   rw   r   r   r   %VALID_ACCOUNT_ID_ENDPOINT_MODE_CONFIGr   r   )r   r*   r   r3   r2   r#   r#   r$   rq     s*   



z:ClientArgsCreator._compute_account_id_endpoint_mode_configc                 C   s   d}d}|r|j r|j }d}n| j|}|d u rd ||< d S t|ts6tjj| dt| d| ddd	d	d
 |
dD }|rIt|}|||< d S )Nrd   FTz, must be a comma-delimited string. Received z
 instead: r   r   ,c                 s   s,    | ]}|  r|d dddV  qdS )  	N)stripreplace).0itemr#   r#   r$   	<genexpr>  s    
zKClientArgsCreator._compute_auth_scheme_preference_config.<locals>.<genexpr>)rd   r   rw   r   r   rH   r   r   r   joinsplitClientConfigString)r   rB   r*   r   Zset_in_config_objectr   r#   r#   r$   rs     s.   


z8ClientArgsCreator._compute_auth_scheme_preference_configc                 C   s6   |r|j r|j }t|trt||d< d S d S d S d S )Nr3   )r3   r   r   r   )r   rB   r*   r   r#   r#   r$   rt     s   

z3ClientArgsCreator._compute_signature_version_configr   )NNN)'__name__
__module____qualname__r%   rU   rC   rr   rg   rx   rf   ru   rh   r}   r   r   r   r~   r   r   r   r   rv   rk   r   r   rl   rn   r   r   rL   r   rm   ro   rp   r   r   rq   rs   rt   r#   r#   r#   r$   r   U   sR    	

|~

	
 D\
#r   c                   @   s   e Zd ZdZdS )ConfigObjectWrapperz8Base class to mark values set via in-code Config object.N)r   r   r   __doc__r#   r#   r#   r$   r     s    r   c                       s   e Zd Zd fdd	Z  ZS )r   Nc                    s   t  | |S r   )super__new__)clsr   	__class__r#   r$   r     s   zClientConfigString.__new__r   )r   r   r   r   __classcell__r#   r#   r   r$   r     s    r   )&r   rE   loggingr   Zbotocore.exceptionsrH   Zbotocore.parsersZbotocore.serializeZbotocore.configr   Zbotocore.endpointr   Zbotocore.regionsr   r   r   Zbotocore.signersr   Zbotocore.useragentr   r   Zbotocore.utilsr	   r
   r   	getLoggerr   ry   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r$   <module>   sB   
       