B ㊇cöbã@sÈdZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Zddl mZddlmZddlmZmZe e¡Zd d gZd d d dddddddddddddgZGdd„dƒZdS)z²Internal 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)Úensure_booleanÚis_s3_accelerate_urlÚlegacyZregionalzap-northeast-1z ap-south-1zap-southeast-1zap-southeast-2z aws-globalz ca-central-1z eu-central-1z eu-north-1z eu-west-1z eu-west-2z eu-west-3z sa-east-1z us-east-1z us-east-2z us-west-1z us-west-2c@sÈeZdZdd„Zd0dd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd1d d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„ZdS)2ÚClientArgsCreatorcCs(||_||_||_||_||_||_dS)N)Ú_event_emitterÚ _user_agentÚ_response_parser_factoryÚ_loaderÚ_exceptions_factoryÚ _config_store)ÚselfÚ event_emitterÚ user_agentÚresponse_parser_factoryÚloaderÚexceptions_factoryZ config_store©rúh/private/var/folders/8c/hx9_v10d5x38qmnzt13b7b8j1k3n5b/T/pip-target-x6xd5gna/lib/python/botocore/args.pyÚ__init__=s zClientArgsCreator.__init__Nc Cs@| ||| ||||¡} | d}| d}| d}| d}| d}| d}|d dd¡}| d }|d }|d }t |j¡}t|j||d |d ||| ƒ}||d<tf|Ž}t|ƒ}|j|||d||j |j |j |j |j f||j|jd }tj ||¡}tj |¡}| | | |||||||| |¡ }|||||||j|||j|dœ S)NÚ service_nameÚparameter_validationÚendpoint_configÚprotocolÚ config_kwargsÚ s3_configÚmetadataÚ partitionÚsocket_optionsÚsigning_regionÚ region_nameZ signing_nameÚsignature_versionÚs3Ú endpoint_url) r$r'ÚverifyrÚmax_pool_connectionsÚproxiesÚtimeoutr"Ú client_certÚproxies_config) Ú serializerÚendpointÚresponse_parserrZrequest_signerÚ service_modelrÚ client_configr!rZendpoint_ruleset_resolver)Úcompute_client_argsÚgetÚcopyr rZ service_idrrZcreate_endpointr r)r*Úconnect_timeoutÚ read_timeoutr,r-ÚbotocoreÚ serializeZcreate_serializerÚparsersZ create_parserÚ_build_endpoint_resolverrr) rr1r$Ú is_securer'r(Ú credentialsÚ scoped_configr2Úendpoint_bridgeZ auth_tokenÚendpoints_ruleset_dataÚpartition_dataZ final_argsrrrrrrr!r"r#Úendpoint_region_namerZsignerZ new_configZendpoint_creatorr/r.r0Zruleset_resolverrrrÚget_client_argsMsˆ     z!ClientArgsCreator.get_client_argsc CsŠ|j}|jd} d} |r$|js$d} n|rB| d¡} | dk rBt| ƒ} |j} |dk rx|jdk r`|j} |jdk rx| d|j7} | |¡} |j |||||| d}|d dg¡}t |d |d | d }d |krÒ|j dd d|kræ|j dd|dk r|j |j |j |j|j|j|j|j|j|jd | |¡| |¡| |¡} | |¡}|rld |krl| dkrdi} d| d<|| | || || | ||¡dœS)NrTFrz %s)rr$r'r<r?rr Útagsr$r%)r$r%rZ dualstack)Úuse_dualstack_endpointZfips)Úuse_fips_endpoint) r6r7r)r*r-Úretriesr,Úinject_host_prefixÚ tcp_keepaliverE)rrrrrrrr")Úendpoint_prefixr rr4rr rZuser_agent_extraÚcompute_s3_configÚ_compute_endpoint_configÚdictÚupdater6r7r)r*r-rGr,rHrIÚ_compute_retry_configÚ_compute_connect_timeoutÚ_is_s3_serviceÚ_compute_socket_options)rr1r2r?r$r'r<r>rrrZ raw_valuerrrZendpoint_variant_tagsrZ is_s3_servicerrrr3°sx                z%ClientArgsCreator.compute_client_argscCsF|j d¡}|dk rB|jdk rB|dkr.|j}n| ¡}| |j¡|S)Nr&)rÚget_config_variabler&r5rN)rr2Zs3_configurationrrrrKs   z#ClientArgsCreator.compute_s3_configcCs|dkS)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'. )r&z s3-controlr)rrrrrrQsz ClientArgsCreator._is_s3_servicecCsL|||||dœ}|dkr,|jfd|i|—ŽS|dkr@|jf|ŽS|jf|ŽS)N)rr$r'r<r?r&rÚsts)Ú_compute_s3_endpoint_configÚ_compute_sts_endpoint_configÚ_resolve_endpoint)rrr$r'r<r?rÚresolve_endpoint_kwargsrrrrL#s   z*ClientArgsCreator._compute_endpoint_configcKsT| |d|¡}|rd|d<|jf|Ž}| ||d¡|rP|ddkrPd|d<|S)Nr$r?z aws-globalz us-east-1)Ú_should_force_s3_globalrWÚ!_set_region_if_custom_s3_endpoint)rrrXZforce_s3_globalrrrrrU;s   z-ClientArgsCreator._compute_s3_endpoint_configcCs6d}|r"d|kr"|d}| |¡|dk}|dko4|S)Nr Zus_east_1_regional_endpoint)z us-east-1N)Ú_validate_s3_regional_config)rr$rZs3_regional_configZis_global_regionrrrrYPs   z)ClientArgsCreator._should_force_s3_globalcCs|tkrtjj|d‚dS)N)Z%s3_us_east_1_regional_endpoint_config)ÚVALID_REGIONAL_ENDPOINTS_CONFIGr8Ú exceptionsZ+InvalidS3UsEast1RegionalEndpointConfigError)rZ config_valrrrr[Ysz.ClientArgsCreator._validate_s3_regional_configcCs>|ddkr:|ddkr:| d¡}|d|d<|d|d<dS)Nr#r$r&)Úresolve)rrr?r/rrrrZ_s     z3ClientArgsCreator._set_region_if_custom_s3_endpointcKs6|jf|Ž}| |d|d|¡r2| ||d¡|S)Nr$r'r<)rWÚ_should_set_global_sts_endpointÚ_set_global_sts_endpoint)rrXrrrrrVms  z.ClientArgsCreator._compute_sts_endpoint_configcCs6|o| di¡ d¡}|s|r"dS| ¡dko4|tkS)Nr rDFr )r4Ú"_get_sts_regional_endpoints_configÚLEGACY_GLOBAL_STS_REGIONS)rr$r'rZhas_variant_tagsrrrr_ys z1ClientArgsCreator._should_set_global_sts_endpointcCs.|j d¡}|sd}|tkr*tjj|d‚|S)NZsts_regional_endpointsr )Ústs_regional_endpoints_config)rrSr\r8r]Z&InvalidSTSRegionalEndpointsConfigError)rrcrrrra†sz4ClientArgsCreator._get_sts_regional_endpoints_configcCs$|rdnd}d||d<d|d<dS)NÚhttpsÚhttpz%s://sts.amazonaws.comr'z us-east-1r#r)rrr<Úschemerrrr`•s  z*ClientArgsCreator._set_global_sts_endpointcCs| ||||¡S)N)r^)rrr$r'r<r?rrrrWšsz#ClientArgsCreator._resolve_endpointcCsPtjtjdfg}|o|j}|o.| | dd¡¡}|s8|rL| tjtjdf¡|S)NérIF) ÚsocketÚ IPPROTO_TCPÚ TCP_NODELAYrIÚ_ensure_booleanr4ÚappendÚ SOL_SOCKETÚ SO_KEEPALIVE)rr>r2r"Zclient_keepaliveZscoped_keepaliverrrrR¦s z)ClientArgsCreator._compute_socket_optionscCs| |¡| |¡dS)N)Ú_compute_retry_max_attemptsÚ_compute_retry_mode)rrrrrrO³s z'ClientArgsCreator._compute_retry_configcCs€| d¡}|dk rLd|kr*| dd¡dSd|krL| d¡}|d|d<dS|j d¡}|dk r||dkrti}||d<||d<dS)NrGZtotal_max_attemptsÚ max_attemptsrg)r4ÚpoprrS)rrrGÚvaluerqrrrro·s     z-ClientArgsCreator._compute_retry_max_attemptscCsP| d¡}|dkr i}||d<n d|kr,dS|j d¡}|dkrDd}||d<dS)NrGÚmodeÚ retry_moder )r4rrS)rrrGrurrrrp×s   z%ClientArgsCreator._compute_retry_modecCs2| d¡}|dk rdS|j d¡}|r.||d<dS)Nr6)r4rrS)rrr6rrrrPås z*ClientArgsCreator._compute_connect_timeoutcCst|tƒr|S| ¡dkSdS)NÚtrue)Ú isinstanceÚboolÚlower)rÚvalrrrrkòs z!ClientArgsCreator._ensure_booleanc  CsŽ|dkr dS| |¡pi} |j} | dks0|dkr6|}n|}|j|| | | ||jd}| | ¡r`| ni}|dk rr|jnd}t|||||| | |dS)N)r&rT)r$rrr?Úclient_endpoint_urlÚlegacy_endpoint_url)Zendpoint_ruleset_datarAr1ÚbuiltinsÚclient_contextrZuse_sslZrequested_auth_scheme)rKrJÚ*compute_endpoint_resolver_builtin_defaultsÚhostrQr%r)rr@rAr2r1rBr$r'r/r<r?rZ s3_config_rawZservice_name_rawZeprv2_region_nameZresolver_builtinsr~Z sig_versionrrrr;øs4 z*ClientArgsCreator._build_endpoint_resolverc Csú|r |}n| ¡s|}nd}| dd¡r.d}n.|dk rNt|ƒsN| d¡dk}n| d¡dk}tj|tj|dkrx| d¡pzdtj|dkr| |¡p’dtj |j |dddtj |  ||¡tj | dd¡tj|tj| dd ¡tj| dd¡tj| d d¡tj|i S) NZuse_accelerate_endpointFZaddressing_styleZvirtualÚpathrF)r$r'rZuse_arn_regionTZ$s3_disable_multiregion_access_points)Zresolver_uses_builtin_datar4rÚ EPRBuiltinsZ AWS_REGIONZ AWS_USE_FIPSZ$_resolve_endpoint_variant_config_varZAWS_USE_DUALSTACKZ_resolve_use_dualstack_endpointZAWS_STS_USE_GLOBAL_ENDPOINTr_ZAWS_S3_USE_GLOBAL_ENDPOINTrYZAWS_S3_ACCELERATEZAWS_S3_FORCE_PATH_STYLEZAWS_S3_USE_ARN_REGIONZAWS_S3CONTROL_USE_ARN_REGIONZAWS_S3_DISABLE_MRAPZ SDK_ENDPOINT) rr$rrr?r{r|Zgiven_endpointZforce_path_stylerrrr6sN    zr )Ú__doc__r5ÚloggingrhZbotocore.exceptionsr8Zbotocore.parsersZbotocore.serializeZbotocore.configrZbotocore.endpointrZbotocore.regionsrr‚rZbotocore.signersrZbotocore.utilsrrÚ getLoggerrƒÚloggerr\rbr rrrrÚs@