B ㊇c0@sddlZddlmZmZddlmZddlmZddlm Z ddl m Z ddl m Z mZmZddlmZmZdd lmZmZmZmZmZdd lmZdd lmZdd lmZmZdd l m!Z!ddl"m#Z#ddl$m%Z%m&Z&ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-ddlm.Z.ddl'm/Z/ddl'm0Z0ddl'm1Z1ddl'm2Z2ddl'm3Z3ddlm4Z4e5dZ6e7e8Z9eZ:GdddZ;GdddZd!d"Z?dS)#N)waiter xform_name)ClientArgsCreator)AUTH_TYPE_MAPS)prepare_request_dict)Config)EndpointDiscoveryHandlerEndpointDiscoveryManager,block_endpoint_discovery_required_operations)ClientMethodDocstringPaginatorDocstring)DataNotFoundError*InvalidEndpointDiscoveryConfigurationErrorOperationNotPageableErrorUnknownServiceErrorUnknownSignatureVersionError)get_global_history_recorder)first_non_none_response)apply_request_checksumresolve_checksum_context) ServiceModel) Paginator)adaptivestandard)CachedPropertyEventbridgeSignerSetterS3ControlArnParamHandlerv2S3RegionRedirectorv2ensure_booleanget_service_module_name) ClientError)S3ArnParamHandler)S3ControlArnParamHandler)S3ControlEndpointSetter)S3EndpointSetter)S3RegionRedirector)UNSIGNED)v2Zv3Zv3httpsv4s3s3v4c@seZdZdZd6ddZd7ddZd8dd Zd d Zd d Zd9ddZ d:ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd;d(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5ZdS)< ClientCreatorz%Creates client objects for a service.Nc Cs:||_||_||_||_||_||_||_||_| |_dS)N) _loader_endpoint_resolver _user_agent_event_emitter_retry_handler_factory_retry_config_translator_response_parser_factory_exceptions_factory _config_store) selfloaderendpoint_resolver user_agent event_emitterZretry_handler_factoryZretry_config_translatorZresponse_parser_factoryexceptions_factory config_storer<j/private/var/folders/8c/hx9_v10d5x38qmnzt13b7b8j1k3n5b/T/pip-target-x6xd5gna/lib/python/botocore/client.py__init__Ss zClientCreator.__init__Tc Cs|jjd|d} t| |d}|||} y|||} |jd}Wn(tk rld} d}t d|YnX| || }| || \}} t |j || | jd|j| jdd}|| ||||||| || | | }|f|}|||j|dd| |d |j|d |||| |S) Nzchoose-service-name) service_name)defaultZ partitionszSNo endpoints ruleset found for service %s, falling back to legacy endpoint routing.Z signingNameZsignatureVersion)service_signing_namer;service_signature_version)clientendpoint_bridge endpoint_url client_config scoped_config)rC)r/emitr_load_service_model_load_service_endpoints_rulesetr, load_datarloggerinfo_create_client_class_normalize_fips_regionClientEndpointBridger-metadatagetr4_get_client_args_register_retries_register_s3_events_register_s3_control_events_register_endpoint_discovery)r5r? region_name is_securerEverify credentialsrG api_versionrF auth_token responses service_modelendpoints_ruleset_datapartition_dataclsrDZ client_argsZservice_clientr<r<r= create_clientmsd             zClientCreator.create_clientcCs|||}|||S)N)rIrN)r5r?r\r_r<r<r=create_client_classs z!ClientCreator.create_client_classc Csb||}||}||d<tg}|j}|jjd|||dt|}tt |t ||}|S)N_PY_TO_OP_NAMEzcreating-client-class.%s)class_attributesZ base_classes) _create_methods_create_name_mapping BaseClient service_id hyphenizer/rHrtypestrtuple) r5r?r_rfZpy_name_to_operation_namebasesrj class_namerbr<r<r=rNs   z"ClientCreator._create_client_classcCs`|dk rX|dddd}||krXtdd}|r>||}n|}td||f|}||fS)Nzfips-z-fipsT)use_fips_endpointztransforming region from %s to %s and setting use_fips_endpoint to true. client should not be configured with a fips psuedo region.)replacermergerLwarning)r5rXrFZnormalized_region_nameZconfig_use_fips_endpointr<r<r=rOs   z$ClientCreator._normalize_fips_regioncCs"|jj|d|d}t||d}|S)Nz service-2)r\)r?)r,load_service_modelr)r5r?r\Z json_modelr_r<r<r=rIs  z!ClientCreator._load_service_modelcCs|jj|d|dS)Nzendpoint-rule-set-1)r\)r,rv)r5r?r\r<r<r=rJsz-ClientCreator._load_service_endpoints_rulesetcCsV|jjjd}|dkr"||n0|dkr@||||n|dkrR||dS)Nmoderrlegacy)metaconfigretries_register_v2_standard_retries_register_v2_adaptive_retries_register_legacy_retries)r5rC retry_moder<r<r=rTs   zClientCreator._register_retriescCs8|jjjd}d|i}|dk r(||d<tjf|dS)Ntotal_max_attemptsrC max_attempts)ryrzr{rRrregister_retry_handler)r5rCrkwargsr<r<r=r|s z+ClientCreator._register_v2_standard_retriescCst|dS)N)rr)r5rCr<r<r=r}sz+ClientCreator._register_v2_adaptive_retriesc Cs|jjj}|jjj}|}|jd}|s0dS||jjj }|j || di| di|}t d|jjj|j||}d|} |jjjd||| ddS)NZ_retryretryZ definitionsz*Registering retry handlers for service: %szretry-config-%sz needs-retry.) unique_id)ryr_endpoint_prefixrjrkr,rK_transform_legacy_retriesrzr{r1Zbuild_retry_configrRrLdebugr?r0Zcreate_retry_handlereventsregister) r5rCrrjZservice_event_nameZoriginal_configr{Z retry_confighandlerrr<r<r=r~s(      z&ClientCreator._register_legacy_retriescCs:|dkr dS|}d|kr6|}|dd|d<|S)Nrr)copypop)r5r{Z copied_argsr<r<r=r"sz'ClientCreator._transform_legacy_retriescCs6|jjj}|dk r(|ddk r(|dS|dp4dS)Nrwrrx)ryrzr{rRget_config_variable)r5rCr;Zclient_retriesr<r<r=_get_retry_mode-s  zClientCreator._get_retry_modec Cs|dk r dS|jjjdkrdS|jj}|jjj}d}|rN|jdk rN|j}n|jr`|jd}| |}|r| ||r|dk}t ||d}t |} | ||n | dtdS)NFendpoint_discovery_enabledT)Zalways_discoverzbefore-parameter-build)ryr_Zendpoint_discovery_operationrrjrkrr4r$_normalize_endpoint_discovery_config_requires_endpoint_discoveryr rrr ) r5rCrErzrrjenableddiscovermanagerrr<r<r=rW6s,  z*ClientCreator._register_endpoint_discoverycCsPt|tr4|}|dkr"|S|dkrBt|Snt|trB|St|ddS)z?Config must either be a boolean-string or string-literal 'auto'auto)truefalse)Z config_valueN) isinstancermlowerstriprboolr)r5rr<r<r=rUs    z2ClientCreator._normalize_endpoint_discovery_configcCs|dkr|jjjS|S)Nr)ryr_Zendpoint_discovery_required)r5rCrr<r<r=rbs z*ClientCreator._requires_endpoint_discoverycCs4|jjjdkrdSt|j|jj|d|jjdS)Nr)r7regionrE)ryr_r?rr-rXrr)r5rCrDrEr<r<r=_register_eventbridge_eventsgsz*ClientCreator._register_eventbridge_eventscCs4|jjjdkrdStd|||j||dS)Nr))ryr_r?rr!_set_s3_presign_signature_version)r5rCrDrErFrGr<r<r=rUrs z!ClientCreator._register_s3_eventscCs&|jjjdkrdSt|jjdS)NZ s3control)ryr_r?rrr)r5rCrDrErFrGr<r<r=rVsz)ClientCreator._register_s3_control_eventscCsxtd||}|dk rdS|jd|j}|jdkr@|j|kr@dS|jd|j}|d}d|krddS|jd|jdS)Nr)z aws-globalsignatureVersionszchoose-signer.s3) !_get_configured_signature_versionr-Zget_available_endpoints partitionrXconstruct_endpointrr_default_s3_presign_to_sigv2)r5Z client_metarFrGZprovided_signature_versionZregionsendpointZsignature_versionsr<r<r=rs      z/ClientCreator._set_s3_presign_signature_versioncKs4|drdSx dD]}||rd|SqWdS)a@ Returns the 's3' (sigv2) signer if presigning an s3 request. This is intended to be used to set the default signature version for the signer to sigv2. Situations where an asymmetric signature is required are the exception, for example MRAP needs v4a. :type signature_version: str :param signature_version: The current client signature version. :type signing_name: str :param signing_name: The signing name of the service. :return: 's3' if the request is an s3 presign request, None otherwise Zv4aN)z-queryz -presign-postr)) startswithendswith)r5signature_versionrsuffixr<r<r=rs    z*ClientCreator._default_s3_presign_to_sigv2c Cs@t|j|j|j|j|j|jd} | ||||||||| | | | S)N)r;)rr/r.r2r,r3r4Zget_client_args)r5r_rXrYrErZr[rGrFrDr]r`raZ args_creatorr<r<r=rSs( zClientCreator._get_client_argscCs2i}x(|jD]}t|}||||||<q W|S)N)operation_namesr_create_api_method)r5r_Zop_dictoperation_namepy_operation_namer<r<r=rgs  zClientCreator._create_methodscCs(i}x|jD]}t|}|||<q W|S)N)rr)r5r_mappingrrr<r<r=rhs   z"ClientCreator._create_name_mappingcsHfdd}t|_|}t||j|jddd}||_|S)Ncs|rtd||S)Nz"() only accepts keyword arguments.) TypeError_make_api_call)r5argsr)rrr<r= _api_call s z3ClientCreator._create_api_method.._api_callzresponse = client.%sF)operation_model method_namer9Zmethod_descriptionZexample_prefixinclude_signature)rm__name__rr r/Z documentation__doc__)r5rrr_rrZ docstringr<)rrr=rs  z ClientCreator._create_api_method)NNN)TNNNNNNN)N)N)N)NNNN)r __module__ __qualname__rr>rcrdrNrOrIrJrTr|r}r~rrrWrrrrUrVrrrSrgrhrr<r<r<r=r+PsL   @         +&  r+c@seZdZdZdZddgZd#ddZd$d d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"ZdS)%rPaBridges endpoint data and client creation This class handles taking out the relevant arguments from the endpoint resolver and determining which values to use, taking into account any client configuration options and scope configuration options. This class also handles determining what, if any, region to use if no explicit region setting is provided. For example, Amazon S3 client will utilize "us-east-1" by default if no region can be resolved.z {service}.{region}.amazonaws.comr)z s3-controlNcCs4||_||_||_||_|p |j|_||_||_dS)N)rAr7rGrFDEFAULT_ENDPOINTdefault_endpointr;rB)r5r7rGrFrrAr;rBr<r<r=r>2s  zClientEndpointBridge.__init__TcCsx|||}||}|d}|jj||||d}|sN|jj||d||d}|rd||||||S|||||SdS)Nrr)use_dualstack_endpointrrZaws)Zpartition_namerrr)_check_default_region_resolve_use_dualstack_endpoint$_resolve_endpoint_variant_config_varr7r_create_endpoint_assume_endpoint)r5r?rXrErYrrrresolvedr<r<r=resolveDs, zClientEndpointBridge.resolvecCs|jjS)N)r7Zuses_builtin_data)r5r<r<r=resolver_uses_builtin_dataksz/ClientEndpointBridge.resolver_uses_builtin_datacCs*|dk r |S|jr&|jjdk r&|jjSdS)N)rFrX)r5r?rXr<r<r=rnsz*ClientEndpointBridge._check_default_regionc Csf||||\}}|dkr6||d||dg}|||}|||}|j|||||||dS)Nhostname protocols)r?rXsigning_region signing_namerErQr)_pick_region_values _make_urlrR_resolve_signature_version_resolve_signing_name_create_result) r5rr?rXrErYrrrr<r<r=rus$ z%ClientEndpointBridge._create_endpointcCs@|j}d}|r&t||dk r&t||S|jdk r<|j|}|S)NF)rFgetattrr;r)r5Z config_varrFZ config_valr<r<r=rs   z9ClientEndpointBridge._resolve_endpoint_variant_config_varcCs ||}|dk r|S|dS)Nr)_is_s3_dualstack_moder)r5r?Zs3_dualstack_moder<r<r=rs  z4ClientEndpointBridge._resolve_use_dualstack_endpointcCsh||jkrdS|j}|dk r:|jdk r:d|jkr:|jdS|jdk rd|jdid}|dkrddSdS)Nrr))TTruerT)_DUALSTACK_CUSTOMIZED_SERVICESrFr)rGrR)r5r?rFrr<r<r=rs     z*ClientEndpointBridge._is_s3_dualstack_modec Cs~|dkr*|jj||d}|||ddg}td|d|d|||ddgi}|j|id }|j||||||id S) N)servicerhttphttpszAssuming an endpoint for z, z: rr()r)r?rXrrrrErQ)rformatrrLrrrr)r5r?rXrErYrrrr<r<r=rs$ z%ClientEndpointBridge._assume_endpointcCs|||||||dS)N)r?rXrrrErrQr<)r5r?rXrrrErrQr<r<r=rs z#ClientEndpointBridge._create_resultcCs$|rd|krd}nd}|d|S)Nrrz://r<)r5rrYZsupported_protocolsschemer<r<r=rs zClientEndpointBridge._make_urlcCs0d|kr d|dkr |ddS|jr,|jS|S)NcredentialScoper)rA)r5r?rr<r<r=rs   z*ClientEndpointBridge._resolve_signing_namecCs@|}|dkr8|d}|}d|kr8d|dkr8|dd}||fS)NZ endpointNamerrr<)r5rrXrErr<r<r=rs   z(ClientEndpointBridge._pick_region_valuescCst||j|j}|dk r|S|dg}|jdk rD|jtkrD|jg}d|kr~|dkrXdSd|krddSx|D]}|tkrj|SqjWt|ddS)Nrr)r*r()r)rrFrGrRrB_LEGACY_SIGNATURE_VERSIONSrr)r5r?rZconfigured_versionZpotential_versionsZknownr<r<r=rs&   z/ClientEndpointBridge._resolve_signature_version)NNNNNN)NNT)rrrrrrr>rrrrrrrrrrrrrr<r<r<r=rP$s,  &  rPc@seZdZiZd&ddZddZddZdd Zed d Z d d Z ddZ d'ddZ ddZ d(ddZddZddZddZddZed d!Zed"d#Zd$d%ZdS))riNc Csb||_||_| |_||_||_i|_||_||_t||j|j ||j | |_ | |_ d|_ |dS)N) _serializer _endpoint_ruleset_resolverZ_response_parser_request_signer_cacher,_client_config ClientMetahostreryr3 _exceptions_register_handlers) r5 serializerrZresponse_parserr9request_signerr_r6rFrr:Zendpoint_ruleset_resolverr<r<r=r>?s$zBaseClient.__init__cCs\|jj}d|d|}|jjj||d\}}|dk r>|Std|jjd|ddS)Nzgetattr..)rC'z' object has no attribute ') _service_modelrjrkryremit_until_responseAttributeError __class__r)r5itemrjZ event_namerevent_responser<r<r= __getattr__as zBaseClient.__getattr__cCs|jdS)z'Closes underlying endpoint connections.N)rclose)r5r<r<r=rpszBaseClient.closecCs,|jjj}|jjd||jjdS)Nzrequest-created.)ryr_rjrkrrrr)r5rjr<r<r=rtszBaseClient._register_handlerscCs|jjS)N)ryr_)r5r<r<r=r{szBaseClient._service_modelcCsH|j|}|jj}td|||d|jr.paginate page_configF)Zpaginator_namer9r_paginator_configrz .Paginator.rN) can_paginaterrerr ryrr_rrrlrrrr) r5ractual_operation_namerrZservice_module_nameZpaginator_class_nameZdocumented_paginator_clsrZ paginatorr<r<r= get_paginator<s0     zBaseClient.get_paginatorcCsld|jkrTy*|j|jjd|jjd}||jd<Wntk rRi|jd<YnX|j|}||jdkS)aMCheck if an operation can be paginated. :type operation_name: string :param operation_name: The operation name. This is the same name as the method name on the client. For example, if the method name is ``create_foo``, and you'd normally invoke the operation as ``client.create_foo(**kwargs)``, if the ``create_foo`` operation can be paginated, you can use the call ``client.get_paginator("create_foo")``. :return: ``True`` if the operation can be paginated, ``False`` otherwise. rz paginators-1Z pagination)rr,rvrr?r\r re)r5rrrr<r<r=r}s  zBaseClient.can_paginatecCsZd|jkrPy&|j|jjd|jj}||jd<Wntk rNi|jd<YnX|jdS)N waiter_configz waiters-2)rr,rvrr?r\r )r5rr<r<r=_get_waiter_configs  zBaseClient._get_waiter_configcCsh|}|std|t|}i}x|jD]}||t|<q.W||krVtd|t||||S)aGReturns an object that can wait for some condition. :type waiter_name: str :param waiter_name: The name of the waiter to get. See the waiters section of the service docs for a list of available waiters. :returns: The specified waiter object. :rtype: botocore.waiter.Waiter zWaiter does not exist: %s)r ValueErrorr WaiterModel waiter_namesrZcreate_waiter_with_client)r5Z waiter_namerzrrrr<r<r= get_waiters     zBaseClient.get_waitercCs*|}|sgSt|}dd|jDS)z(Returns a list of all available waiters.cSsg|] }t|qSr<)r).0rr<r<r= sz+BaseClient.waiter_names..)rrrr)r5rzrr<r<r=rs  zBaseClient.waiter_namescCs|jdkr||_|jS)N)r_load_exceptions)r5r<r<r=rs  zBaseClient.exceptionscCs|j|jS)N)r3Zcreate_client_exceptionsr)r5r<r<r=rszBaseClient._load_exceptions)N)NNT)F)rrrrer>rrrpropertyrrrrr rrrrrrrrrr<r<r<r=ri5s(  E  -A  ric@s`eZdZdZddZeddZeddZedd Zed d Z ed d Z eddZ dS)ra~Holds additional client methods. This class holds additional information for clients. It exists for two reasons: * To give advanced functionality to clients * To namespace additional client attributes from the operation names which are mapped to methods at runtime. This avoids ever running into collisions with operation names. cCs(||_||_||_||_||_||_dS)N)rr _endpoint_urlr_method_to_api_mapping _partition)r5rrFrEr_method_to_api_mappingrr<r<r=r>s zClientMeta.__init__cCs|jS)N)r)r5r<r<r=r_szClientMeta.service_modelcCs|jjS)N)rrX)r5r<r<r=rXszClientMeta.region_namecCs|jS)N)r)r5r<r<r=rEszClientMeta.endpoint_urlcCs|jS)N)r)r5r<r<r=rzszClientMeta.configcCs|jS)N)r )r5r<r<r=r"sz ClientMeta.method_to_api_mappingcCs|jS)N)r!)r5r<r<r=rszClientMeta.partitionN) rrrrr>rr_rXrErzr"rr<r<r<r=rs      rcCs\|r|jdk r|jS|dk rX||}|dk rXt|trX|d}|rXtd|||SdS)z Gets the manually configured signature version. :returns: the customer configured signature version, or None if no signature version was configured. NrzWSwitching signature version for service %s to version %s based on config file override.)rrRrdictrLr)r?rFrGZservice_configversionr<r<r=r s   r)@loggingZbotocorerrZ botocore.argsrZ botocore.authrZbotocore.awsrequestrZbotocore.configrZbotocore.discoveryrr r Zbotocore.docs.docstringr r Zbotocore.exceptionsr rrrrZbotocore.historyrZbotocore.hooksrZbotocore.httpchecksumrrZbotocore.modelrZbotocore.paginaterZbotocore.retriesrrZbotocore.utilsrrrrrrr r!r"r#r$r%r& frozensetr getLoggerrrLrr+rPrirrr<r<r<r= sN                W#6