U m^ܰj@s|dZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z m Z m Z mZmZmZmZmZmZddlmZddlmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lm Z ddl!m"Z"m#Z#ddl!m$Z$ddl!m%Z%ddl&m'Z'ddl&m(Z(ddl&m)Z)ddl&Z&ddl*Z&e+e,Z-e.Z/e.Z0e1dZ2e1dZ3e1dZ4ddiZ5ddZ6ddZ7ddZ8dd Z9d!d"Z:d#d$Z;d%d&Zd+d,Z?d-d.Z@d/d0ZAd1d2ZBd3d4ZCd5d6ZDdd8d9ZEd:d;ZFdd?ZHGd@dAdAe.ZIdBdCZJdDdEZKdFdGZLdHdIZMdJdKZNdLdMZOdNdOZPdPdQZQdRdSZRdTdUZSdVdWZTdXdYZUdZd[ZVd\d]ZWd^d_ZXd`daZYdbdcZZdddeZ[dfdgZ\dhdiZ]djdkZ^dldmZ_dndoZ`dpdqZadrdsZbdtduZcdvdwZddxdyZedzd{Zfd|d}Zgd~dZhGddde.ZiGddde.ZjGddde.ZkddZlde6fdejdfdege0fdege0fdefdefde`fdeRfde:fde=fdeTfde;fdeBfdebfdebfdebfde>fde>fde>fde>fde>fde>fdeAfdeAfdeAfdeAfdeAfdeAfdeAfdeAfdeAfdeAfde>fde>fde>fdeKfdeKfdeWfdeWfdeWfdeJfdeJfdeHfdeZfde[fde\fde\fdePfde_fde7e/fde7e/fde7e/fdeGfdeGfdeGfdeGfdeGfdeGfde9fdeCfdeCfdeCfdeCfdeDfdeCfdeCfdeCfdeDfdeUfdeUfdeXfdeYfdecfdedfdeefdeafdedd΃jmfdedЃjmfdedЃjmfde]fde^fdeVdՃfdeVdՃfded؃jmfdedكjmfdedۃjmfded܃jmfdeVdރfdedddddddddddddddg jnfdefdeQfdeQfdeQfdeQfdedjmfdedjmfdedjmfdedjmfdeQfdeQfdedjmfdedjmfdekdjofdeIdjpfdelfgiZqeheqdS(z_Builtin event handlers. This module contains builtin handlers for events emitted by botocore. N) unquotejsonsix unquote_str ensure_bytesget_md5 MD5_AVAILABLE OrderedDicturlsplit urlunsplit)AutoPopulatedParam)HideParamFromOperations)AppendParamDocumentation)add_generate_presigned_url)add_generate_presigned_post)add_generate_db_auth_token)ParamValidationError)AliasConflictParameterError)UnsupportedTLSVersionWarning)MissingServiceIdError)percent_encode SAFE_CHARSswitch_host_with_param)hyphenize_service_id) retryhandler)utils) translatez^[a-zA-Z0-9.\-_]{1,255}$zI^arn:(aws).*:s3:[a-z\-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-]{1,63}$z\?versionId=[^\s]+$zruntime.sagemakerzsagemaker-runtimecKs t||SN)SERVICE_NAME_ALIASESget)Z service_namekwargsr"k/private/var/folders/sd/whlwsn6x1_qgglc0mjv25_695qk2gl/T/pip-install-4zq3fp6i/botocore/botocore/handlers.pyhandle_service_name_aliasGsr$cKs2|dkr dS|\}}t|r.td|d|_dS)NzWError found for response with 200 status code, errors: %s, changing status code to 500.i)_looks_like_special_case_errorloggerdebug status_code)responser! http_responseparsedr"r"r#check_for_200_errorKsr,cCsJ|jdkrFtjjjtjjdd}||j|}|j dkrFdSdS)Nutf-8targetencodingErrorTF) r(xmletree cElementTree XMLParser TreeBuilderfeedcontentclosetag)r*parserrootr"r"r#r%gs    r%cKsR|d}|sdS|dkr tjS|drNd}|dkr:d}|dkrJd|d <|SdS) a( Choose the operation-specific signer. Individual operations may have a different auth type than the service as a whole. This will most often manifest as operations that should not be authenticated at all, but can include other auth modes such as sigv4 without body signing. auth_typeNnoneZv4s3Zs3v4zv4-unsigned-bodyFZpayload_signing_enabled)r botocoreUNSIGNED startswith)contextZ signing_namer!r>Zsignature_versionr"r"r#set_operation_specific_signerss  rEc Ks^d|krZz(tt|ddd}||d<Wn(tttfk rXtj dddYnXdS)NZOutputr.replacezError decoding base64Texc_info) base64 b64decoderbdecode ValueError TypeErrorAttributeErrorr&r'r+r!valuer"r"r#decode_console_outputs rRcKs>|jD]2}||krtt||<td|||fqdS)Nz1injecting idempotency token (%s) into param '%s'.)Zidempotent_membersstruuidZuuid4r&r')paramsmodelr!namer"r"r#generate_idempotent_uuids   rXc Cs>ztt|}Wn&ttfk r8tjdddYnX|S)NzError loading quoted JSONTrG)rloadsrrMrNr&r')rQr"r"r#decode_quoted_jsondocs rZc KsRd|krNztj|dtd}||d<Wn&ttfk rLtjdddYnXdS)N TemplateBody)object_pairs_hookzerror loading JSONTrG)rrYr rMrNr&r'rPr"r"r#json_decode_template_bodys r]cKs`|}|dr\d|dkr\|d}t|ttfr8t|}nt|}t|d}||dd<dS)Nbodyz Content-MD5headersascii) isinstancebytes bytearray_calculate_md5_from_bytes_calculate_md5_from_filerI b64encoderL)rUr! request_dictr^Z binary_md5Z base64_md5r"r"r# calculate_md5s rhcCst|}|Sr)rdigest)Z body_bytesmd5r"r"r#rdsrdcsB}t}tfdddD]}||q ||S)Ncs dS)Ni)readr"fileobjr"r#z*_calculate_md5_from_file..ro)tellriterupdateseekri)rmZstart_positionrjchunkr"rlr#res   recKstrt|f|dS)z1Only add a Content-MD5 if the system supports it.N)rrh)rUrDrequest_signerr!r"r"r#conditionally_calculate_md5srvcKsHd|kr dS|d}t|sDt|sDd|tjtjf}t|ddS)NBucketzdInvalid bucket name "%s": Bucket name must match the regex "%s" or be an ARN matching the regex "%s"report) VALID_BUCKETsearch VALID_S3_ARNpatternr)rUr!bucket error_msgr"r"r#validate_bucket_namesrcKst|ddS)z S3 server-side encryption requires the encryption key to be sent to the server base64 encoded, as well as a base64-encoded MD5 hash of the encryption key. This handler does both if the MD5 has not been set by the caller. SSECustomerN_sse_md5rUr!r"r"r#sse_md5srcKst|ddS)a1 S3 server-side encryption requires the encryption key to be sent to the server base64 encoded, as well as a base64-encoded MD5 hash of the encryption key. This handler does both if the MD5 has not been set by the caller specifically if the parameter is for the copy-source sse-c key. ZCopySourceSSECustomerNrrr"r"r#copy_source_sse_md5srrcCsxt||sdS|d}|d}||}t|tjr<|d}tt| d}t| d}|||<|||<dS)NKeyKeyMD5r.) _needs_s3_sse_customizationrar text_typeencoderIrfrrirL)rUsse_member_prefixZsse_key_memberZsse_md5_memberZ key_as_bytesZ key_md5_strZkey_b64_encodedr"r"r#rs    rcCs||ddk o|d|kS)Nrrr )rUrr"r"r#r s rcKstjS)zk This handler disables request signing by setting the signer name to a special sentinel value. )rArB)r!r"r"r#disable_signingsrcKsJ|jdddkrdSd|krF|d}t|drFtdd|dd <dS) Nmethod)PUTPOSTr^rkz-Adding expect 100 continue header to request.z 100-continuer_ZExpect)httpr hasattrr&r')rVrUr!r^r"r"r#add_expect_headers  rc@seZdZddZddZdS)DeprecatedServiceDocumentercCs ||_dSr)_replacement_service_name)selfZreplacement_service_namer"r"r#__init__%sz$DeprecatedServiceDocumenter.__init__cKs>|j|d|j|j|j|d|jdS)Nz.This service client is deprecated. Please use z instead.)styleZstart_importantwriterefrZ end_important)rsection event_namer!r"r"r#inject_deprecation_notice(s   z5DeprecatedServiceDocumenter.inject_deprecation_noticeN)__name__ __module__ __qualname__rrr"r"r"r#r$src Ksd|kr:|d}|d}|d}||dnJd|kr|d}|d}||d|d }||d dS) Nzrequest-examplestructure-value CopySource member-valuezH'string' or {'Bucket': 'string', 'Key': 'string', 'VersionId': 'string'}zrequest-params param-typez:type CopySource: str or dictzparam-documentationa9The name of the source bucket, key name of the source object, and optional version ID of the source object. You can either provide this value as a string or a dictionary. The string form is {bucket}/{key} or {bucket}/{key}?versionId={versionId} if you want to copy a specific version. You can also provide this value as a dictionary. The dictionary format is recommended over the string format because it is more explicit. The dictionary format is: {'Bucket': 'bucket', 'Key': 'key', 'VersionId': 'id'}. Note that the VersionId key is optional and may be omitted. get_section clear_textr) rrr!parent param_line value_portion param_section type_sectionZ doc_sectionr"r"r#document_copy_source_form3s         rcKsJ|d}|dkrdSt|tjr0t||d<nt|trFt||d<dS)aHConvert CopySource param for CopyObject/UploadPartCopy. This handler will deal with two cases: * CopySource provided as a string. We'll make a best effort to URL encode the key name as required. This will require parsing the bucket and version id from the CopySource value and only encoding the key. * CopySource provided as a dict. In this case we're explicitly given the Bucket, Key, and VersionId so we're able to encode the key and ensure this value is serialized and correctly sent to S3. rN)r rar string_types_quote_source_headerdict_quote_source_header_from_dict)rUr!sourcer"r"r#handle_copy_source_paramPs   rc Csz*|d}t|dtdd}|d}Wn4tk r^}ztdt|dW5d}~XYnXd||f}|dk r|d |7}|S) Nrwr/safeZ VersionIdzMissing required parameter: %srxz%s/%sz ?versionId=%s)rrr KeyErrorrrS)Z source_dictr~key version_idefinalr"r"r#rks   rcCs\t|}|dkr"t|tddS|d|||d}}t|tdd|SdS)Nrr)VERSION_ID_SUFFIXr{rrstart)rQresultfirstrr"r"r#rys  "rcCsLt|}||dd<|d|||d<d|d<i|d<|j|||jdS)Nr^DestinationRegionurlGETrr_)Z region_nameZoperation_name)copydeepcopyrFZgenerate_presigned_urlrW)rurgrV source_regiondestination_regionZrequest_dict_copyr"r"r#_get_cross_region_presigned_urls  rcCs|j}|d}||fS)N SourceRegion)Z _region_namer )rurUrrr"r"r#1_get_presigned_url_source_and_destination_regionss rcKsNd|dkrdSt||d\}}t|||||}||dd<||dd<dS)N PresignedUrlr^rrrrUrurVr!srcdestrr"r"r#inject_presigned_url_ec2s  rcKs\d|dkrdSt||d\}}|dd=d|dkr0s z#fix_route53_ids..rz %s %s -> %s) input_shaperrrsplitr&r')rUrVr!rrrWZ orig_valuer"r"r#fix_route53_ids%srcKs|ddkrd|d<dS)N accountId-rrr"r"r#inject_account_id:srcKs|}|jd|dd<dS)NZ apiVersionr_zx-amz-glacier-version)rrVrUr!rgr"r"r#add_glacier_versionCsrcKs(|ddddkr$|}d|dd<dS)Nr_Acceptzapplication/jsonrrr"r"r#add_accept_headerIsrcKsz|}|d}|d}t|tjr*t|}|}d|krLtj|dd|d<||d|krlt||d<||dS)zAdd glacier checksums to the http request. This will add two headers to the http request: * x-amz-content-sha256 * x-amz-sha256-tree-hash These values will only be added if they are not present in the HTTP request. r_r^zx-amz-content-sha256T)Zas_hexzx-amz-sha256-tree-hashN) rar binary_typeBytesIOrprZcalculate_sha256rsZcalculate_tree_hash)rUr!rgr_r^Zstarting_positionr"r"r#add_glacier_checksumsOs     rcCsd}td|jS)Na This is a required field. Ideally you will want to compute this value with checksums from previous uploaded parts, using the algorithm described in `Glacier documentation `_. But if you prefer, you can also use botocore.utils.calculate_tree_hash() to compute it from raw file by:: checksum = calculate_tree_hash(open('your_file.txt', 'rb')) checksumr)docr"r"r##document_glacier_tree_hash_checksumos rcKsld|kr0|d}|d}||dn8d|krh|d}|d}|d}||ddS) Nzresponse-paramsr[rz (*dict*) --zresponse-examplerrz{}r)rrr!Ztemplate_body_sectionrrrrr"r"r#0document_cloudformation_get_template_return_types      rcKst|ddS)NZPredictEndpointrrequestr!r"r"r#switch_host_machinelearningsrcKsFddl}z$|j}|dkr*td|jtWntk r@YnXdS)Nr)rrzCurrently installed openssl version: %s does not support TLS 1.2, which is required for use of iot-data. Please use python installed with openssl version 1.0.1 or higher.)sslOPENSSL_VERSION_INFOwarningswarnOPENSSL_VERSIONrrO)r!rZopenssl_version_tupler"r"r#&check_openssl_supports_tls_version_1_2s rcKs>|jdkr:d|jkr:d|jd<d|_|jdd\|_|_dS)Nr?z!application/x-www-form-urlencodedz Content-Typerr)rrr_rdatarr"r"r#change_get_to_posts r cKsd|krd|d<d|d<dS)N EncodingTypeTencoding_type_auto_setrr")rUrDr!r"r"r#"set_list_objects_encoding_type_urlsrcKstdddgddg||ddS)N DelimiterMarkerZ NextMarkerZContentsrZCommonPrefixesPrefixtop_level_keys nested_keysr+rD_decode_list_objectr+rDr!r"r"r#decode_list_objects rcKstdddgddg||ddS)NrrZ StartAfterrrrrrr"r"r#decode_list_object_v2s rcKs"tddddgdddg||ddS) NZ KeyMarkerZ NextKeyMarkerrr)ZVersionsr)Z DeleteMarkersrrrrrr"r"r#decode_list_object_versionssrcCsr|ddkrn|drn|D]}||krt||||<q|D].\}}||kr>||D]}t||||<qVq>dS)Nr rr )r r)rrr+rDrZtop_keyZ child_keyrr"r"r#rs  rcKsVd|krRt|dtjr0tt|d|d<n"t|dtjrRt|d|d<dS)NZBody)rarrrrrrr"r"r# convert_body_to_file_like_objects rc Csrdddd}|D]X\}}|dd\}}t||}d||jtf}d|d |jf}||||qdS) NZFiltersZfromTimeZ returnFields)z ec2.*.Filterzlogs.CreateExportTask.fromzcloudsearchdomain.Search.return.rzbefore-parameter-build.zdocs.*.z.complete-section)rrsplitParameterAliasalias_parameter_in_callREGISTER_FIRST alias_parameter_in_documentationr) Z handler_listaliasesoriginalnew_nameZ event_portion original_nameZparameter_aliasZ#parameter_build_event_handler_tupleZdocs_event_handler_tupler"r"r#_add_parameter_aliasess    r(c@s,eZdZddZddZddZddZd S) r cCs||_||_dSr)_original_name _alias_name)rr'Z alias_namer"r"r#r szParameterAlias.__init__cKsR|jrN|j|jjkrN|j|krN|j|kreZdZdZedejZddZddZ ddZ d d Z d S) HeaderToHostHoisterz@Takes a header and moves it to the front of the hoststring. z(?!-)[a-z\d-]{1,63}(?r"r"r#r7ts  z0HeaderToHostHoister._ensure_header_is_valid_hostcCsHt|}|jd}|g|}d|}|j||j|jdf}t|}|S)Nrr)r netlocrjoinschemepathqueryr )rrprefixZurl_componentspartsZ new_netlocZnew_componentsr;r"r"r#r8|s   z$HeaderToHostHoister._prepend_to_hostN) rrr__doc__recompile IGNORECASEr=rr<r7r8r"r"r"r#r4]s r4cKs|js dS|jj|dd<dS)Nr_zx-amz-api-version)Zis_endpoint_discovery_operationZ service_model api_version)rVrUr!r"r"r##inject_api_version_header_if_neededsrLzchoose-service-namez/getattr.mturk.list_hi_ts_for_qualification_typeZ list_hits_for_qualification_typez$before-parameter-build.s3.UploadPartz#before-parameter-build.s3.PutObjectzcreating-client-classzcreating-client-class.s3zcreating-client-class.iot-datazafter-call.iamzafter-call.ec2.GetConsoleOutputz%after-call.cloudformation.GetTemplatezafter-call.s3.GetBucketLocationzbefore-parameter-buildzbefore-parameter-build.s3z%before-parameter-build.s3.ListObjectsz'before-parameter-build.s3.ListObjectsV2z,before-parameter-build.s3.ListObjectVersionszbefore-call.s3.PutBucketTaggingz!before-call.s3.PutBucketLifecyclez.before-call.s3.PutBucketLifecycleConfigurationzbefore-call.s3.PutBucketCorszbefore-call.s3.DeleteObjectsz#before-call.s3.PutBucketReplicationzbefore-call.s3.PutObjectzbefore-call.s3.UploadPartzbefore-call.s3.PutBucketAclzbefore-call.s3.PutBucketLoggingz$before-call.s3.PutBucketNotificationzbefore-call.s3.PutBucketPolicyz&before-call.s3.PutBucketRequestPaymentz"before-call.s3.PutBucketVersioningzbefore-call.s3.PutBucketWebsitezbefore-call.s3.PutObjectAclz!before-call.s3.PutObjectLegalHoldz!before-call.s3.PutObjectRetentionz)before-call.s3.PutObjectLockConfigurationz$before-parameter-build.s3.CopyObjectz(before-parameter-build.s3.UploadPartCopyz/before-parameter-build.s3.CreateMultipartUploadz%docs.*.s3.CopyObject.complete-sectionz)docs.*.s3.UploadPartCopy.complete-sectionzbefore-call.s3zbefore-call.glacierzbefore-call.apigatewayz!before-call.glacier.UploadArchivez'before-call.glacier.UploadMultipartPartzbefore-call.ec2.CopySnapshotz'request-created.machinelearning.Predictzneeds-retry.s3.UploadPartCopyzneeds-retry.s3.CopyObjectz&needs-retry.s3.CompleteMultipartUploadz$choose-signer.cognito-identity.GetIdz-choose-signer.cognito-identity.GetOpenIdTokenz-choose-signer.cognito-identity.UnlinkIdentityz8choose-signer.cognito-identity.GetCredentialsForIdentityz$choose-signer.sts.AssumeRoleWithSAMLz+choose-signer.sts.AssumeRoleWithWebIdentityz choose-signerz$before-parameter-build.s3.HeadObjectz#before-parameter-build.s3.GetObjectz'before-parameter-build.ec2.RunInstanceszs\0                   !                 1 /   F