U
    .b                  c   @   sP  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)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.d/ ZJdd1d2ZKd3d4 ZLd5d6 ZMd7d8 ZNG d9d: d:ZOd;d< ZPd=d> ZQd?d@ ZRdAdB ZSdCdD ZTdEdF ZUdGdH ZVdIdJ ZWdKdL ZXdMdN ZYdOdP ZZdQdR Z[dSdT Z\dUdV Z]dWdX Z^dYdZ Z_d[d\ Z`d]d^ Zad_d` Zbdadb Zcdcdd Zddedf Zedgdh Zfdidj Zgdkdl Zhdmdn Zidodp Zjdqdr Zkdsdt Zldudv Zmdwdx ZnG dydz dzZoG d{d| d|ZpG d}d~ d~Zqdd Zrdd Zsdd Ztde>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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dddddddddddddddg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gbZxenex 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is_global_accesspointpercent_encodeswitch_host_with_param)retryhandler)	translate)MD5_AVAILABLE)MissingServiceIdError)hyphenize_service_idz^[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'   5/tmp/pip-unpacked-wheel-7df6wvge/botocore/handlers.pyhandle_service_name_aliasc   s    r)   c                 K   s>   dt jk}t jd}|r:|r:| d }d|kr:t||d< d S )NZAWS_LAMBDA_FUNCTION_NAMEZ_X_AMZ_TRACE_IDheaderszX-Amzn-Trace-Id)osenvironr%   r
   )paramsr&   Zhas_lambda_nameZtrace_idr*   r'   r'   r(   add_recursion_detection_headerg   s    
r.   c                 K   s<   | d }d|kr| dd}d|kr0| dd}|| d< d S )Nbody   s   &#xD;   
s   &#xA;)replace)r-   r&   r/   r'   r'   r(   escape_xml_payloadp   s    r3   c                 K   s2   | d krd S | \}}t |r.td| d|_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rZz*tjt dd}|| j | }W n tk
rJ   Y dS X |jdkrZdS dS )N   utf-8targetencodingTErrorF)	r7   r   	XMLParserTreeBuilderfeedcontentcloser   tag)r9   parserrootr'   r'   r(   r4      s    
 
r4   c                 K   s   |  d}|sdS |dkr tjS |dkrVd|d}d| krJ| d | n|| d< dS |drd}|d	kr~t| rzd
}nd}|dkrd| d< |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v4a*)regionsigning_namesigningZv4s3Zs3v4aZs3v4zv4-unsigned-bodyFZpayload_signing_enabled)r%   botocoreUNSIGNEDupdate
startswithr   )contextrN   r&   rJ   rO   Zsignature_versionr'   r'   r(   set_operation_specific_signer   s(    


rV   c              
   K   s^   d| krZz(t t| d ddd}|| d< W n( tttfk
rX   tjddd Y nX d S )NZOutputzlatin-1r=   r2   zError decoding base64Texc_info)	base64	b64decodebytesdecode
ValueError	TypeErrorAttributeErrorr5   r6   r:   r&   valuer'   r'   r(   decode_console_output   s     rb   c                 K   s>   |j D ]2}|| krtt | |< td| | |f  qd S )Nz1injecting idempotency token (%s) into param '%s'.)Zidempotent_membersstruuidZuuid4r5   r6   )r-   modelr&   namer'   r'   r(   generate_idempotent_uuid   s    

rg   c              	   C   s>   zt t| } W n& ttfk
r8   tjddd Y nX | S )NzError loading quoted JSONTrW   )r	   loadsr   r]   r^   r5   r6   )ra   r'   r'   r(   decode_quoted_jsondoc   s
    ri   c              	   K   sR   d| krNzt j| d td}|| d< W n& ttfk
rL   tjddd Y nX d S )NTemplateBody)object_pairs_hookzerror loading JSONTrW   )r	   rh   r   r]   r^   r5   r6   r`   r'   r'   r(   json_decode_template_body   s     rl   c                 K   sR   d| krd S | d }t |sNt|sNd| dt j dtj d}t|d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   )r-   r&   bucket	error_msgr'   r'   r(   validate_bucket_name
  s    rw   c                 K   s   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r-   r&   r'   r'   r(   sse_md5  s    r|   c                 K   s   t | d dS )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CopySourceSSECustomerNry   r{   r'   r'   r(   copy_source_sse_md5!  s    r}   rx   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
isinstancerc   encoderY   	b64encoder   digestr\   )r-   sse_member_prefixZsse_key_memberZsse_md5_memberZkey_as_bytesZkey_md5_strZkey_b64_encodedr'   r'   r(   rz   +  s    


rz   c                 C   s   |  |d d k	o|d | kS )Nr~   r   r%   )r-   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.
    )rQ   rR   )r&   r'   r'   r(   disable_signingC  s    r   c                 K   sJ   | j dddkrd S d|krF|d }t|drFtd d|d d	< d S )
Nmethod )PUTPOSTr/   readz-Adding expect 100 continue header to request.z100-continuer*   ZExpect)httpr%   hasattrr5   r6   )re   r-   r&   r/   r'   r'   r(   add_expect_headerK  s    

r   c                   @   s   e Zd Zdd Zdd ZdS )DeprecatedServiceDocumenterc                 C   s
   || _ d S r#   )_replacement_service_name)selfZreplacement_service_namer'   r'   r(   __init__X  s    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   W  s   r   c           	      K   s   d|kr:|  d}| d}| d}|  |d nJd|kr|  d}| d}|  |d | d	}|  |d
 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_formf  s$    






r   c                 K   sH   |  d}|dkrdS t|tr.t|| d< nt|trDt|| d< 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   rc   _quote_source_headerdict_quote_source_header_from_dict)r-   r&   sourcer'   r'   r(   handle_copy_source_param  s    


r   c              
   C   s   zF| d }| d }|  d}t|r6| d| }n| d| }W n6 tk
r| } ztdt| dW 5 d }~X Y nX t|td d}|d k	r|d	| 7 }|S )
Nrm   r~   Z	VersionIdz/object//zMissing required parameter: ro   safez?versionId=%s)r%   rs   rr   KeyErrorr   rc   r   r   )Zsource_dictru   key
version_idfinaler'   r'   r(   r     s    

r   c                 C   s\   t | }|d kr"t| td dS | d |  | | d   }}t|td d| S d S )Nr   r   )VERSION_ID_SUFFIXrr   r   r   start)ra   resultfirstr   r'   r'   r(   r     s
    
"r   c                 C   sL   t |}||d d< |d |||d< d|d< i |d< | j|||jdS )Nr/   DestinationRegionurlGETr   r*   )Zregion_nameZoperation_name)copydeepcopyr2   Zgenerate_presigned_urlrf   )request_signerrequest_dictre   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   r-   r   r   r'   r'   r(   1_get_presigned_url_source_and_destination_regions  s    
r   c                 K   sN   d| d krd S t || d \}}t|| |||}|| d d< || d d< d S )NPresignedUrlr/   r   r   r   r-   r   re   r&   srcdestr   r'   r'   r(   inject_presigned_url_ec2  s         r   c                 K   s\   d| d krd S t || d \}}| d d= d| d kr<d S t|| |||}|| d d< d S )Nr   r/   PreSignedUrlr   r   r'   r'   r(   inject_presigned_url_rds  s"     
    r   c                 K   s   |j }|d k	rt| |j  d S r#   )output_shape_decode_policy_types)r:   re   r&   r   r'   r'   r(   json_decode_policies  s    r   c                 C   s   d}|j dkrf|j D ]L\}}|j dkrN|j|krN|| krNt| | | |< q|| krt| | | q|j dkr|j}| D ]}t|| qzd S )NZpolicyDocumentTypeZ	structurestringlist)	type_namemembersitemsrf   ri   r   member)r:   shapeZ
shape_namemember_nameZmember_shapeZshape_memberitemr'   r'   r(   r     s$    


r   c                 K   sJ   |j d krd S |j}tjt dd}|| | }|j}|| d< d S )Nr=   r>   ZLocationConstraint)rawrE   r   rB   rC   rD   rF   text)r:   r9   r&   Zresponse_bodyrH   rI   rM   r'   r'   r(   parse_get_bucket_location*  s    

r   c                 K   sD   d| kr@t | d tr(| d d| d< t| d d| d< d S )NUserDatar=   )r   rc   r   rY   r   r\   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_encodingD  s    
r   c              	   K   sv   |  d}|rt|tsdS | D ]L\}}z|d |d W q$ tk
rn   d||f }t|dY q$X q$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. ro   )r%   r   r   r   r   UnicodeEncodeErrorr   )r-   r&   metadatar   ra   rv   r'   r'   r(   validate_ascii_metadataN  s    


r   c                 K   sp   |j }|rt|dsdS dd |j D }|D ]:}|| kr0| | }|dd | |< td||| |  q0d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 kr|qS ))Z
ResourceIdZDelegationSetIdZChangeId)rf   ).0rf   r   r'   r'   r(   
<listcomp>x  s   
z#fix_route53_ids.<locals>.<listcomp>r   z%s %s -> %s)input_shaper   r   r   splitr5   r6   )r-   re   r&   r   r   rf   Z
orig_valuer'   r'   r(   fix_route53_idsm  s    r   c                 K   s   |  dd krd| d< 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   re   r-   r&   r   r'   r'   r(   add_glacier_version  s    r   c                 K   s(   |d  dd d kr$|}d|d d< d S )Nr*   Acceptzapplication/jsonr   r   r'   r'   r(   add_accept_header  s    r   c                 K   sv   | }|d }|d }t |tr&t|}| }d|krHtj|dd|d< || d|krht||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*   r/   zx-amz-content-sha256T)Zas_hexzx-amz-sha256-tree-hashN)r   r[   r   tellr   Zcalculate_sha256seekZcalculate_tree_hash)r-   r&   r   r*   r/   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   sl   d|kr0|  d}| d}|  |d n8d|krh|  d}| d}| d}|  |d d S )	Nzresponse-paramsrj   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   sF   dd l }z$|j}|dk r*td|j t W n tk
r@   Y nX d S )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.)sslOPENSSL_VERSION_INFOwarningswarnOPENSSL_VERSIONr   r_   )r&   r  Zopenssl_version_tupler'   r'   r(   &check_openssl_supports_tls_version_1_2  s    	r  c                 K   s>   | j dkr:d| jkr:d| jd< d| _ | jdd\| _| _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| krd|d< d| d< d S )NEncodingTypeTencoding_type_auto_setr   r'   )r-   rU   r&   r'   r'   r(   "set_list_objects_encoding_type_url  s    r  c                 K   s   t dddgddg| |d d S )N	DelimiterMarkerZ
NextMarkerZContentsr~   ZCommonPrefixesPrefixtop_level_keysnested_keysr:   rU   _decode_list_objectr:   rU   r&   r'   r'   r(   decode_list_object  s    	r  c                 K   s   t dddgddg| |d d S )Nr  r  Z
StartAfterr  r  r  r  r  r'   r'   r(   decode_list_object_v2  s    r  c                 K   s"   t ddddgdddg| |d d S )	NZ	KeyMarkerZNextKeyMarkerr  r  )ZVersionsr~   )ZDeleteMarkersr~   r  r  r  r  r'   r'   r(   decode_list_object_versions#  s    r  c                 C   sr   | ddkrn| drn| D ]}||krt|| ||< q|D ].\}}||kr>|| D ]}t|| ||< qVq>d S )Nr
  r   r  )r%   r   )r  r  r:   rU   r   Ztop_keyZ	child_keyr   r'   r'   r(   r  9  s    r  c                 K   sN   d| krJt | d tr,tt| d | d< nt | d trJt| d | d< d S )NZBody)r   rc   r   r   r[   r{   r'   r'   r(    convert_body_to_file_like_objectH  s
    r  c           	      C   sr   dddd}|  D ]X\}}|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_aliasesP  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   r  s    zParameterAlias.__init__c                 K   sR   |j rN| j|j jkrN| j|krN| j|kr<t| j| j|jd|| j|| j< d S )N)r#  aliasZ	operation)r   r'  r   r(  r   rf   pop)r   r-   re   r&   r'   r'   r(   r  v  s    

z&ParameterAlias.alias_parameter_in_callc                 K   s   | drP| j|jkrd S || j}|d}| | |d}| | n:| dr|d}| j|jkrtd S || j}| | d S )Nzdocs.request-paramsr   z
param-namezdocs.request-exampler   )rT   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=   )getvaluer\   r2   r'  r(  r   r   )r   r   rE   Zupdated_contentr'   r'   r(   r+    s     zParameterAlias._replace_contentN)r   r   r   r   r  r!  r+  r'   r'   r'   r(   r  q  s   r  c                   @   s   e Zd Zdd Zdd ZdS )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#   )getattrr.  )r   clientr&   r'   r'   r(   __call__  s    zClientMethodAlias.__call__N)r   r   r   r   r1  r'   r'   r'   r(   r-    s   r-  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   s
   || _ d S r#   )_header_name)r   header_namer'   r'   r(   r     s    zHeaderToHostHoister.__init__c                 K   sJ   | j |d k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   )r3  _ensure_header_is_valid_host_prepend_to_host)r   r-   r&   header_value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.ro   )_VALID_HOSTNAMEmatchr   )r   headerr<  r'   r'   r(   r5    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_componentsr9  r'   r'   r(   r6    s    

z$HeaderToHostHoister._prepend_to_hostN)r   r   r   __doc__recompile
IGNORECASEr;  r   r:  r5  r6  r'   r'   r'   r(   r2    s   
r2  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)re   r-   r&   r'   r'   r(   #inject_api_version_header_if_needed  s    rJ  c                 K   s   d| kr| d= 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    rK  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 | ]}| kr| d  |  qS )=r'   )r   r   Zretries_contextr'   r(   r     s   z%add_retry_headers.<locals>.<listcomp>z; zamz-sdk-request)rU   r%   r*   r?  )r   r&   r*   Zsdk_retry_keysZsdk_request_headersr'   rP  r(   add_retry_headers  s    
rQ  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.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ZipFilerP   Z
ContentMD5Z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)rx   )yrE  rY   r   loggingr+   rF  rd   r  ior   rQ   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   r5   objectr   ZREGISTER_LASTrG  rq   Z_ACCESSPOINT_ARNZ_OUTPOST_ARNr?  rs   r   r$   r)   r.   r3   r;   r4   rV   rb   rg   ri   rl   rw   r|   r}   rz   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  rJ  rK  rQ  Zdocument_auto_populated_paramZ
hide_paramr   ZBUILTIN_HANDLERSr'   r'   r'   r(   <module>   s:  4	


	.



%	

	!	!21	   