o
    ˷ey                     @   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)service_namekwargs r(   H/var/www/ideatree/venv/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 )NAWS_LAMBDA_FUNCTION_NAME_X_AMZN_TRACE_IDheaderszX-Amzn-Trace-Idz-=;:+&[]{}"',safe)osenvironr%   r
   )paramsr'   has_lambda_nametrace_idr.   r(   r(   r)   add_recursion_detection_headerg   s   
r6   c                 K   s<   | d }d|v r| dd}d|v r| dd}|| d< d S )Nbody   s   &#xD;   
s   &#xA;)replace)r3   r'   r7   r(   r(   r)   escape_xml_payloadp   s   r;   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   
rC   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)rA   parserrootr(   r(   r)   r<      s   

r<   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nonebearerv4v4a*)regionsigning_namesigningzv4-unsigned-bodyFpayload_signing_enableds3)r%   botocoreUNSIGNED
startswithupdate)contextrY   r'   rR   rZ   signature_versionr(   r(   r)   set_operation_specific_signer   s*   



rc   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-1rE   r:   zError decoding base64Texc_info)	base64	b64decodebytesdecode
ValueError	TypeErrorAttributeErrorr=   r>   rB   r'   valuer(   r(   r)   decode_console_output   s   rp   c                 K   s>   |j D ]}|| vrtt | |< td| | |f  qd S )Nz1injecting idempotency token (%s) into param '%s'.)idempotent_membersstruuiduuid4r=   r>   )r3   modelr'   namer(   r(   r)   generate_idempotent_uuid   s   

rw   c              	   C   s<   z
t t| } W | S  ttfy   tjddd Y | S w )NzError loading quoted JSONTre   )r	   loadsr   rk   rl   r=   r>   )ro   r(   r(   r)   decode_quoted_jsondoc   s   ry   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 JSONTre   )r	   rx   r   rk   rl   r=   r>   rn   r(   r(   r)   json_decode_template_body  s   r|   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   )r3   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r3   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.
    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KeyMD5rE   )	_needs_s3_sse_customization
isinstancerr   encoderg   	b64encoder   digestrj   )r3   sse_member_prefixsse_key_membersse_md5_memberkey_as_byteskey_md5_strkey_b64_encodedr(   r(   r)   r   -  s   


r   c                 C   s   |  |d d uo|d | vS )Nr   r   r%   )r3   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.
    )r]   r^   )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 )PUTPOSTr7   readz-Adding expect 100 continue header to request.z100-continuer.   Expect)httpr%   hasattrr=   r>   )ru   r3   r'   r7   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)self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.)stylestart_importantwriterefr   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_section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   rr   _quote_source_headerdict_quote_source_header_from_dict)r3   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 )
Nr}   r   	VersionIdz/object//zMissing required parameter: r   r/   z?versionId=%s)r%   r   r   KeyErrorr   rr   r   r   )source_dictr   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_SUFFIXr   r   r   start)ro   resultfirstr   r(   r(   r)   r     s
   
"r   c                 C   sL   t |}||d d< |d |||d< d|d< i |d< | j|||jdS )Nr7   DestinationRegionurlGETr   r.   )region_nameoperation_name)copydeepcopyr:   generate_presigned_urlrv   )request_signerrequest_dictru   source_regiondestination_regionrequest_dict_copyr(   r(   r)   _get_cross_region_presigned_url  s   
r   c                 C   s   | j }|d}||fS )NSourceRegion)_region_namer%   )r   r3   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PresignedUrlr7   r   r   r   r3   r   ru   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   r7   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)rB   ru   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 )NpolicyDocumentType	structurestringlist)	type_namemembersitemsrv   ry   r   member)rB   shape
shape_namemember_namemember_shape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 )NrE   rF   LocationConstraint)rawrM   r   rJ   rK   rL   rN   text)rB   rA   r'   response_bodyrP   rQ   rX   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UserDatarE   )r   rr   r   rg   r   rj   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   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."

    MetadataNasciizvNon ascii characters found in S3 metadata for key "%s", value: "%s".  
S3 metadata can only contain ASCII characters. r   )r%   r   r   r   r   UnicodeEncodeErrorr   )r3   r'   metadatar   ro   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 ))
ResourceIdDelegationSetIdChangeId)rv   ).0rv   r   r(   r(   r)   
<listcomp>z  s
    
z#fix_route53_ids.<locals>.<listcomp>r   z%s %s -> %s)input_shaper   r   r   splitr=   r>   )r3   ru   r'   r  r   rv   
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 )N
apiVersionr.   zx-amz-glacier-version)r  ru   r3   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.   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.   r7   zx-amz-content-sha256T)as_hexzx-amz-sha256-tree-hashN)r   ri   r   tellr   calculate_sha256seekcalculate_tree_hash)r3   r'   r   r.   r7   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   r2  c                 K   sr   d|v r|  d}| d}|  |d d S d|v r7|  d}| d}| d}|  |d d S d S )	Nzresponse-paramsrz   r   z(*dict*) --zresponse-exampler   r   z{}r   )r   r   r'   template_body_sectionr   r   r   r   r(   r(   r)   0document_cloudformation_get_template_return_type  s   




r4  c                 K   s   t | d d S )NPredictEndpoint)r   requestr'   r(   r(   r)   switch_host_machinelearning  s   r8  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   r9  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   rm   )r'   r:  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   r9  )r   r   r.   r  datar6  r(   r(   r)   change_get_to_post  s
   
rC  c                 K   s    d| vrd|d< d| d< d S d S )NEncodingTypeTencoding_type_auto_setr   r(   )r3   ra   r'   r(   r(   r)   "set_list_objects_encoding_type_url  s   rF  c                 K      t g dddg| |d d S )N)	DelimiterMarker
NextMarkerContentsr   CommonPrefixesPrefixtop_level_keysnested_keysrB   ra   _decode_list_objectrB   ra   r'   r(   r(   r)   decode_list_object  s   	
rV  c                 K   rG  )N)rH  rO  
StartAfterrK  rM  rP  rS  rU  r(   r(   r)   decode_list_object_v2  s   
rX  c                 K   s   t g dg d| |d d S )N)	KeyMarkerNextKeyMarkerrO  rH  ))Versionsr   )DeleteMarkersr   rM  rP  rS  rU  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 )NrD  r   rE  )r%   r   )rQ  rR  rB   ra   r   top_key	child_keyr   r(   r(   r)   rT  ;  s   rT  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 )NBody)r   rr   r   r   ri   r   r(   r(   r)    convert_body_to_file_like_objectJ  s   ra  c           	      C   sr   dddd}|  D ],\}}|dd\}}t||}d| |jtf}d| d	 |jf}| | | | q
d S )
NFiltersfromTimereturnFields)zec2.*.Filterzlogs.CreateExportTask.fromzcloudsearchdomain.Search.return.r9  zbefore-parameter-build.zdocs.*.z.complete-section)r   rsplitParameterAliasalias_parameter_in_callREGISTER_FIRST alias_parameter_in_documentationr  )	handler_listaliasesoriginalnew_nameevent_portionoriginal_nameparameter_alias#parameter_build_event_handler_tupledocs_event_handler_tupler(   r(   r)   _add_parameter_aliasesR  s"   


rt  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
rg  c                 C   s   || _ || _d S r#   )_original_name_alias_name)r   rp  
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)rm  alias	operation)r  ru  r   rv  r   rv   pop)r   r3   ru   r'   r(   r(   r)   rh  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   )r_   ru  available_sectionsr   _replace_content)r   r   r   r'   r   param_type_sectionparam_name_sectionr(   r(   r)   rj    s   





z/ParameterAlias.alias_parameter_in_documentationc                 C   s4   |  d}|| j| j}|  || d S )NrE   )getvaluerj   r:   ru  rv  r   r   )r   r   rM   updated_contentr(   r(   r)   r|    s   zParameterAlias._replace_contentN)r   r   r   r   rh  rj  r|  r(   r(   r(   r)   rg  s  s
    rg  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   actual_namer(   r(   r)   r     s   
zClientMethodAlias.__init__c                 K   s   t || jS r#   )getattrr  )r   clientr'   r(   r(   r)   __call__  r+   zClientMethodAlias.__call__N)r   r   r   r   r  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   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   )r  _ensure_header_is_valid_host_prepend_to_host)r   r3   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.r   )_VALID_HOSTNAMEmatchr   )r   headerr  r(   r(   r)   r    s   z0HeaderToHostHoister._ensure_header_is_valid_hostc                 C   sH   t |}|jd}|g| }d|}|j||j|jdf}t|}|S )Nre  r   )r   netlocr  joinschemepathqueryr   )r   r   prefixurl_componentsparts
new_netlocnew_componentsr  r(   r(   r)   r    s   

z$HeaderToHostHoister._prepend_to_hostN)r   r   r   __doc__recompile
IGNORECASEr  r   r  r  r  r(   r(   r(   r)   r    s    
r  c                 K   s   | j sd S | jj|d d< d S )Nr.   zx-amz-api-version)is_endpoint_discovery_operationservice_modelapi_version)ru   r3   r'   r(   r(   r)   #inject_api_version_header_if_needed  s   r  c                 K   s   d| v r	| d= dS dS )z>Operation requires h2 which is currently unsupported in Pythonstart_conversationNr(   )class_attributesr'   r(   r(   r)    remove_lex_v2_start_conversation  s   
r  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)ttlattemptmaxc                    s&   g | ]}| v r| d  |  qS )=r(   )r  r   retries_contextr(   r)   r    s
    z%add_retry_headers.<locals>.<listcomp>z; zamz-sdk-request)ra   r%   r.   r  )r7  r'   r.   sdk_retry_keyssdk_request_headersr(   r  r)   add_retry_headers  s   
r  zchoose-service-namez/getattr.mturk.list_hi_ts_for_qualification_type 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-sectionr0  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-sectionSSECustomerKeyMD5CopySourceSSECustomerKeyMD5z1docs.*.lambda.UpdateFunctionCode.complete-sectionZipFiler\   
ContentMD5)DeleteObjectsPutBucketAclPutBucketCorsPutBucketLifecyclePutBucketLoggingPutBucketNotificationPutBucketPolicyPutBucketReplicationPutBucketRequestPaymentPutBucketTaggingPutBucketVersioningPutBucketWebsite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   )yr  rg   r   loggingr1   r  rs   r<  ior   r]   botocore.authr   botocore.compatr   r   r   r   r   r	   r
   r   r   r   r   botocore.docs.utilsr   r   r   botocore.exceptionsr   r   r   botocore.signersr   r   r   botocore.utilsr   r   r   r   r   r   r   r   r    r!   	getLoggerr   r=   objectri  REGISTER_LASTr  r   _ACCESSPOINT_ARN_OUTPOST_ARNr  r   r   r$   r*   r6   r;   rC   r<   rc   rp   rw   ry   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  r4  r8  r@  rC  rF  rV  rX  r]  rT  ra  rt  rg  r  r  r  r  r  document_auto_populated_param
hide_paramr   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     