U
    EZh.                     @   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 eeZd
dgZddddddddddddddddgZdZdZdZ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register_feature_id)ensure_booleanis_s3_accelerate_urllegacyZregionalz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)zsmithy-rpc-v2-cborjsonz	rest-jsonzrest-xmlqueryZec2)	preferreddisabledrequiredc                   @   s"  e Zd ZdFddZdGd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dHd&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$dS )IClientArgsCreatorNc                 C   s<   || _ || _|| _|| _|| _|d kr2t | _n|| _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#   T/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/botocore/args.py__init__Z   s    
zClientArgsCreator.__init__c           $      C   sx  |  |||	||||}|d }|d }|d }|d }|d }|d }|d dd }|d	 }|d
 }|d }|d }|d }t| j}t|j||d |d |||
}||d< tf |}t|}|j|||d || j	|j
|j|j|jf||j|jd}tj||}tj|} | ||||||||||	|||}!| j|}"|rL|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_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   r7   r8   connect_timeoutread_timeoutr:   r;   botocore	serializeZcreate_serializerparsersZcreate_parser_build_endpoint_resolverr   with_client_configr   Z_supplied_user_agentr   r   )$r   r?   r1   	is_securer5   r6   credentialsscoped_configr@   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=   r<   r>   Zruleset_resolverZclient_ua_creatorZsupplied_uar#   r#   r$   get_client_argsn   s    



 z!ClientArgsCreator.get_client_argsc                 C   s  |j }| |}	d}
|r$|js$d}
n|rB|d}|d k	rBt|}
| |}| j||d}|d k	rjtd | j||||||d}|d dg }| j	
| }t|d	 |d
 |d}d|kr|jdd d|kr|jdd |d k	r:|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|jd |  | | !| | "| | #| | $| | %| | &| | '|| | |}| (|}|rd|kr|d kri }d|d< ||
|||	||| )||dS )NTFr'   )r@   r5   ZENDPOINT_OVERRIDE)r&   r1   r5   rK   rN   r+   r,   tagsr1   r3   )r1   r3   r   Z	dualstack)use_dualstack_endpointZfips)use_fips_endpoint)rD   rE   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   rT   )r&   r'   r/   r(   r)   r*   r+   r.   )*endpoint_prefix_resolve_protocolr'   rB   r	   compute_s3_config _compute_configured_endpoint_urlr   _compute_endpoint_configr   rJ   Z	to_stringdictupdaterD   rE   r7   r8   r;   rV   r:   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   r2   _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_is_s3_service_compute_socket_options)r   r?   r@   rN   r1   r5   rK   rM   r&   r)   r'   	raw_valuer+   r/   r(   Zendpoint_variant_tagsZpreliminary_ua_stringr*   Zis_s3_servicer#   r#   r$   rA      s    















 z%ClientArgsCreator.compute_client_argsc                 C   s>   |d ks|j dkr:| jd}|d k	r2| |d< nd|d< d S )NZUNSETZdisable_host_prefix_injectionrW   T)Z_inject_host_prefixr   get_config_variable)r   r@   r*   Z(configured_disable_host_prefix_injectionr#   r#   r$   ro   U  s    z-ClientArgsCreator._compute_inject_host_prefixc                 C   s0   |d k	r|S |  |r$td |S | jdS )Nz"Ignoring configured endpoint URLs.r5   ) _ignore_configured_endpoint_urlsloggerdebugr   rs   )r   r@   r5   r#   r#   r$   rd   h  s    

z2ClientArgsCreator._compute_configured_endpoint_urlc                 C   s    |r|j d k	r|j S | jdS )Nignore_configured_endpoint_urls)rw   r   rs   )r   r@   r#   r#   r$   rt   r  s    z2ClientArgsCreator._ignore_configured_endpoint_urlsc                 C   sF   | j d}|d k	rB|jd k	rB|d kr.|j}n| }||j |S )Nr4   )r   rs   r4   rC   rg   )r   r@   Zs3_configurationr#   r#   r$   rc   }  s    
z#ClientArgsCreator.compute_s3_configc                 C   s   |dk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$   rp     s    z ClientArgsCreator._is_s3_servicec                 C   sL   |||||d}|dkr,| j f d|i|S |dkr@| jf |S | jf |S )N)r&   r1   r5   rK   rN   r4   r+   sts)_compute_s3_endpoint_config_compute_sts_endpoint_config_resolve_endpoint)r   r&   r1   r5   rK   rN   r+   resolve_endpoint_kwargsr#   r#   r$   re     s    
z*ClientArgsCreator._compute_endpoint_configc                 K   sT   |  |d |}|rd |d< | jf |}| ||d  |rP|d dkrPd|d< |S )Nr1   rN   r   r   )_should_force_s3_globalr{   !_set_region_if_custom_s3_endpoint)r   r+   r|   Zforce_s3_globalr(   r#   r#   r$   ry     s      z-ClientArgsCreator._compute_s3_endpoint_configc                 C   s6   d}|r"d|kr"|d }|  | |dk}|dko4|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 krtjj|dd S )N)Z%s3_us_east_1_regional_endpoint_config)VALID_REGIONAL_ENDPOINTS_CONFIGrF   
exceptionsZ+InvalidS3UsEast1RegionalEndpointConfigError)r   Z
config_valr#   r#   r$   r     s    z.ClientArgsCreator._validate_s3_regional_configc                 C   s>   |d d kr:|d d kr:| d}|d |d< |d |d< d S )Nr0   r1   r4   resolve)r   r(   rN   r=   r#   r#   r$   r~     s    


z3ClientArgsCreator._set_region_if_custom_s3_endpointc                 K   s6   | j f |}| |d |d |r2| ||d  |S )Nr1   r5   rK   )r{   _should_set_global_sts_endpoint_set_global_sts_endpoint)r   r|   r(   r#   r#   r$   rz     s     z.ClientArgsCreator._compute_sts_endpoint_configc                 C   s6   |o| di  d}|s|r"dS |  dko4|tkS )Nr,   rS   Fr   )rB   "_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kr*tjj|d|S )NZsts_regional_endpointsr   )sts_regional_endpoints_config)r   rs   r   rF   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(   rK   schemer#   r#   r$   r     s    z*ClientArgsCreator._set_global_sts_endpointc                 C   s   | ||||S r   r   )r   r&   r1   r5   rK   rN   r#   r#   r$   r{     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   rX   F)	socketIPPROTO_TCPTCP_NODELAYrX   _ensure_booleanrB   append
SOL_SOCKETSO_KEEPALIVE)r   rM   r@   r.   Zclient_keepaliveZscoped_keepaliver#   r#   r$   rq     s    

z)ClientArgsCreator._compute_socket_optionsc                 C   s   |  | | | d S r   )_compute_retry_max_attempts_compute_retry_moder   r*   r#   r#   r$   rh   *  s    
z'ClientArgsCreator._compute_retry_configc                 C   s   | d}|d k	rLd|kr*|dd  d S d|krL|d}|d |d< d S | jd}|d k	r||d krti }||d< ||d< d S )NrV   Ztotal_max_attemptsmax_attemptsr   )rB   popr   rs   )r   r*   rV   valuer   r#   r#   r$   r   .  s    


z-ClientArgsCreator._compute_retry_max_attemptsc                 C   sP   | d}|d kr i }||d< nd|kr,d S | jd}|d krDd}||d< d S )NrV   mode
retry_moder   rB   r   rs   )r   r*   rV   r   r#   r#   r$   r   N  s    

z%ClientArgsCreator._compute_retry_modec                 C   s2   | d}|d k	rd S | jd}|r.||d< d S )NrD   r   )r   r*   rD   r#   r#   r$   ri   \  s    
z*ClientArgsCreator._compute_connect_timeoutc                 C   sd   | d}| d}|d kr(| jd}| |}||d< |d krP| jd}nt|}||d< d S )Nr[   r\   )rB   r   rs   _validate_min_compression_sizer	   )r   r*   min_sizer   r#   r#   r$   rk   i  s    


z5ClientArgsCreator._compute_request_compression_configc              	   C   s   d}d}d| d}zt |}W n: ttfk
rZ   | dt| d}tjj|dY nX ||  krp|ksn | 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typerF   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 d S )Ntrue)
isinstanceboollower)r   valr#   r#   r$   r     s    
z!ClientArgsCreator._ensure_booleanc              
   C   s   |d krd S |  |pi }|j}|dks0|d kr6|}n|}| j||||
||j||d}|d k	rj|jpfi }ni }| |r|| |d k	r|jnd }t|||||||	|dS )N)r4   rx   )r1   r&   r+   rN   client_endpoint_urllegacy_endpoint_urlrL   r2   )Zendpoint_ruleset_datarP   r?   builtinsclient_contextr   Zuse_sslZrequested_auth_scheme)	rc   ra   *compute_endpoint_resolver_builtin_defaultshostr]   rp   rg   r3   r   )r   rO   rP   r@   r?   rQ   r1   r5   r=   rK   rN   r   rL   r2   Zs3_config_rawZservice_name_rawZeprv2_region_nameZresolver_builtinsr   Zsig_versionr#   r#   r$   rI     sH    

z*ClientArgsCreator._build_endpoint_resolverc	                 C   s  |r
|}	n|  s|}	nd }	|ddr.d}
n.|d k	rNt|sN|ddk}
n|ddk}
tj|tj|	d krx|dpzdtj|	d k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|	tj|r
|dnd tj|iS )NZuse_accelerate_endpointFZaddressing_styleZvirtualpathrU   )r1   r5   r(   Zuse_arn_regionTZ$s3_disable_multiregion_access_pointsZ
account_id)Zresolver_uses_builtin_datarB   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+   rN   r   r   rL   r2   Zgiven_endpointZforce_path_styler#   r#   r$   r     s    
 
           z<ClientArgsCreator.compute_endpoint_resolver_builtin_defaultsc                 C   sP   | d}|d kr| jd}|d k	rDt|tkrDtdt d ||d< d S )NrZ   zHThe configured value for user_agent_appid exceeds the maximum length of z characters.)rB   r   rs   lenUSERAGENT_APPID_MAXLENru   warning)r   r*   rZ   r#   r#   r$   rj   =  s    


z2ClientArgsCreator._compute_user_agent_appid_configc                 C   s*   | d}|d kr| jd}||d< d S )Nr^   r   )r   r*   r^   r#   r#   r$   rl   M  s    z;ClientArgsCreator._compute_sigv4a_signing_region_set_configc                 C   s$   | j |dtd | j |dtd d S )Nr_   )
config_keyvalid_optionsr`   )_handle_checksum_config)VALID_REQUEST_CHECKSUM_CALCULATION_CONFIG)VALID_RESPONSE_CHECKSUM_VALIDATION_CONFIGr   r#   r#   r$   rm   W  s    z*ClientArgsCreator._compute_checksum_configc                 C   sD   |j dr>tD ]}||jkr|  S qtjjt|j|jd|jS )N	protocols)Zbotocore_supported_protocolsZservice_supported_protocolsZservice)	r,   rB   $PRIORITY_ORDERED_SUPPORTED_PROTOCOLSr   rF   r   Z UnsupportedServiceProtocolsErrorr&   r)   )r   r?   r)   r#   r#   r$   rb   c  s    

z#ClientArgsCreator._resolve_protocolc                 C   sV   | |}|d kr| j|}t|tr0| }||krJtjj|||d|||< d S )N)r   Zconfig_valuer   )	rB   r   rs   r   strr   rF   r   ZInvalidChecksumConfigError)r   r*   r   r   r   r#   r#   r$   r   t  s    

z)ClientArgsCreator._handle_checksum_configc                 C   s   d}| d}|tjkr$d||< d S | |}|d krB| j|}t|trT| }|tk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   )rB   rF   ZUNSIGNEDr   rs   r   r   r   %VALID_ACCOUNT_ID_ENDPOINT_MODE_CONFIGr   r   )r   r*   r   r3   r2   r#   r#   r$   rn     s(    



z:ClientArgsCreator._compute_account_id_endpoint_mode_config)N)NNN)N)%__name__
__module____qualname__r%   rR   rA   ro   rd   rt   rc   rp   re   ry   r}   r   r~   rz   r   r   r   r{   rq   rh   r   r   ri   rk   r   r   rI   r   rj   rl   rm   rb   r   rn   r#   r#   r#   r$   r   Y   sL   	 
   
ny

	
 D\
r   )#__doc__rC   loggingr   Zbotocore.exceptionsrF   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
   	getLoggerr   ru   r   r   r   r   r   r   r   r   r#   r#   r#   r$   <module>   sP   
	