
    Pew                         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j.                  e      Zd
dgZg dZdZ G d d      Zy)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                       e Zd Z	 ddZ	 	 	 ddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy) ClientArgsCreatorNc                     || _         || _        || _        || _        || _        |t        j                         | _        y || _        y 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_creators           //usr/lib/python3/dist-packages/botocore/args.py__init__zClientArgsCreator.__init__A   sJ     ,(?%#5 )%'6'G'G'ID$'9D$    c                    | j                  |||	||||      }|d   }|d   }|d   }|d   }|d   }|d   }|d   j                  dd       }|d	   }|d
   }|d   }|d   }t        j                  | j                        }t	        |j
                  ||d   |d   |||
      }||d<   t        di |}t        |      }|j                  |||d   || j                  |j                  |j                  |j                  |j                  f||j                  |j                        }t         j"                  j%                  ||      }t         j&                  j)                  |      }| j+                  ||||||||||	|      } | j,                  j/                  |      }!|r|j0                  nd }"|"|_        ||||||| j4                  ||| j6                  | |!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)
r2   r6   verifyr   max_pool_connectionsproxiestimeoutr/   client_certproxies_config)
serializerendpointresponse_parserr   request_signerservice_modelr   client_configr.   r    endpoint_ruleset_resolverr"    )compute_client_argsgetcopyr   r   
service_idr   r   create_endpointr   r8   r9   connect_timeoutread_timeoutr;   r<   botocore	serializecreate_serializerparserscreate_parser_build_endpoint_resolverr   with_client_configr   _supplied_user_agentr   r   )#r   rA   r2   	is_securer6   r7   credentialsscoped_configrB   endpoint_bridge
auth_tokenendpoints_ruleset_datapartition_data
final_argsr'   r(   r)   r*   r+   r,   r.   r/   r0   r1   endpoint_region_namer   signer
new_configendpoint_creatorr>   r=   r?   ruleset_resolverclient_ua_creatorsupplied_uas#                                      r#   get_client_argsz!ClientArgsCreator.get_client_argsU   sX    --

 ".1)*@A$%67j)"?3{+	#J/33KF	#$45",-F"G()9:.}=		$"5"56$$N+/0
 (d,m,
*=9#33,(8$($A$A!+!@!@&&//1H1HI)"..%44 4 
 ''99*

 #**88B88" #
 !44GG
 3@m..T*5
' % .*$*ll'""&":":)9"3
 	
r%   c                    |j                   }|j                  d   }	d}
|r|j                  sd}
n |r|j                  d      }|t	        |      }
| j                  |      }| j                  ||      }| j                  ||||||      }|d   j                  dg       }| j                  j                  |      j                         }t        |d	   |d
   |      }d|v r|j                  d       d|v r|j                  d       ||j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |j0                  |j2                  |j4                         | j7                  |       | j9                  |       | j;                  |       | j=                  |       | j                  |      }| j?                  |      }|rd|v r	|i }d|d<   ||
|||	||| jA                  ||      dS )Nr*   TFr(   )rB   r6   )r'   r2   r6   rT   rW   r,   r-   tagsr2   r4   )r2   r4   r   	dualstack)use_dualstack_endpointfips)use_fips_endpoint)rJ   rK   r8   r9   r<   retriesr;   inject_host_prefixtcp_keepaliveuser_agent_extrauser_agent_appid"request_min_compression_size_bytesdisable_request_compressionclient_context_paramsrg   )r'   r(   r0   r)   r*   r+   r,   r/   )!endpoint_prefixr-   r(   rF   r	   compute_s3_config _compute_configured_endpoint_url_compute_endpoint_configr   rR   	to_stringdictupdaterJ   rK   r8   r9   r<   rj   r;   rk   rl   rm   rn   ro   rp   rq   _compute_retry_config_compute_connect_timeout _compute_user_agent_appid_config#_compute_request_compression_config_is_s3_service_compute_socket_options)r   rA   rB   rW   r2   r6   rT   rV   r'   r*   r(   	raw_valuer,   r0   r)   endpoint_variant_tagspreliminary_ua_stringr+   is_s3_services                      r#   rE   z%ClientArgsCreator.compute_client_args   s    %44 ))*5#!C!C#( %))*@AI$'5i'@$**=9	"&"G"G'% #H #

 77%#0+ 8 
 !0
 ; ? ? K !% 8 8 K K!

)+ 	 '6-.AB,

 //   =**  4 8$   - = =*77%2%G%G%--,;;%--)55#0#C#C+99!.!?!?!.!?!?!DD "==&3&I&I% ! ( 	""=1%%m4--m<00?**=9	++L9[,AA 	26I./ )$8'>. *""::}
 	
r%   c                     ||S | j                  |      rt        j                  d       |S | j                  j	                  d      S )Nz"Ignoring configured endpoint URLs.r6   ) _ignore_configured_endpoint_urlsloggerdebugr   get_config_variable)r   rB   r6   s      r#   rt   z2ClientArgsCreator._compute_configured_endpoint_url)  sF    #00?LL=>!!55nEEr%   c                 l    |r|j                   |j                   S | j                  j                  d      S )Nignore_configured_endpoint_urls)r   r   r   )r   rB   s     r#   r   z2ClientArgsCreator._ignore_configured_endpoint_urls3  s9    ==I @@@!!55-
 	
r%   c                     | j                   j                  d      }|G|j                  ;||j                  }|S |j                         }|j	                  |j                         |S )Nr5   )r   r   r5   rG   rx   )r   rB   s3_configurations      r#   rs   z#ClientArgsCreator.compute_s3_config>  sr    --AA$G $+#+'4'7'7$   (8'<'<'>$$++M,<,<=r%   c                 
    |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'.
        )r5   z
s3-controlrD   )r   r'   s     r#   r}   z ClientArgsCreator._is_s3_serviceQ  s     333r%   c                     |||||d}|dk(  r | j                   dd|i|S |dk(  r | j                  di |S  | j                  di |S )N)r'   r2   r6   rT   rW   r5   r,   stsrD   )_compute_s3_endpoint_config_compute_sts_endpoint_config_resolve_endpoint)r   r'   r2   r6   rT   rW   r,   resolve_endpoint_kwargss           r#   ru   z*ClientArgsCreator._compute_endpoint_config[  s     )&(".#
 43433 #'>  5 4444O7NOO%t%%@(?@@r%   c                     | j                  |d   |      }|rd |d<    | j                  di |}| j                  ||d          |r|d   dk(  rd|d<   |S )Nr2   rW   r   r   rD   )_should_force_s3_globalr   !_set_region_if_custom_s3_endpoint)r   r,   r   force_s3_globalr)   s        r#   r   z-ClientArgsCreator._compute_s3_endpoint_configs  s     66#M2I
 59#M20$00K3JK..45FG	
 }=M-8OM*r%   c                 X    d}|rd|v r|d   }| j                  |       |dv }|dk(  xr |S )Nr   us_east_1_regional_endpoint)r   N)_validate_s3_regional_config)r   r2   r,   s3_regional_configis_global_regions        r#   r   z)ClientArgsCreator._should_force_s3_global  sK    %6)C!*+H!I--.@A&*==!X-B2BBr%   c                 T    |t         vr t        j                  j                  |      y )N)%s3_us_east_1_regional_endpoint_config)VALID_REGIONAL_ENDPOINTS_CONFIGrL   
exceptions+InvalidS3UsEast1RegionalEndpointConfigError)r   
config_vals     r#   r   z.ClientArgsCreator._validate_s3_regional_config  s2    <<%%QQ6@ R   =r%   c                 ^    |d   (|d   "|j                  d      }|d   |d<   |d   |d<   y y y )Nr1   r2   r5   resolve)r   r)   rW   r>   s       r#   r   z3ClientArgsCreator._set_region_if_custom_s3_endpoint  sU     ,-5.6&..t4H089I0JO,--5m-DOM*	 7 6r%   c                      | j                   di |}| j                  |d   |d   |      r| j                  ||d          |S )Nr2   r6   rT   rD   )r   _should_set_global_sts_endpoint_set_global_sts_endpoint)r   r   r)   s      r#   r   z.ClientArgsCreator._compute_sts_endpoint_config  s\    0$00K3JK//#M2#N3

 ))!8!E r%   c                     |xr! |j                  di       j                  d      }|s|ry| j                         dk(  xr |t        v S )Nr-   re   Fr   )rF   "_get_sts_regional_endpoints_configLEGACY_GLOBAL_STS_REGIONS)r   r2   r6   r)   has_variant_tagss        r#   r   z1ClientArgsCreator._should_set_global_sts_endpoint  s[     + /B/B0

#f+ 	 +335A 988	
r%   c                     | j                   j                  d      }|sd}|t        vr t        j                  j                  |      |S )Nsts_regional_endpointsr   )sts_regional_endpoints_config)r   r   r   rL   r   &InvalidSTSRegionalEndpointsConfigError)r   r   s     r#   r   z4ClientArgsCreator._get_sts_regional_endpoints_config  s^    (,(:(:(N(N$)
% -,4))23 %%LL.K M   -,r%   c                 *    |rdnd}d|z  |d<   d|d<   y )Nhttpshttpz%s://sts.amazonaws.comr6   r   r1   rD   )r   r)   rT   schemes       r#   r   z*ClientArgsCreator._set_global_sts_endpoint  s%    %6*BV*K',7()r%   c                 *    |j                  ||||      S r   r   )r   r'   r2   r6   rT   rW   s         r#   r   z#ClientArgsCreator._resolve_endpoint  s      &&+|Y
 	
r%   c                    t         j                  t         j                  dfg}|xr |j                  }|xr! | j	                  |j                  dd            }|s|r0|j                  t         j                  t         j                  df       |S )N   rl   F)	socketIPPROTO_TCPTCP_NODELAYrl   _ensure_booleanrF   append
SOL_SOCKETSO_KEEPALIVE)r   rV   rB   r/   client_keepalivescoped_keepalives         r#   r~   z)ClientArgsCreator._compute_socket_options  s     "--v/A/A1EF(H]-H-H( 
T-A-Aou5.
 /!!6#4#4f6I6I1"MNr%   c                 H    | j                  |       | j                  |       y r   )_compute_retry_max_attempts_compute_retry_mode)r   r+   s     r#   ry   z'ClientArgsCreator._compute_retry_config  s    ((7  /r%   c                     |j                  d      }|5d|v r|j                  dd        y d|v r|j                  d      }|dz   |d<   y | j                  j                  d      }||i }||d<   ||d<   y y )Nrj   total_max_attemptsmax_attemptsr   )rF   popr   r   )r   r+   rj   valuer   s        r#   r   z-ClientArgsCreator._compute_retry_max_attempts  s      ##I.#w.ND1(N3 16	,- ))==nM#+2i(,8G()	 $r%   c                     |j                  d      }|i }||d<   nd|v ry | j                  j                  d      }|d}||d<   y )Nrj   mode
retry_moder   rF   r   r   )r   r+   rj   r   s       r#   r   z%ClientArgsCreator._compute_retry_mode  s]    ##I.?G'.M)$w '';;LI
!J$r%   c                 r    |j                  d      }|y | j                  j                  d      }|r||d<   y y )NrJ   r   )r   r+   rJ   s      r#   rz   z*ClientArgsCreator._compute_connect_timeout  sL     (++,=>&,,@@
 />M+, r%   c                 
   |j                  d      }|j                  d      }|| j                  j                  d      }| j                  |      }||d<   || j                  j                  d      }nt	        |      }||d<   y )Nro   rp   )rF   r   r   _validate_min_compression_sizer	   )r   r+   min_sizedisableds       r#   r|   z5ClientArgsCreator._compute_request_compression_config*  s     $$%IJ $$%BC))==4H 66x@>F:;))==-H
 &h/H7?34r%   c                 .   d}d}|Jd| d}	 t        |      }||cxk  r|k  s-n | d| d	| d
}t        j
                  j                  |      |S # t        t        f$ r2 | dt        |       d}t        j
                  j                  |      w xY w)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typerL   r   InvalidConfigError)r   r   min_allowed_min_sizemax_allowed_min_sizeerror_msg_basemsgs         r#   r   z0ClientArgsCreator._validate_min_compression_size@  s     &!( ,6 6 Lx= (8K7KK%&&=+,E2F1GqJ  ))<<s<KK 	* L%& '  $X/y:  ))<<s<KKLs   A ABc                 L    t        |t              r|S |j                         dk(  S )Ntrue)
isinstanceboollower)r   vals     r#   r   z!ClientArgsCreator._ensure_booleanY  s"    c4 J99;&((r%   c           
      V   |y | j                  |      xs i }|j                  }|dv s||}n|}| j                  ||||
||j                        }||j                  xs i }ni }| j                  |      r|j                  |       ||j                  nd }t        |||||||	|      S )N)r5   r   )r2   r'   r,   rW   client_endpoint_urllegacy_endpoint_url)endpoint_ruleset_datarZ   rA   builtinsclient_contextr   use_sslrequested_auth_scheme)	rs   rr   *compute_endpoint_resolver_builtin_defaultshostrq   r}   rx   r4   r   )r   rY   rZ   rB   rA   r\   r2   r6   r>   rT   rW   r   s3_config_rawservice_name_raweprv2_region_nameresolver_builtinsr   sig_versions                     r#   rQ   z*ClientArgsCreator._build_endpoint_resolver_  s     ") ..}=C(88 },0C 4 + KK))#+ , ( L 
 $*@@FBNN/0!!-0 ( ++ 	
 '"8)'&)'"-	
 		
r%   c                 X   |r|}n|j                         s|}nd }|j                  dd      rd}n6| t        |      s|j                  d      dk7  }n|j                  d      dk(  }t        j                  |t        j
                  |d u xr |j                  d      xs dt        j                  |d u xr |j                  |      xs dt        j                  | j                  |d d       t        j                  | j                  ||      t        j                  |j                  dd      t        j                  |t        j                  |j                  dd	      t        j                   |j                  dd      t        j"                  |j                  d
d      t        j$                  |iS )Nuse_accelerate_endpointFaddressing_stylevirtualpathri   )r2   r6   r)   use_arn_regionT$s3_disable_multiregion_access_points)resolver_uses_builtin_datarF   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   r2   r'   r,   rW   r   r   given_endpointforce_path_styles	            r#   r   z<ClientArgsCreator.compute_endpoint_resolver_builtin_defaults  s    0N !;;=0N!N ==2E:$ ,5I6
  )}}-?@IM(}}-?@FJ ""K$$$&  $HH' ))$&  $CC  3344 +!%$( 5  22,,[)D))9==)5, //1A--y}} $0 44imm %7 ++Y]]6. $$n[.
 .	
r%   c                     |j                  d      }|| j                  j                  d      }|/t        |      t        kD  rt
        j                  dt         d       ||d<   y )Nrn   zHThe configured value for user_agent_appid exceeds the maximum length of z characters.)rF   r   r   lenUSERAGENT_APPID_MAXLENr   warning)r   r+   rn   s      r#   r{   z2ClientArgsCreator._compute_user_agent_appid_config  sw    (,,-?@##11EE"  ($%(>>NN%%;$<LJ -=()r%   r   )NNN)__name__
__module____qualname__r$   rc   rE   rt   r   rs   r}   ru   r   r   r   r   r   r   r   r   r   r~   ry   r   r   rz   r|   r   r   rQ   r   r{   rD   r%   r#   r   r   @   s      :> #i
Vg
RF	
 &4A0*CE

-8


09@%?@,2)>
@R
h=r%   r   )__doc__rG   loggingr   botocore.exceptionsrL   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   rD   r%   r#   <module>r     sq          " - D 4 * . ?			8	$ #  (  A= A=r%   