
    ]g.                         S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJrJr  \R0                  " \5      rS
S/r/ SQrSrSrSrSr Sr! " S S5      r"g)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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   )when_supportedwhen_required)zsmithy-rpc-v2-cborjsonz	rest-jsonzrest-xmlqueryec2)	preferreddisabledrequiredc                       \ rS rSr S&S jr   S'S jrS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS&S jrS rS rS rS rS rS rS rS rS rS r S  r!S! r"S" r#S# r$S$ r%S%r&g)(ClientArgsCreatorY   Nc                     Xl         X0l        X@l        XPl        X`l        Uc  [
        R                  " 5       U l        g Xpl        g 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__ClientArgsCreator.__init__Z   s>     ,(?%#5 )%'6'G'G'ID$'9$    c                    U R                  UUU	UUUU5      nUS   nUS   nUS   nUS   nUS   nUS   nUS   R                  SS 5      nUS	   nUS
   nUS   nUS   nUS   n[        R                  " U R                  5      n[	        UR
                  UUS   US   UUU
5      nUUS'   [        S0 UD6n[        U5      nUR                  UUUS   UU R                  UR                  UR                  UR                  UR                  4UUR                  UR                  S9n[         R"                  R%                  UU5      n[         R&                  R)                  U5      n U R+                  UUUUUUUUUU	UUU5      n!U R,                  R/                  U5      n"U(       a  UR0                  OS n#U#Ul        UUU UUUU R4                  UUU R6                  U!U"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_modesigning_namesignature_versions3endpoint_url)
r=   rB   verifyr(   max_pool_connectionsproxiestimeoutr:   client_certproxies_config)
serializerendpointresponse_parserr&   request_signerservice_modelr)   client_configr9   r*   endpoint_ruleset_resolverr,    )compute_client_argsgetcopyr   r   
service_idr   r   create_endpointr   rD   rE   connect_timeoutread_timeoutrG   rH   botocore	serializecreate_serializerparserscreate_parser_build_endpoint_resolverr$   with_client_configr'   _supplied_user_agentr    r!   )$r%   rM   r=   	is_securerB   rC   credentialsscoped_configrN   endpoint_bridge
auth_tokenendpoints_ruleset_datapartition_data
final_argsr2   r3   r4   r5   r6   r7   r9   r:   r;   r<   endpoint_region_namer>   r&   signer
new_configendpoint_creatorrJ   rI   rK   ruleset_resolverclient_ua_creatorsupplied_uas$                                       r-   get_client_args!ClientArgsCreator.get_client_argsn   sj    --

 ".1)*@A$%67j)"?3{+	#J/33KF	#$45",-F"G()9:.}=#01K#L 		$"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
 	
r0   c                    UR                   nU R                  U5      n	Sn
U(       a  UR                  (       d  Sn
O&U(       a  UR                  S5      nUb  [	        U5      n
U R                  U5      nU R                  UUS9nUb  [        S5        U R                  UUUUUUS9nUS   R                  S/ 5      nU R                  R                  U5      R                  5       n[        US	   US
   US9nSU;   a  UR                  SS9  SU;   a  UR                  SS9  Ub  UR                  UR                  UR                  UR                   UR"                  UR$                  UR&                  UR(                  UR*                  UR,                  UR.                  UR0                  UR2                  UR4                  UR6                  UR8                  UR:                  UR<                  UR>                  S9  U RA                  U5        U RC                  U5        U RE                  U5        U RG                  U5        U RI                  U5        U RK                  U5        U RM                  U5        U RO                  UU5        U R                  U5      nU RQ                  U5      nU(       a  SU;   a
  Uc  0 nSUS'   UU
UUU	UUU RS                  Xr5      S.$ )NTFr3   )rN   rB   ENDPOINT_OVERRIDE)r2   r=   rB   r`   rc   r7   r8   tagsr=   r@   )r=   r@   r'   	dualstack)use_dualstack_endpointfips)use_fips_endpoint)rV   rW   rD   rE   rH   retriesrG   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_validationr>   ru   )r2   r3   r;   r4   r5   r6   r7   r:   )*endpoint_prefix_resolve_protocolr3   rR   r
   compute_s3_config _compute_configured_endpoint_urlr	   _compute_endpoint_configr$   r^   	to_stringdictupdaterV   rW   rD   rE   rH   rx   rG   ry   rz   r{   r|   r}   r~   r   r   r   r   r>   _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%   rM   rN   rc   r=   rB   r`   rb   r2   r5   r3   	raw_valuer7   r;   r4   endpoint_variant_tagspreliminary_ua_stringr6   is_s3_services                      r-   rQ   %ClientArgsCreator.compute_client_args   s    %44))-8#!C!C#( %))*@AI$'5i'@$**=9	"&"G"G'% #H #
 #. 34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!;; ">> ">>)6)O)O9 ! < 	""=1%%m4--m<00?66}E%%m455mD((F**=9	++L9[,AA 	26I./ )$8'>. *""::
 	
r0   c                     Ub  UR                   S:X  a/  U R                  R                  S5      nUb  U(       + US'   g SUS'   g g )NUNSETdisable_host_prefix_injectionry   T)_inject_host_prefixr"   get_config_variable)r%   rN   r6   (configured_disable_host_prefix_injections       r-   r   -ClientArgsCreator._compute_inject_host_prefixU  sf     !00G; ""663 5
 8C A@ ( 7;23 <r0   c                     Ub  U$ U R                  U5      (       a  [        R                  S5        U$ U R                  R	                  S5      $ )Nz"Ignoring configured endpoint URLs.rB   ) _ignore_configured_endpoint_urlsloggerdebugr"   r   )r%   rN   rB   s      r-   r   2ClientArgsCreator._compute_configured_endpoint_urlh  sI    #00??LL=>!!55nEEr0   c                 x    U(       a  UR                   b  UR                   $ U R                  R                  S5      $ )Nignore_configured_endpoint_urls)r   r"   r   )r%   rN   s     r-   r   2ClientArgsCreator._ignore_configured_endpoint_urlsr  s9    ==I @@@!!55-
 	
r0   c                     U R                   R                  S5      nUbI  UR                  b<  Uc  UR                  nU$ UR                  5       nUR	                  UR                  5        U$ )NrA   )r"   r   rA   rS   r   )r%   rN   s3_configurations      r-   r   #ClientArgsCreator.compute_s3_config}  sr    --AA$G $+#+'4'7'7$   (8'<'<'>$$++M,<,<=r0   c                     U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'.
)rA   z
s3-controlrP   )r%   r2   s     r-   r    ClientArgsCreator._is_s3_service  s     333r0   c                     UUUUUS.nUS:X  a  U R                   " SSU0UD6$ US:X  a  U R                  " S0 UD6$ U R                  " S0 UD6$ )N)r2   r=   rB   r`   rc   rA   r7   stsrP   )_compute_s3_endpoint_config_compute_sts_endpoint_config_resolve_endpoint)r%   r2   r=   rB   r`   rc   r7   resolve_endpoint_kwargss           r-   r   *ClientArgsCreator._compute_endpoint_config  s|     )&(".#
 433 #'>  5 44O7NOO%%@(?@@r0   c                     U R                  US   U5      nU(       a  S US'   U R                  " S0 UD6nU R                  XBS   5        U(       a  US   S:X  a  SUS'   U$ )Nr=   rc   r   r   rP   )_should_force_s3_globalr   !_set_region_if_custom_s3_endpoint)r%   r7   r   force_s3_globalr4   s        r-   r   -ClientArgsCreator._compute_s3_endpoint_config  sz     66#M2I
 59#M200K3JK..5FG	
 }=M-8OM*r0   c                 r    SnU(       a  SU;   a  US   nU R                  U5        US;   nUS:H  =(       a    U$ )Nr   us_east_1_regional_endpoint)r   N)_validate_s3_regional_config)r%   r=   r7   s3_regional_configis_global_regions        r-   r   )ClientArgsCreator._should_force_s3_global  sK    %6)C!*+H!I--.@A&*==!X-B2BBr0   c                 R    U[         ;  a  [        R                  R                  US9eg )N)%s3_us_east_1_regional_endpoint_config)VALID_REGIONAL_ENDPOINTS_CONFIGrX   
exceptions+InvalidS3UsEast1RegionalEndpointConfigError)r%   
config_vals     r-   r   .ClientArgsCreator._validate_s3_regional_config  s2    <<%%QQ6@ R   =r0   c                 b    US   c)  US   c"  UR                  S5      nUS   US'   US   US'   g g g )Nr<   r=   rA   resolve)r%   r4   rc   rJ   s       r-   r   3ClientArgsCreator._set_region_if_custom_s3_endpoint  sU     ,-5.6&..t4H089I0JO,--5m-DOM*	 7 6r0   c                     U R                   " S0 UD6nU R                  US   US   U5      (       a  U R                  X!S   5        U$ )Nr=   rB   r`   rP   )r   _should_set_global_sts_endpoint_set_global_sts_endpoint)r%   r   r4   s      r-   r   .ClientArgsCreator._compute_sts_endpoint_config  s\    00K3JK//#M2#N3
 

 ))!E r0   c                     U=(       a!    UR                  S0 5      R                  S5      nU(       d  U(       a  gU R                  5       S:H  =(       a	    U[        ;   $ )Nr8   rs   Fr   )rR   "_get_sts_regional_endpoints_configLEGACY_GLOBAL_STS_REGIONS)r%   r=   rB   r4   has_variant_tagss        r-   r   1ClientArgsCreator._should_set_global_sts_endpoint  s[     + /B/B0

#f+ 	 +335A 988	
r0   c                     U R                   R                  S5      nU(       d  SnU[        ;  a  [        R                  R                  US9eU$ )Nsts_regional_endpointsr   )sts_regional_endpoints_config)r"   r   r   rX   r   &InvalidSTSRegionalEndpointsConfigError)r%   r   s     r-   r   4ClientArgsCreator._get_sts_regional_endpoints_config  s^    (,(:(:(N(N$)
% -,4))23 %%LL.K M   -,r0   c                 4    U(       a  SOSnU S3US'   SUS'   g )Nhttpshttpz://sts.amazonaws.comrB   r   r<   rP   )r%   r4   r`   schemes       r-   r   *ClientArgsCreator._set_global_sts_endpoint  s(    %6-3H4H*I',7()r0   c                 &    UR                  XX45      $ r   r   )r%   r2   r=   rB   r`   rc   s         r-   r   #ClientArgsCreator._resolve_endpoint  s     &&|
 	
r0   c                 D   [         R                  [         R                  S4/nU=(       a    UR                  nU=(       a!    U R	                  UR                  SS5      5      nU(       d  U(       a0  UR                  [         R                  [         R                  S45        U$ )N   rz   F)	socketIPPROTO_TCPTCP_NODELAYrz   _ensure_booleanrR   append
SOL_SOCKETSO_KEEPALIVE)r%   rb   rN   r:   client_keepalivescoped_keepalives         r-   r   )ClientArgsCreator._compute_socket_options  s     "--v/A/A1EF(H]-H-H( 
T-A-Aou5.
 /!!6#4#4f6I6I1"MNr0   c                 H    U R                  U5        U R                  U5        g r   )_compute_retry_max_attempts_compute_retry_moder%   r6   s     r-   r   'ClientArgsCreator._compute_retry_config*  s    ((7  /r0   c                     UR                  S5      nUb9  SU;   a  UR                  SS 5        g SU;   a  UR                  S5      nUS-   US'   g U R                  R                  S5      nUb  Uc  0 nX!S'   XBS'   g g )Nrx   total_max_attemptsmax_attemptsr   )rR   popr"   r   )r%   r6   rx   valuer   s        r-   r   -ClientArgsCreator._compute_retry_max_attempts.  s      ##I.#w.ND1(N3 16	,- ))==nM#+2i(,8()	 $r0   c                     UR                  S5      nUc  0 nX!S'   OSU;   a  g U R                  R                  S5      nUc  SnX2S'   g )Nrx   mode
retry_moder   rR   r"   r   )r%   r6   rx   r   s       r-   r   %ClientArgsCreator._compute_retry_modeN  sY    ##I.?G'.)$w '';;LI
!J$r0   c                 |    UR                  S5      nUb  g U R                  R                  S5      nU(       a  X!S'   g g )NrV   r   )r%   r6   rV   s      r-   r   *ClientArgsCreator._compute_connect_timeout\  sJ     (++,=>&,,@@
 />+, r0   c                 
   UR                  S5      nUR                  S5      nUc  U R                  R                  S5      nU R                  U5      nX!S'   Uc  U R                  R                  S5      nO[	        U5      nX1S'   g )Nr}   r~   )rR   r"   r   _validate_min_compression_sizer
   )r%   r6   min_sizer   s       r-   r   5ClientArgsCreator._compute_request_compression_configi  s     $$%IJ $$%BC))==4H 66x@>F:;))==-H
 &h/H7?34r0   c                 "   SnSnSU S3n [        U5      nX!s=::  a  U::  d*  O  U SU S	U S
3n[        R
                  R                  US9eU$ ! [        [        4 a/    U S[        U5       S3n[        R
                  R                  US9ef = f)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typerX   r   InvalidConfigError)r%   r   min_allowed_min_sizemax_allowed_min_sizeerror_msg_basemsgs         r-   r   0ClientArgsCreator._validate_min_compression_size  s     &hZ (2 2 		H8}H $G3GG!""9'(.B-C1F  %%8838GG I& 	H!" # N+96  %%8838GG	Hs   A ?Bc                 V    [        U[        5      (       a  U$ UR                  5       S:H  $ )Ntrue)
isinstanceboollower)r%   vals     r-   r   !ClientArgsCreator._ensure_boolean  s%    c4  J99;&((r0   c                 x   Uc  g U R                  U5      =(       d    0 nUR                  nUS;   d  Uc  UnOUnU R                  UUUU
UUR                  UUS9nUb  UR                  =(       d    0 nO0 nU R                  U5      (       a  UR                  U5        Ub  UR                  OS n[        UUUUUUU	US9$ )N)rA   r   )r=   r2   r7   rc   client_endpoint_urllegacy_endpoint_urlra   r>   )endpoint_ruleset_datarf   rM   builtinsclient_contextr&   use_sslrequested_auth_scheme)	r   r   *compute_endpoint_resolver_builtin_defaultshostr   r   r   r@   r   )r%   re   rf   rN   rM   rh   r=   rB   rJ   r`   rc   r&   ra   r>   s3_config_rawservice_name_raweprv2_region_nameresolver_builtinsr  sig_versions                       r-   r]   *ClientArgsCreator._build_endpoint_resolver  s      ") ..}=C(88 },0C 4 + KK))#+ , (#%= L 	
 $*@@FBNN/00!!-0 ( ++ 	
 '"8)'&)'"-	
 		
r0   c	                    U(       a  Un	OUR                  5       (       d  Un	OS n	UR                  SS5      (       a  Sn
O<Ub%  [        U5      (       d  UR                  S5      S:g  n
OUR                  S5      S:H  n
[        R                  U[        R
                  U	S L =(       a    UR                  S5      =(       d    S[        R                  U	S L =(       a    UR                  U5      =(       d    S[        R                  U R                  US S S9[        R                  U R                  X5      [        R                  UR                  SS5      [        R                  U
[        R                  UR                  SS	5      [        R                   UR                  SS5      [        R"                  UR                  S
S5      [        R$                  U	[        R&                  U(       a  UR)                  S5      OS [        R*                  U0$ )Nuse_accelerate_endpointFaddressing_stylevirtualpathrw   )r=   rB   r4   use_arn_regionT$s3_disable_multiregion_access_points
account_id)resolver_uses_builtin_datarR   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
ACCOUNT_IDget_deferred_propertyACCOUNT_ID_ENDPOINT_MODE)r%   r=   r2   r7   rc   r  r  ra   r>   given_endpointforce_path_styles              r-   r  <ClientArgsCreator.compute_endpoint_resolver_builtin_defaults  s    0N !;;==0N!N ==2E::$ ,5I6
 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""  %0$E$E% 002Jg4
 4	
r0   c                     UR                  S5      nUc  U R                  R                  S5      nUb0  [        U5      [        :  a  [
        R                  S[         S35        X!S'   g )Nr|   zHThe configured value for user_agent_appid exceeds the maximum length of z characters.)rR   r"   r   lenUSERAGENT_APPID_MAXLENr   warning)r%   r6   r|   s      r-   r   2ClientArgsCreator._compute_user_agent_appid_config=  su    (,,-?@##11EE"  ($%(>>NN%%;$<LJ -=()r0   c                 j    UR                  S5      nUc  U R                  R                  S5      nX!S'   g )Nr   r   )r%   r6   r   s      r-   r   ;ClientArgsCreator._compute_sigv4a_signing_region_set_configM  sD    $1$5$5'%
! %,(,(:(:(N(N+)% 6O12r0   c                 X    U R                  US[        S9  U R                  US[        S9  g )Nr   )
config_keyvalid_optionsr   )_handle_checksum_config)VALID_REQUEST_CHECKSUM_CALCULATION_CONFIG)VALID_RESPONSE_CHECKSUM_VALIDATION_CONFIGr   s     r-   r   *ClientArgsCreator._compute_checksum_configW  s<    $$5C 	% 	

 	$$5C 	% 	
r0   c                    UR                   R                  S5      (       aW  [         H  nX!R                  ;   d  M  Us  $    [        R
                  R                  [        UR                  UR                  S9eUR                  $ )N	protocols)botocore_supported_protocolsservice_supported_protocolsservice)	r8   rR   $PRIORITY_ORDERED_SUPPORTED_PROTOCOLSrS  rX   r    UnsupportedServiceProtocolsErrorr2   r5   )r%   rM   r5   s      r-   r   #ClientArgsCreator._resolve_protocolc  s{     !!%%k22@666#O A %%FF-Q,9,C,C%22 G   %%%r0   c                     UR                  U5      nUc  U R                  R                  U5      n[        U[        5      (       a  UR                  5       nXC;  a  [        R                  R                  UUUS9eXAU'   g )N)rL  config_valuerM  )	rR   r"   r   r  strr  rX   r   InvalidChecksumConfigError)r%   r6   rL  rM  r   s        r-   rN  )ClientArgsCreator._handle_checksum_configt  s     !!*-=&&:::FEeS!!KKME%%%@@%"+ A  
 %*j!r0   c           	      t   SnUR                  S5      nU[        R                  L a  SX'   g UR                  U5      nUc  U R                  R	                  U5      n[        U[        5      (       a  UR                  5       nU[        ;  a+  [        R                  R                  SU SU S[         S3S9eXAU'   g )	Nr>   r@   r   zThe configured value 'z' for 'z ' is invalid. Valid values are: r  r  )rR   rX   UNSIGNEDr"   r   r  r\  r  %VALID_ACCOUNT_ID_ENDPOINT_MODE_CONFIGr   r
  )r%   r6   rL  r@   r>   s        r-   r   :ClientArgsCreator._compute_account_id_endpoint_mode_config  s    /
 *--.AB 1 11(2M%#0#4#4Z#@ #+'+'9'9'M'M($ .44'?'E'E'G$ %89 %%8823K2LGT^S_ `..S-TTUW 9  
 %=j!r0   )r"   r   r!   r    r   r$   r   )NNN)'__name__
__module____qualname____firstlineno__r.   ro   rQ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   r  r   r   r   r   rN  r   __static_attributes__rP   r0   r-   r   r   Y   s      :> #l
\w
r;&F	
 &4A0*CE

-8


09@%?@,0)B
HZ
x= O

&"**=r0   r   )#__doc__rS   loggingr   botocore.exceptionsrX   botocore.parsersbotocore.serializebotocore.configr   botocore.endpointr   botocore.regionsr   r0  r   botocore.signersr   botocore.useragentr   r	   botocore.utilsr
   r   	getLoggerrc  r   r   r   rF  rO  rP  rW  ra  r   rP   r0   r-   <module>rt     s          " - D 4 * C ?			8	$ #  (  - )- )
( $) %L= L=r0   