o
    ~j@cy                     @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
Z
ddlZ
ddl
mZ ddlmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZm Z  ddl!m"Z"m#Z#m$Z$ dd	l%m&Z&m'Z'm(Z(m)Z) dd
l
m*Z* ddl
m+Z+ ddlm,Z, ddlm-Z- ddl%m.Z. ddl%m/Z/ e0e1Z2e3 Z4e3 Z5e6dZ7dZ8dZ9e6d:e8e9gZ;e6dZ<ddiZ=dd Z>dd Z?dd Z@dd ZAdd  ZBd!d" ZCd#d$ ZDd%d& ZEd'd( ZFd)d* ZGd+d, ZHd-d. ZId/d0 ZJdd2d3ZKd4d5 ZLd6d7 ZMd8d9 ZNG d:d; d;ZOd<d= ZPd>d? ZQd@dA ZRdBdC ZSdDdE ZTdFdG ZUdHdI ZVdJdK ZWdLdM ZXdNdO ZYdPdQ ZZdRdS Z[dTdU Z\dVdW Z]dXdY Z^dZd[ Z_d\d] Z`d^d_ Zad`da Zbdbdc Zcddde Zddfdg Zedhdi Zfdjdk Zgdldm Zhdndo Zidpdq Zjdrds Zkdtdu Zldvdw Zmdxdy ZnG dzd{ d{ZoG d|d} d}ZpG d~d dZqdd Zrdd Zsdd Ztg de>fdepdfdeme5fdeme5fde$fde#fdeffdesfdeXfdeDfdeGfdeZfdeEfdeHfdehfdehfdehfdeQfdeQfde]fde]fde]fdePfdePfde?fdeNfde`fdeafde'fde'fde@fde@fdebfdebfdeVfdetfdeefdeAe4fdeAe4fdeAe4fdeMfdeMfdeMfdeMfdeMfdeMfdeCfdeIfdeIfdeIfdeIfdeJfdeIfdeIfdeIfdeJfdeIfde[fde[fde^fde_fdeifdejfdekfdegfdeddjufdedÃjufdedÃjufdec fdedfde\dȃfde\dȃfded˃jufded̃jufded΃jufdedσjufde\dуfdeddg dԢjvfde"fdeWfdeWfdeWfdeWfdeWfded܃jufded܃jufded܃jufded܃jufded܃jufdeWfdeWfded܃jufded܃jufdeWfdeWfded܃jufded܃jufdeOdjwfderfZxenex dS )z_Builtin event handlers.

This module contains builtin handlers for events emitted by botocore.
    N)BytesIO)utils)ETreeOrderedDictXMLParseErrorensure_bytesget_md5jsonquoteunquoteunquote_strurlsplit
urlunsplit)AppendParamDocumentationAutoPopulatedParamHideParamFromOperations)AliasConflictParameterErrorParamValidationErrorUnsupportedTLSVersionWarning)add_generate_db_auth_tokenadd_generate_presigned_postadd_generate_presigned_url)
SAFE_CHARSconditionally_calculate_md5percent_encodeswitch_host_with_param)retryhandler)	translate)MD5_AVAILABLE)MissingServiceIdError)hyphenize_service_id)is_global_accesspointz^[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]+$zruntime.sagemakerzsagemaker-runtimec                 K   s   t | | S N)SERVICE_NAME_ALIASESget)Zservice_namekwargs r'   5usr/lib/python3.10/site-packages/botocore/handlers.pyhandle_service_name_aliasc      r)   c                 K   sN   dt jv }t jd}|r!|r#| d }d|vr%t|dd|d< d S d S d S d S )NZAWS_LAMBDA_FUNCTION_NAMEZ_X_AMZN_TRACE_IDheaderszX-Amzn-Trace-Idz-=;:+&[]{}"',safe)osenvironr%   r
   )paramsr&   Zhas_lambda_nameZtrace_idr+   r'   r'   r(   add_recursion_detection_headerg   s   
r1   c                 K   s<   | d }d|v r| dd}d|v r| dd}|| d< d S )Nbody   s   &#xD;   
s   &#xA;)replace)r0   r&   r2   r'   r'   r(   escape_xml_payloadp   s   r6   c                 K   s6   | d u rd S | \}}t |rtd| d|_d S d S )NzWError found for response with 200 status code, errors: %s, changing status code to 500.i  )_looks_like_special_case_errorloggerdebugstatus_code)responser&   http_responseparsedr'   r'   r(   check_for_200_error   s   
r>   c                 C   s\   | j dkr,ztjt dd}|| j | }W n
 ty$   Y dS w |jdkr,dS dS )N   utf-8targetencodingTErrorF)	r:   r   	XMLParserTreeBuilderfeedcontentcloser   tag)r<   parserrootr'   r'   r(   r7      s   

r7   c                 K   s   |  d}|s	dS |dkrtjS |dkrdS |drL|dkr7d|d}d	| v r0| d	 | n|| d	< d}nd}|d
krAd| d< |dkrJd| }|S dS )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_typeNnoneZbearerv4Zv4a*)regionsigning_namesigningzv4-unsigned-bodyFZpayload_signing_enableds3)r%   botocoreUNSIGNED
startswithupdate)contextrR   r&   rM   rS   Zsignature_versionr'   r'   r(   set_operation_specific_signer   s*   



rZ   c              
   K   s`   d| v r.zt t| d ddd}|| d< W d S  tttfy-   tjddd Y d S w d S )NOutputzlatin-1r@   r5   zError decoding base64Texc_info)	base64	b64decodebytesdecode
ValueError	TypeErrorAttributeErrorr8   r9   r=   r&   valuer'   r'   r(   decode_console_output   s   rg   c                 K   s>   |j D ]}|| vrtt | |< td| | |f  qd S )Nz1injecting idempotency token (%s) into param '%s'.)Zidempotent_membersstruuidZuuid4r8   r9   )r0   modelr&   namer'   r'   r(   generate_idempotent_uuid   s   

rl   c              	   C   s<   z
t t| } W | S  ttfy   tjddd Y | S w )NzError loading quoted JSONTr\   )r	   loadsr   rb   rc   r8   r9   )rf   r'   r'   r(   decode_quoted_jsondoc   s   rn   c              	   K   sT   d| v r(zt j| d td}|| d< W d S  ttfy'   tjddd Y d S w d S )NTemplateBody)object_pairs_hookzerror loading JSONTr\   )r	   rm   r   rb   rc   r8   r9   re   r'   r'   r(   json_decode_template_body  s   rq   c                 K   sV   d| vrd S | d }t |s't|s)d| dt j dtj d}t|dd S d S )NBucketzInvalid bucket name "z%": Bucket name must match the regex "z#" or be an ARN matching the regex ""report)VALID_BUCKETsearchVALID_S3_ARNpatternr   )r0   r&   bucket	error_msgr'   r'   r(   validate_bucket_name  s   
r|   c                 K      t | d dS )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_md5r0   r&   r'   r'   r(   sse_md5     r   c                 K   r}   )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.
    ZCopySourceSSECustomerNr   r   r'   r'   r(   copy_source_sse_md5#  r   r   r~   c                 C   sv   t | |sd S |d }|d }| | }t|tr|d}tt| d}t|d}|| |< || |< d S )NKeyKeyMD5r@   )	_needs_s3_sse_customization
isinstancerh   encoder^   	b64encoder   digestra   )r0   sse_member_prefixZsse_key_memberZsse_md5_memberZkey_as_bytesZkey_md5_strZkey_b64_encodedr'   r'   r(   r   -  s   


r   c                 C   s   |  |d d uo|d | vS )Nr   r   r%   )r0   r   r'   r'   r(   r   >  s   
r   c                  K   s   t jS )zk
    This handler disables request signing by setting the signer
    name to a special sentinel value.
    )rU   rV   )r&   r'   r'   r(   disable_signingE  s   r   c                 K   sR   | j dddvrd S d|v r%|d }t|dr'td d|d d	< d S d S d S )
Nmethod )ZPUTPOSTr2   readz-Adding expect 100 continue header to request.z100-continuer+   ZExpect)httpr%   hasattrr8   r9   )rj   r0   r&   r2   r'   r'   r(   add_expect_headerM  s   

r   c                   @      e Zd Zdd Zdd ZdS )DeprecatedServiceDocumenterc                 C   
   || _ d S r#   )_replacement_service_name)selfZreplacement_service_namer'   r'   r(   __init__Z     
z$DeprecatedServiceDocumenter.__init__c                 K   s>   |j   |d |j | j| j |d |j   d S )Nz.This service client is deprecated. Please use z	 instead.)styleZstart_importantwriterefr   Zend_important)r   section
event_namer&   r'   r'   r(   inject_deprecation_notice]  s   


z5DeprecatedServiceDocumenter.inject_deprecation_noticeN)__name__
__module____qualname__r   r   r'   r'   r'   r(   r   Y  s    r   c           	      K   s   d|v r|  d}| d}| d}|  |d d S d|v rE|  d}| d}|  |d | d	}|  |d
 d S d S )Nzrequest-examplestructure-value
CopySourcemember-valuezH'string' or {'Bucket': 'string', 'Key': 'string', 'VersionId': 'string'}zrequest-params
param-typez:type CopySource: str or dictzparam-documentationaq  The 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   )	r   r   r&   parent
param_linevalue_portionparam_sectiontype_sectionZdoc_sectionr'   r'   r(   document_copy_source_formh  s&   






r   c                 K   sN   |  d}|du rdS t|trt|| d< dS t|tr%t|| d< dS dS )aH  Convert 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.

    r   N)r%   r   rh   _quote_source_headerdict_quote_source_header_from_dict)r0   r&   sourcer'   r'   r(   handle_copy_source_param  s   


r   c              
   C   s   z#| d }| d }|  d}t|r| d| }n| d| }W n ty9 } z
tdt| dd }~ww t|td d}|d urL|d	| 7 }|S )
Nrr   r   Z	VersionIdz/object//zMissing required parameter: rt   r,   z?versionId=%s)r%   rx   rw   KeyErrorr   rh   r   r   )Zsource_dictrz   key
version_idfinaler'   r'   r(   r     s$   

r   c                 C   sX   t | }|d u rt| td dS | d |  | | d  }}t|td d| S )Nr   r,   )VERSION_ID_SUFFIXrw   r   r   start)rf   resultfirstr   r'   r'   r(   r     s
   
"r   c                 C   sL   t |}||d d< |d |||d< d|d< i |d< | j|||jdS )Nr2   DestinationRegionurlGETr   r+   )Zregion_nameZoperation_name)copydeepcopyr5   Zgenerate_presigned_urlrk   )request_signerrequest_dictrj   source_regiondestination_regionZrequest_dict_copyr'   r'   r(   _get_cross_region_presigned_url  s   
r   c                 C   s   | j }|d}||fS )NSourceRegion)Z_region_namer%   )r   r0   r   r   r'   r'   r(   1_get_presigned_url_source_and_destination_regions  s   
r   c                 K   sN   d| d v rd S t || d \}}t|| |||}|| d d< || d d< d S )NPresignedUrlr2   r   r   r   r0   r   rj   r&   srcdestr   r'   r'   r(   inject_presigned_url_ec2  s   
r   c                 K   s\   d| d vrd S t || d \}}| d d= d| d v rd S t|| |||}|| d d< d S )Nr   r2   PreSignedUrlr   r   r'   r'   r(   inject_presigned_url_rds  s   

r   c                 K   s"   |j }|d urt| |j  d S d S r#   )output_shape_decode_policy_types)r=   rj   r&   r   r'   r'   r(   json_decode_policies
  s   r   c                 C   s   d}|j dkr3|j D ]&\}}|j dkr'|j|kr'|| v r't| | | |< q|| v r2t| | | q|j dkrE|j}| D ]	}t|| q=d S d S )NZpolicyDocumentTypeZ	structurestringlist)	type_namemembersitemsrk   rn   r   member)r=   shapeZ
shape_namemember_nameZmember_shapeZshape_memberitemr'   r'   r(   r     s$   




r   c                 K   sJ   |j d u rd S |j}tjt dd}|| | }|j}|| d< d S )Nr@   rA   ZLocationConstraint)rawrH   r   rE   rF   rG   rI   text)r=   r<   r&   Zresponse_bodyrK   rL   rQ   r'   r'   r(   parse_get_bucket_location,  s   

r   c                 K   sH   d| v r"t | d tr| d d| d< t| d d| d< d S d S )NUserDatar@   )r   rh   r   r^   r   ra   r   r'   r'   r(   base64_encode_user_data<  s   r   c                 C   s   d}t | |}|jS )Nzw**This value will be base64 encoded automatically. Do not base64 encode this value prior to performing the operation.**r   Zappend_documentation)paramdescriptionappendr'   r'   r(   document_base64_encodingF  s   
r   c              	   K   sn   |  d}|rt|tsdS | D ]"\}}z|d |d W q ty4   d||f }t|dw dS )aE  Verify 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."

    ZMetadataNasciizvNon ascii characters found in S3 metadata for key "%s", value: "%s".  
S3 metadata can only contain ASCII characters. rt   )r%   r   r   r   r   UnicodeEncodeErrorr   )r0   r&   metadatar   rf   r{   r'   r'   r(   validate_ascii_metadataP  s   



r   c                 K   sp   |j }|r
t|dsdS dd |j D }|D ]}|| v r5| | }|dd | |< td||| |  qdS )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'``).
    r   Nc                 S   s   g | ]\}}|j d v r|qS ))Z
ResourceIdZDelegationSetIdZChangeId)rk   ).0rk   r   r'   r'   r(   
<listcomp>z  s
    
z#fix_route53_ids.<locals>.<listcomp>r   z%s %s -> %s)input_shaper   r   r   splitr8   r9   )r0   rj   r&   r   r   rk   Z
orig_valuer'   r'   r(   fix_route53_idso  s   r   c                 K   s   |  dd u rd| d< d S d S )N	accountId-r   r   r'   r'   r(   inject_account_id  s   r   c                 K   s   |}| j d |d d< d S )NZ
apiVersionr+   zx-amz-glacier-version)r   rj   r0   r&   r   r'   r'   r(   add_glacier_version  s   r   c                 K   s,   |d  dd d u r|}d|d d< d S d S )Nr+   ZAcceptzapplication/jsonr   r   r'   r'   r(   add_accept_header  s   r   c                 K   sv   | }|d }|d }t |trt|}| }d|vr$tj|dd|d< || d|vr4t||d< || dS )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+   r2   zx-amz-content-sha256T)Zas_hexzx-amz-sha256-tree-hashN)r   r`   r   tellr   Zcalculate_sha256seekZcalculate_tree_hash)r0   r&   r   r+   r2   Zstarting_positionr'   r'   r(   add_glacier_checksums  s   


r   c                  C   s   d} t d| jS )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 <http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html>`_.

        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_checksum  s   r  c                 K   sr   d|v r|  d}| d}|  |d d S d|v r7|  d}| d}| d}|  |d d S d S )	Nzresponse-paramsro   r   z(*dict*) --zresponse-exampler   r   z{}r   )r   r   r&   Ztemplate_body_sectionr   r   r   r   r'   r'   r(   0document_cloudformation_get_template_return_type  s   




r  c                 K   s   t | d d S )NZPredictEndpoint)r   requestr&   r'   r'   r(   switch_host_machinelearning  s   r  c                  K   sJ   dd l }z|j}|dk rtd|j t W d S W d S  ty$   Y d S w )Nr   )   r   r  zCurrently 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.)sslZOPENSSL_VERSION_INFOwarningswarnZOPENSSL_VERSIONr   rd   )r&   r  Zopenssl_version_tupler'   r'   r(   &check_openssl_supports_tls_version_1_2  s   

r
  c                 K   sF   | j dkrd| jv r!d| jd< d| _ | jdd\| _| _d S d S d S )Nr   ?z!application/x-www-form-urlencodedzContent-Typer   r  )r   r   r+   r   datar  r'   r'   r(   change_get_to_post  s
   
r  c                 K   s    d| vrd|d< d| d< d S d S )NEncodingTypeTencoding_type_auto_setr   r'   )r0   rY   r&   r'   r'   r(   "set_list_objects_encoding_type_url  s   r  c                 K      t g dddg| |d d S )N)	DelimiterMarkerZ
NextMarkerZContentsr   ZCommonPrefixesPrefixtop_level_keysnested_keysr=   rY   _decode_list_objectr=   rY   r&   r'   r'   r(   decode_list_object  s   	
r  c                 K   r  )N)r  r  Z
StartAfterr  r  r  r  r  r'   r'   r(   decode_list_object_v2  s   
r  c                 K   s   t g dg d| |d d S )N)Z	KeyMarkerZNextKeyMarkerr  r  ))ZVersionsr   )ZDeleteMarkersr   r  r  r  r  r'   r'   r(   decode_list_object_versions%  s   
r  c                 C   sz   | ddkr7| dr9| D ]}||v rt|| ||< q|D ]\}}||v r6|| D ]
}t|| ||< q+qd S d S d S )Nr  r   r  )r%   r   )r  r  r=   rY   r   Ztop_keyZ	child_keyr   r'   r'   r(   r  ;  s   r  c                 K   sX   d| v r(t | d trtt| d | d< d S t | d tr*t| d | d< d S d S d S )NZBody)r   rh   r   r   r`   r   r'   r'   r(    convert_body_to_file_like_objectJ  s   r   c           	      C   sr   dddd}|  D ],\}}|dd\}}t||}d| |jtf}d| d	 |jf}| | | | q
d S )
NZFiltersZfromTimeZreturnFields)zec2.*.Filterzlogs.CreateExportTask.fromzcloudsearchdomain.Search.return.r  zbefore-parameter-build.zdocs.*.z.complete-section)r   rsplitParameterAliasalias_parameter_in_callREGISTER_FIRST alias_parameter_in_documentationr   )	Zhandler_listaliasesoriginalnew_nameZevent_portionoriginal_nameZparameter_aliasZ#parameter_build_event_handler_tupleZdocs_event_handler_tupler'   r'   r(   _add_parameter_aliasesR  s"   


r+  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r#  c                 C   s   || _ || _d S r#   )_original_name_alias_name)r   r*  Z
alias_namer'   r'   r(   r   t  s   
zParameterAlias.__init__c                 K   s^   |j r)| j|j jv r+| j|v r-| j|v rt| j| j|jd|| j|| j< d S d S d S d S )N)r(  aliasZ	operation)r   r,  r   r-  r   rk   pop)r   r0   rj   r&   r'   r'   r(   r$  x  s   

z&ParameterAlias.alias_parameter_in_callc                 K   s   | dr)| j|jvrd S || j}|d}| | |d}| | d S | drH|d}| j|jvr;d S || j}| | d S d S )Nzdocs.request-paramsr   z
param-namezdocs.request-exampler   )rW   r,  Zavailable_sectionsr   _replace_content)r   r   r   r&   r   Zparam_type_sectionZparam_name_sectionr'   r'   r(   r&    s   





z/ParameterAlias.alias_parameter_in_documentationc                 C   s4   |  d}|| j| j}|  || d S )Nr@   )getvaluera   r5   r,  r-  r   r   )r   r   rH   Zupdated_contentr'   r'   r(   r0    s   zParameterAlias._replace_contentN)r   r   r   r   r$  r&  r0  r'   r'   r'   r(   r#  s  s
    r#  c                   @   r   )ClientMethodAliasc                 C   s
   || _ dS )zAliases a non-extant method to an existing method.

        :param actual_name: The name of the method that actually exists on
            the client.
        N)_actual)r   Zactual_namer'   r'   r(   r     s   
zClientMethodAlias.__init__c                 K   s   t || jS r#   )getattrr3  )r   Zclientr&   r'   r'   r(   __call__  r*   zClientMethodAlias.__call__N)r   r   r   r   r5  r'   r'   r'   r(   r2    s    r2  c                   @   s>   e Zd ZdZedejZdd Zdd Z	dd Z
d	d
 ZdS )HeaderToHostHoisterz;Takes a header and moves it to the front of the hoststring.z(?!-)[a-z\d-]{1,63}(?<!-)$c                 C   r   r#   )_header_name)r   header_namer'   r'   r(   r     r   zHeaderToHostHoister.__init__c                 K   sJ   | j |d vr	dS |d | j  }| | |d }| ||}||d< dS )a  Hoist a header to the hostname.

        Hoist a header to the beginning of the hostname with a suffix "." after
        it. The original header should be removed from the header map. This
        method is intended to be used as a target for the before-call event.
        r+   Nr   )r7  _ensure_header_is_valid_host_prepend_to_host)r   r0   r&   Zheader_valueZoriginal_urlnew_urlr'   r'   r(   hoist  s   
zHeaderToHostHoister.hoistc                 C   s   | j |}|stddd S )Nz`Hostnames must contain only - and alphanumeric characters, and between 1 and 63 characters long.rt   )_VALID_HOSTNAMEmatchr   )r   headerr>  r'   r'   r(   r9    s   z0HeaderToHostHoister._ensure_header_is_valid_hostc                 C   sH   t |}|jd}|g| }d|}|j||j|jdf}t|}|S )Nr!  r   )r   netlocr   joinschemepathqueryr   )r   r   prefixZurl_componentspartsZ
new_netlocZnew_componentsr;  r'   r'   r(   r:    s   

z$HeaderToHostHoister._prepend_to_hostN)r   r   r   __doc__recompile
IGNORECASEr=  r   r<  r9  r:  r'   r'   r'   r(   r6    s    
r6  c                 K   s   | j sd S | jj|d d< d S )Nr+   zx-amz-api-version)Zis_endpoint_discovery_operationZservice_modelapi_version)rj   r0   r&   r'   r'   r(   #inject_api_version_header_if_needed  s   rL  c                 K   s   d| v r	| d= dS dS )z>Operation requires h2 which is currently unsupported in PythonZstart_conversationNr'   )Zclass_attributesr&   r'   r'   r(    remove_lex_v2_start_conversation  s   
rM  c                    sN   | j d  s
d S | j} d |d< d} fdd|D }d||d< d S )	Nretrieszinvocation-idzamz-sdk-invocation-id)Zttlattemptmaxc                    s&   g | ]}| v r| d  |  qS )=r'   )r   r   Zretries_contextr'   r(   r     s
    z%add_retry_headers.<locals>.<listcomp>z; zamz-sdk-request)rY   r%   r+   rA  )r  r&   r+   Zsdk_retry_keysZsdk_request_headersr'   rR  r(   add_retry_headers  s   
rS  zchoose-service-namez/getattr.mturk.list_hi_ts_for_qualification_typeZ list_hits_for_qualification_typez$before-parameter-build.s3.UploadPartz#before-parameter-build.s3.PutObjectzcreating-client-classzcreating-client-class.s3zcreating-client-class.iot-dataz$creating-client-class.lex-runtime-v2zafter-call.iamzafter-call.ec2.GetConsoleOutputz%after-call.cloudformation.GetTemplatezafter-call.s3.GetBucketLocationzbefore-parameter-buildzbefore-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-sectionzbefore-callzbefore-call.s3zbefore-call.glacierzbefore-call.apigatewayzbefore-call.s3.PutObjectzbefore-call.s3.UploadPartzbefore-call.s3.DeleteObjectsz.before-call.s3.PutBucketLifecycleConfigurationz!before-call.glacier.UploadArchivez'before-call.glacier.UploadMultipartPartzbefore-call.ec2.CopySnapshotzrequest-createdz'request-created.machinelearning.Predictzneeds-retry.s3.UploadPartCopyzneeds-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.s3.SelectObjectContentz'before-parameter-build.ec2.RunInstancesz<before-parameter-build.autoscaling.CreateLaunchConfigurationzbefore-parameter-build.route53zbefore-parameter-build.glacierzafter-call.s3.ListObjectszafter-call.s3.ListObjectsV2z after-call.s3.ListObjectVersionsz(request-created.cloudsearchdomain.Searchz!docs.*.glacier.*.complete-sectionr   zJNote: this parameter is set to "-" bydefault if no value is not specified.z-docs.*.glacier.UploadArchive.complete-sectionr   z3docs.*.glacier.UploadMultipartPart.complete-sectionzDdocs.request-params.glacier.CompleteMultipartUpload.complete-sectionz2docs.*.cloudformation.GetTemplate.complete-sectionz(docs.*.ec2.RunInstances.complete-sectionr   z=docs.*.autoscaling.CreateLaunchConfiguration.complete-sectionz(docs.*.ec2.CopySnapshot.complete-sectionr   r   zdocs.*.s3.*.complete-sectionZSSECustomerKeyMD5ZCopySourceSSECustomerKeyMD5z1docs.*.lambda.UpdateFunctionCode.complete-sectionZipFilerT   Z
ContentMD5)ZDeleteObjectsZPutBucketAclZPutBucketCorsZPutBucketLifecycleZPutBucketLoggingZPutBucketNotificationZPutBucketPolicyZPutBucketReplicationZPutBucketRequestPaymentZPutBucketTaggingZPutBucketVersioningZPutBucketWebsiteZPutObjectAclzcreating-client-class.rdsz%before-call.rds.CopyDBClusterSnapshotzbefore-call.rds.CreateDBClusterzbefore-call.rds.CopyDBSnapshotz+before-call.rds.CreateDBInstanceReadReplicaz:before-call.rds.StartDBInstanceAutomatedBackupsReplicationz1docs.*.rds.CopyDBClusterSnapshot.complete-sectionr   z+docs.*.rds.CreateDBCluster.complete-sectionz*docs.*.rds.CopyDBSnapshot.complete-sectionz7docs.*.rds.CreateDBInstanceReadReplica.complete-sectionzFdocs.*.rds.StartDBInstanceAutomatedBackupsReplication.complete-sectionz)before-call.neptune.CopyDBClusterSnapshotz#before-call.neptune.CreateDBClusterz5docs.*.neptune.CopyDBClusterSnapshot.complete-sectionz/docs.*.neptune.CreateDBCluster.complete-sectionz'before-call.docdb.CopyDBClusterSnapshotz!before-call.docdb.CreateDBClusterz3docs.*.docdb.CopyDBClusterSnapshot.complete-sectionz-docs.*.docdb.CreateDBCluster.complete-sectionzdocs.title.sms-voicezpinpoint-sms-voice)r~   )yrG  r^   r   loggingr.   rH  ri   r  ior   rU   Zbotocore.authr   Zbotocore.compatr   r   r   r   r   r	   r
   r   r   r   r   Zbotocore.docs.utilsr   r   r   Zbotocore.exceptionsr   r   r   Zbotocore.signersr   r   r   Zbotocore.utilsr   r   r   r   r   r   r   r   r    r!   	getLoggerr   r8   objectr%  ZREGISTER_LASTrI  rv   Z_ACCESSPOINT_ARNZ_OUTPOST_ARNrA  rx   r   r$   r)   r1   r6   r>   r7   rZ   rg   rl   rn   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  r  r
  r  r  r  r  r  r  r   r+  r#  r2  r6  rL  rM  rS  Zdocument_auto_populated_paramZ
hide_paramr   ZBUILTIN_HANDLERSr'   r'   r'   r(   <module>   sd  4


	0



%	

	!	!21#&'()+./0123456789:;<=>@DEFHKLMNOPQRSTUVWXZ]^_`acfnrv{    
          $  <  =  >  ?  @  B  G  K  O  S  W  ]  ^  a  e  k  l  o  s  z     