U aŴa@s\dZddlZddlZddlZddlZddlZddlZddlmZm Z 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'm*Z*ddl'Z'ddl+Z'e,e-Z.e/Z0e/Z1e2dZ3dZ4dZ5e2d6e4e5gZ7e2dZ8ddiZ9ddZ:ddZ;d d!Zd&d'Z?d(d)Z@d*d+ZAd,d-ZBd.d/ZCd0d1ZDd2d3ZEdd5d6ZFd7d8ZGd9d:ZHd;d<ZIGd=d>d>e/ZJd?d@ZKdAdBZLdCdDZMdEdFZNdGdHZOdIdJZPdKdLZQdMdNZRdOdPZSdQdRZTdSdTZUdUdVZVdWdXZWdYdZZXd[d\ZYd]d^ZZd_d`Z[dadbZ\dcddZ]dedfZ^dgdhZ_didjZ`dkdlZadmdnZbdodpZcdqdrZddsdtZedudvZfdwdxZgdydzZhd{d|ZiGd}d~d~e/ZjGddde/ZkGddde/ZlddZmddZnde:fdekdfdehe1fdehe1fdefdefdeafdenfdeSfde?fdeBfdeUfde@fdeCfdecfdecfdecfdeLfdeLfdeXfdeXfdeXfdeKfdeKfdeIfde[fde\fde&fde&fde;fde;fde]fde]fdeQfde`fdefdeDfdeDfdeDfdeDfdeEfdeDfdeDfdeDfdeEfdeVfdeVfdeYfdeZfdedfdeefdeffdebfdeddjofdedjofdedjofde^fde_fdeWdƃfdeWdƃfdedɃjofdedʃjofded̃jofded̓jofdeWdσfdedddddddddddddddg jpfdefdeRfdeRfdeRfdeRfdeRfdedjofdedjofdedjofdedjofdedjofdeRfdeRfdedjofdedjofdeRfdeRfdedjofdedjofdeJdjqfdemfg`ZreierdS)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 XMLParseErrorETree)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)conditionally_calculate_md5) retryhandler)utils) translatez^[a-zA-Z0-9.\-_]{1,255}$z\^arn:(aws).*:(s3|s3-object-lambda):[a-z\-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-]{1,63}$zt^arn:(aws).*:s3-outposts:[a-z\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\-]{1,63}$|z\?versionId=[^\s]+$zruntime.sagemakerzsagemaker-runtimecKs t||SN)SERVICE_NAME_ALIASESget)Z service_namekwargsr&/Users/jalaguru/Documents/Proserv/artifacts/aws_dms_cdk_automation/aws-dms-cdk-automation/venv/lib/python3.8/site-packages/botocore/handlers.pyhandle_service_name_aliasOsr(cKsr|d}d}d|kr$d}|dd}d|kr|jD]2}||krtt||<td|||fqdS)Nz1injecting idempotency token (%s) into param '%s'.)Zidempotent_membersstruuiduuid4r1r2)r.modelr%namer&r&r'generate_idempotent_uuids   r_c Cs>ztt|}Wn&ttfk r8tjdddYnX|S)NzError loading quoted JSONTrN)rloadsrrTrUr1r2)rXr&r&r'decode_quoted_jsondocs rac KsRd|krNztj|dtd}||d<Wn&ttfk rLtjdddYnXdS)N TemplateBody)object_pairs_hookzerror loading JSONTrN)rr`r rTrUr1r2rWr&r&r'json_decode_template_bodys rdcKsHd|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)r.r%bucket error_msgr&r&r'validate_bucket_namesrncKst|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_md5r.r%r&r&r'sse_md5srscKst|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. ZCopySourceSSECustomerNrprrr&r&r'copy_source_sse_md5srtrocCsxt||sdS|d}|d}||}t|tjr<|d}tt| d}t| d}|||<|||<dS)NKeyKeyMD5r9) _needs_s3_sse_customization isinstancer text_typeencoderP b64encoderdigestrS)r.sse_member_prefixZsse_key_memberZsse_md5_memberZ key_as_bytesZ key_md5_strZkey_b64_encodedr&r&r'rqs    rqcCs||ddk o|d|kS)Nrurvr$)r.r}r&r&r'rws rwcKstjS)zk This handler disables request signing by setting the signer name to a special sentinel value. )rIrJ)r%r&r&r'disable_signingsrcKsJ|jdddkrdSd|krF|d}t|drFtdd|dd <dS) Nmethod)PUTPOSTr)readz-Adding expect 100 continue header to request.z 100-continuer,ZExpect)httpr$hasattrr1r2)r]r.r%r)r&r&r'add_expect_header s  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_notice0s   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-documentationaqThe 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. To specify an S3 access point, provide the access point ARN for the ``Bucket`` key in the copy source dictionary. If you want to provide the copy source for an S3 access point as a string instead of a dictionary, the ARN provided must be the full S3 access point object ARN (i.e. {accesspoint_arn}/object/{key}) get_section clear_textr) rrr%parent param_line value_portion param_section type_sectionZ doc_sectionr&r&r'document_copy_source_form;s         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$rxr string_types_quote_source_headerdict_quote_source_header_from_dict)r.r%sourcer&r&r'handle_copy_source_param^s   rc CszB|d}|d}|d}t|r4d||f}n d||f}Wn4tk rv}ztdt|dW5d}~XYnXt|tdd }|dk r|d |7}|S) NreruZ VersionIdz %s/object/%sz%s/%szMissing required parameter: %srf/safez ?versionId=%s)r$rjriKeyErrorrrZrr)Z source_dictrlkey version_idfinaler&r&r'rys    rcCs\t|}|dkr"t|tddS|d|||d}}t|tdd|SdS)Nrr)VERSION_ID_SUFFIXrirrstart)rXresultfirstrr&r&r'rs  "rcCsLt|}||dd<|d|||d<d|d<i|d<|j|||jdS)Nr)DestinationRegionurlGETrr,)Z region_nameZoperation_name)copydeepcopyr-Zgenerate_presigned_urlr^)request_signer request_dictr] source_regiondestination_regionZrequest_dict_copyr&r&r'_get_cross_region_presigned_urls  rcCs|j}|d}||fS)N SourceRegion)Z _region_namer$)rr.rrr&r&r'1_get_presigned_url_source_and_destination_regionss rcKsNd|dkrdSt||d\}}t|||||}||dd<||dd<dS)N PresignedUrlr)rrrr.rr]r%srcdestrr&r&r'inject_presigned_url_ec2s  rcKs\d|dkrdSt||d\}}|dd=d|dkrr?r@rBtext)r6r5r%Z response_bodyrDrEZregionr&r&r'parse_get_bucket_locations  rcKsFd|krBt|dtjr*|dd|d<t|dd|d<dS)NUserDatar9)rxrryrzrPr{rSrrr&r&r'base64_encode_user_datasrcCsd}t||}|jS)Nzw**This value will be base64 encoded automatically. Do not base64 encode this value prior to performing the operation.**rZappend_documentation)param descriptionappendr&r&r'document_base64_encodings rc Ks|d}|rt|tsdS|D]Z\}}z|d|dWq$tk r|}zd||f}t|dW5d}~XYq$Xq$dS)aEVerify S3 Metadata only contains ascii characters. From: http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html "Amazon S3 stores user-defined metadata in lowercase. Each name, value pair must conform to US-ASCII when using REST and UTF-8 when using SOAP or browser-based uploads via POST." ZMetadataNasciizvNon ascii characters found in S3 metadata for key "%s", value: "%s". S3 metadata can only contain ASCII characters. rf)r$rxrrrzUnicodeEncodeErrorr)r.r%metadatarrXrrmr&r&r'validate_ascii_metadatas  rcKsp|j}|rt|dsdSdd|jD}|D]:}||kr0||}|dd||<td||||q0dS)z Check for and split apart Route53 resource IDs, setting only the last piece. This allows the output of one operation (e.g. ``'foo/1234'``) to be used as input in another operation (e.g. it expects just ``'1234'``). rNcSsg|]\}}|jdkr|qS))Z ResourceIdZDelegationSetId)r^).0r^rr&r&r' As z#fix_route53_ids..rz %s %s -> %s) input_shaperrrsplitr1r2)r.r]r%rrr^Z orig_valuer&r&r'fix_route53_ids6srcKs|ddkrd|d<dS)N accountId-r~rrr&r&r'inject_account_idKsrcKs|}|jd|dd<dS)NZ apiVersionr,zx-amz-glacier-version)rr]r.r%rr&r&r'add_glacier_versionTsrcKs(|ddddkr$|}d|dd<dS)Nr,Acceptzapplication/jsonr~rr&r&r'add_accept_headerZsrcKsz|}|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) rxr binary_typeBytesIOtellrZcalculate_sha256seekZcalculate_tree_hash)r.r%rr,r)Zstarting_positionr&r&r'add_glacier_checksums`s     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_checksums rcKsld|kr0|d}|d}||dn8d|krh|d}|d}|d}||ddS) Nzresponse-paramsrbrz (*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_VERSIONrrV)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 rcKsd|krd|d<d|d<dS)N EncodingTypeTencoding_type_auto_setrr&)r.rLr%r&r&r'"set_list_objects_encoding_type_urlsrcKstdddgddg||ddS)N DelimiterMarkerZ NextMarkerZContentsruZCommonPrefixesPrefixtop_level_keys nested_keysr6rL_decode_list_objectr6rLr%r&r&r'decode_list_objects rcKstdddgddg||ddS)Nrr Z StartAfterr r r rrr&r&r'decode_list_object_v2s rcKs"tddddgdddg||ddS) NZ KeyMarkerZ NextKeyMarkerr r)ZVersionsru)Z DeleteMarkersrur r rrr&r&r'decode_list_object_versionssrcCsr|ddkrn|drn|D]}||krt||||<q|D].\}}||kr>||D]}t||||<qVq>dS)Nrrr)r$r)r rr6rLrZtop_keyZ child_keyrr&r&r'rs  rcKsVd|krRt|dtjr0tt|d|d<n"t|dtjrRt|d|d<dS)NZBody)rxrrrrrrrr&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) rcCs||_||_dSr")_original_name _alias_name)rrZ alias_namer&r&r'r1szParameterAlias.__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}(?Operation requires h2 which is currently unsupported in PythonZstart_conversationNr&)Zclass_attributesr%r&r&r' remove_lex_v2_start_conversationsrEzchoose-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-dataz$creating-client-class.lex-runtime-v2zafter-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.ListObjectVersionsz$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.apigatewayzbefore-call.s3.PutObjectzbefore-call.s3.UploadPartzbefore-call.s3.DeleteObjectsz.before-call.s3.PutBucketLifecycleConfigurationz!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^8                   !      #         1/   C