
    ]j%                     R   d 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mZm	Z	 ddl
mZmZmZ ddlm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mZmZm Z  dd	l!m"Z" dd
l#m$Z$m%Z%  ejL                  e'      Z(dZ)di iZ* G d d      Z+ G d de+      Z, G d de-e      Z. G d d      Z/y)zResolves regions and endpoints.

This module implements endpoint resolution, including resolving endpoints for a
given service and region and resolving the available endpoints for a service
in a specific AWS partition.
    N)Enum)UNSIGNED
xform_name)AUTH_TYPE_MAPSHAS_CRTresolve_auth_scheme_preferenceCRT_SUPPORTED_AUTH_TYPES)EndpointProvider)EndpointProviderErrorEndpointVariantError!InvalidEndpointConfigurationErrorInvalidHostLabelErrorMissingDependencyExceptionNoRegionErrorParamValidationError$UnknownEndpointResolutionBuiltInNameUnknownRegionErrorUnknownSignatureVersionError*UnsupportedS3AccesspointConfigurationErrorUnsupportedS3ConfigurationErrorUnsupportedS3ControlArnError&UnsupportedS3ControlConfigurationError)register_feature_id)ensure_booleaninstance_cachez{service}.{region}.{dnsSuffix}	endpointsc                   (    e Zd ZdZddZd Z	 ddZy)BaseEndpointResolverz3Resolves regions and endpoints. Must be subclassed.Nc                     t         )a7  Resolves an endpoint for a service and region combination.

        :type service_name: string
        :param service_name: Name of the service to resolve an endpoint for
            (e.g., s3)

        :type region_name: string
        :param region_name: Region/endpoint name to resolve (e.g., us-east-1)
            if no region is provided, the first found partition-wide endpoint
            will be used if available.

        :rtype: dict
        :return: Returns a dict containing the following keys:
            - partition: (string, required) Resolved partition name
            - endpointName: (string, required) Resolved endpoint name
            - hostname: (string, required) Hostname to use for this endpoint
            - sslCommonName: (string) sslCommonName to use for this endpoint.
            - credentialScope: (dict) Signature version 4 credential scope
              - region: (string) region name override when signing.
              - service: (string) service name override when signing.
            - signatureVersions: (list<string>) A list of possible signature
              versions, including s3, v4, v2, and s3v4
            - protocols: (list<string>) A list of supported protocols
              (e.g., http, https)
            - ...: Other keys may be included as well based on the metadata
        NotImplementedError)selfservice_nameregion_names      :/root/env/lib/python3.12/site-packages/botocore/regions.pyconstruct_endpointz'BaseEndpointResolver.construct_endpoint>   s
    6 "!    c                     t         )zLists the partitions available to the endpoint resolver.

        :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]).
        r!   )r#   s    r&   get_available_partitionsz-BaseEndpointResolver.get_available_partitions[   s
    
 "!r(   c                     t         )a  Lists the endpoint names of a particular partition.

        :type service_name: string
        :param service_name: Name of a service to list endpoint for (e.g., s3)

        :type partition_name: string
        :param partition_name: Name of the partition to limit endpoints to.
            (e.g., aws for the public AWS endpoints, aws-cn for AWS China
            endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc.

        :type allow_non_regional: bool
        :param allow_non_regional: Set to True to include endpoints that are
             not regional endpoints (e.g., s3-external-1,
             fips-us-gov-west-1, etc).
        :return: Returns a list of endpoint names (e.g., ["us-east-1"]).
        r!   )r#   r$   partition_nameallow_non_regionals       r&   get_available_endpointsz,BaseEndpointResolver.get_available_endpointsb   s
    & "!r(   N)awsF)__name__
__module____qualname____doc__r'   r*   r.    r(   r&   r   r   ;   s    =":" FK"r(   r   c                       e Zd ZdZddgZddZddZd Z	 	 	 ddZ	 dd	Z		 	 	 	 dd
Z
d Z	 ddZd Zd Zd Zd Zd Zd Zd Zy)EndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz	aws-iso-bc                 >    d|vrt        d      || _        || _        y)a  
        :type endpoint_data: dict
        :param endpoint_data: A dict of partition data.

        :type uses_builtin_data: boolean
        :param uses_builtin_data: Whether the endpoint data originates in the
            package's data directory.
        
partitionsz%Missing "partitions" in endpoint dataN)
ValueError_endpoint_datauses_builtin_data)r#   endpoint_datar<   s      r&   __init__zEndpointResolver.__init__}   s(     },DEE+!2r(   c                 d    | j                   d   D ]  }|d   |k7  r|d   }||vr||   d   c S  y )Nr9   	partitionservicesr   )r;   )r#   r$   r,   r@   rA   s        r&   get_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data   sQ    ,,\: 	7I%7 ,H8+L)+66	7r(   c                 Z    g }| j                   d   D ]  }|j                  |d           |S )Nr9   r@   )r;   append)r#   resultr@   s      r&   r*   z)EndpointResolver.get_available_partitions   s7    ,,\: 	2IMM)K01	2r(   Nc                    g }| j                   d   D ]o  }|d   |k7  r|d   }||vr||   d   }|D ]M  }	|	|d   v }
|r,|
r*| j                  ||	   |      }|s&|j                  |	       8|s|
s=|j                  |	       O q |S )Nr9   r@   rA   r   regions)r;   _retrieve_variant_datarD   )r#   r$   r,   r-   endpoint_variant_tagsrE   r@   rA   service_endpointsendpoint_nameis_regional_endpointvariant_datas               r&   r.   z(EndpointResolver.get_available_endpoints   s     ,,\: 	1I%7 ,H8+ ( 6{ C!2 
1'4	)8L'L$(-A#'#>#>)-8:O$L $m4'+?MM-0
1	1$ r(   c                     | j                   d   D ]C  }|d   |k(  s|r0| j                  |j                  d      |      }|s2d|v s7|d   c S |d   c S  y )Nr9   r@   defaults	dnsSuffix)r;   rH   get)r#   r,   rI   r@   variants        r&   get_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix   st     ,,\: 		2I%7("99!j13HG ;'#9&{33$[11		2 r(   c                    |dk(  r|r|d}|<d }| j                   d   D ]  }|d   |k(  s|} || j                  |||||d      }|S y | j                   d   D ]1  }|r|d   | j                  v r| j                  |||||      }|s/|c S  y )Ns3z	us-east-1r9   r@   T)r;   _endpoint_for_partition!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r#   r$   r%   r,   use_dualstack_endpointuse_fips_endpointvalid_partitionr@   rE   s	            r&   r'   z#EndpointResolver.construct_endpoint   s     D &#%K%"O!00> 0	[)^;&/O0 *55# *%  ,,\: 	I%+&99: 11&!F 	r(   c                 v    | j                   d   D ]  }| j                  ||      s|d   c S  t        |d      )Nr9   r@   z,No partition found for provided region_name.)r%   	error_msg)r;   _region_matchr   )r#   r%   r@   s      r&   get_partition_for_regionz)EndpointResolver.get_partition_for_region   sL    ,,\: 	.I!!)[9 --	. !#D
 	
r(   c                    |d   }|r"|| j                   v rd| d}t        dg|      |d   j                  |t              }	|d|	v r|	d   }n
t	               |||	|||d}
||	d	   v r | j
                  di |
S | j                  ||      s|r|	j                  d      }|	j                  d
d      }|r1|s/t        j                  d|||       ||
d<    | j
                  di |
S t        j                  d||        | j
                  di |
S y )Nr@   z4Dualstack endpoints are currently not supported for z
 partition	dualstacktagsr\   rA   partitionEndpoint)r@   r$   service_datarK   rX   rY   r   isRegionalizedTz'Using partition endpoint for %s, %s: %srK   z*Creating a regex based endpoint for %s, %sr5   )	rW   r   rQ   DEFAULT_SERVICE_DATAr   _resolver]   LOGdebug)r#   r@   r$   r%   rX   rY   force_partitionr,   r\   rd   resolve_kwargspartition_endpointis_regionalizeds                r&   rV   z(EndpointResolver._endpoint_for_partition   sm    #;/"$"H"HH&'z3  '[MYOO !,00.
 "l2*+>?#o% #(((&<!2
 ,{33 4==2>22 i5!-!1!12E!F*../?FO!/		= &	 3E/$t}}6~66II<
 !4==2>22% :Ir(   c                 j    ||d   v ryd|v r't        j                  |d         j                  |      S y)NrG   TregionRegexF)recompilematch)r#   r@   r%   s      r&   r]   zEndpointResolver._region_matchA  s<    )I..I%::i67==kJJr(   c                     |j                  dg       }|D ]0  }t        |d         t        |      k(  s|j                         }|c S  y )Nvariantsrb   )rQ   setcopy)r#   r=   rb   rt   rR   rE   s         r&   rH   z'EndpointResolver._retrieve_variant_dataH  sH     $$Z4 	G76?#s4y0 	r(   c                 V    g }|r|j                  d       |r|j                  d       |S )Nr`   fips)rD   )r#   rX   rY   rb   s       r&   _create_tag_listz!EndpointResolver._create_tag_listO  s*    !KK$KKr(   c                 l    i }|||fD ])  }| j                  ||      }|s| j                  ||       + |S r/   )rH   _merge_keys)r#   rb   r=   service_defaultspartition_defaultsrE   rt   rR   s           r&   _resolve_variantz!EndpointResolver._resolve_variantW  sM     &(8:LM 	2H11(DAG  &1	2 r(   c                    |j                  di       j                  |i       }|j                  d      rt        j                  d|       |j                  di       }|j                  di       }	| j                  ||      }
|
rA| j	                  |
|||	      }|i k(  rd| d| }t        |
|      | j                  ||       n|}d|vr|d   |d<   |d	   |d	<   ||d
<   | j                  ||       | j                  |	|       | j                  ||d   |||d         |d<   d|v r| j                  ||d   |||d         |d<   |S )Nr   
deprecatedz5Client is configured with the deprecated endpoint: %srO   zEndpoint does not exist for z in region ra   rP   r@   endpointNamehostnamesslCommonName)rQ   rh   warningry   r~   r   r{   _expand_template)r#   r@   r$   rd   rK   rX   rY   r=   r|   r}   rb   rE   r\   s                r&   rg   zEndpointResolver._resolvea  s    %((b9==2
 \*KKG
 (++J;&]]:r:$$%;=NO**m%57IF |2<. A!!.1  +	JJ]F3"F f$"+K"8F;'4{!.~ 	)62+V4!22:;
z f$&*&;&;'{#'F?# r(   c                 ,    |D ]  }||vs||   ||<    y r/   r5   )r#   	from_datarE   keys       r&   r{   zEndpointResolver._merge_keys  s&     	-C& 'ns	-r(   c                 *    |j                  |||      S )N)serviceregionrP   )format)r#   r@   templater$   rK   rP   s         r&   r   z!EndpointResolver._expand_template  s!      )  
 	
r(   )F)r0   )r0   FNr/   )NNFF)r1   r2   r3   r4   rW   r>   rB   r*   r.   rS   r'   r^   rV   r]   rH   ry   r~   rg   r{   r   r5   r(   r&   r7   r7   x   s    A)2K(@%37  ": 59$ $0d
  ?3B@D-

r(   r7   c                   D    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZy)EndpointResolverBuiltinszAWS::RegionzAWS::UseFIPSzAWS::UseDualStackzAWS::STS::UseGlobalEndpointzAWS::S3::UseGlobalEndpointzAWS::S3::AcceleratezAWS::S3::ForcePathStylezAWS::S3::UseArnRegionz$AWS::S3::DisableS3ExpressSessionAuthzAWS::S3Control::UseArnRegionz'AWS::S3::DisableMultiRegionAccessPointszSDK::EndpointzAWS::Auth::AccountIdz AWS::Auth::AccountIdEndpointModeN)r1   r2   r3   
AWS_REGIONAWS_USE_FIPSAWS_USE_DUALSTACKAWS_STS_USE_GLOBAL_ENDPOINTAWS_S3_USE_GLOBAL_ENDPOINTAWS_S3_ACCELERATEAWS_S3_FORCE_PATH_STYLEAWS_S3_USE_ARN_REGION#AWS_S3_DISABLE_EXPRESS_SESSION_AUTHAWS_S3CONTROL_USE_ARN_REGIONAWS_S3_DISABLE_MRAPSDK_ENDPOINT
ACCOUNT_IDACCOUNT_ID_ENDPOINT_MODEr5   r(   r&   r   r     sd    J "L , #@ ">-7 4 	/ (
 $B C"L'JAr(   r   c                       e Zd ZdZ	 	 	 ddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zed        Zed        Zed        Zd Zd Zd Zd Zd Zd Zy)EndpointRulesetResolverz5Resolves endpoints using a service's endpoint rulesetNc
                     t        ||      | _        | j                  j                  j                  | _        || _        || _        || _        || _        || _	        || _
        |	| _        i | _        y )N)ruleset_datapartition_data)r   	_providerruleset
parameters_param_definitions_service_model	_builtins_client_context_event_emitter_use_ssl_requested_auth_scheme_auth_scheme_preference_instance_cache)
r#   endpoint_ruleset_datar   service_modelbuiltinsclient_contextevent_emitteruse_sslrequested_auth_schemeauth_scheme_preferences
             r&   r>   z EndpointRulesetResolver.__init__  sn     *.)
 #'.."8"8"C"C+!-+&;#'=$!r(   c           	      \   |i }|i }| j                  |||      }t        j                  d|       	  | j                  j                  di |}t        j                  d|j                         | j                  sA|j                  j                  d      r&d|vr"|j                  d|j                  dd        }|j                  |j                  j                         D 	ci c]  \  }}	||	d	    c}	}
      }|S # t
        $ r}| j                  ||      }| ||d}~ww xY wc c}	}w )zAInvokes the provider with params defined in the service's rulesetNz-Calling endpoint provider with parameters: %szEndpoint provider result: %szhttps://Endpointzhttp://   )urlr   )headersr5   )_get_provider_paramsrh   ri   r   resolve_endpointr   #ruleset_error_to_botocore_exceptionr   r   
startswith_replacer   items)
r#   operation_model	call_argsrequest_contextprovider_paramsprovider_resultexbotocore_exceptionr   vals
             r&   r'   z*EndpointRulesetResolver.construct_endpoint  s\    I" O33Y
 			;_	
	1=dnn== !O 			0/2E2EF ##..z:/1-66o11!"567 7 O *22,;,C,C,I,I,K (SSV 3 
 ; % 	1!%!I!IO" ")(b0	10s   C? $D(
?	D%D  D%c                 &   i }| j                  |||      }| j                  j                         D ]^  \  }}| j                  |||      }|)|j                  | j                  |j                  |      }|H|||<   | j                  ||       ` |S )a  Resolve a value for each parameter defined in the service's ruleset

        The resolution order for parameter values is:
        1. Operation-specific static context values from the service definition
        2. Operation-specific dynamic context values from API parameters
        3. Client-specific context parameters
        4. Built-in values such as region, FIPS usage, ...
        )
param_namer   r   )builtin_namer   )_get_customized_builtinsr   r   _resolve_param_from_contextbuiltin_resolve_param_as_builtin_register_endpoint_feature_ids)	r#   r   r   r   r   customized_builtinsr   	param_def	param_vals	            r&   r   z,EndpointRulesetResolver._get_provider_params+  s      #;;Y
 &*%<%<%B%B%D 	K!J	88% /# 9 I
  Y%6%6%B ::!*!2!20 ; 	 $.7
+33J	J	K r(   c                     | j                  ||      }||S | j                  |||      }||S | j                  |||      }||S | j                  |      S r/   )&_resolve_param_as_static_context_param'_resolve_param_as_dynamic_context_param)_resolve_param_as_operation_context_param&_resolve_param_as_client_context_param)r#   r   r   r   staticdynamicoperation_context_paramss          r&   r   z3EndpointRulesetResolver._resolve_param_from_contextM  s     <<
 M>>
 N::OY 	!
 $/++:::FFr(   c                 F    | j                  |      }|j                  |      S r/   )_get_static_context_paramsrQ   )r#   r   r   static_ctx_paramss       r&   r   z>EndpointRulesetResolver._resolve_param_as_static_context_paramc  s&     !;;OL $$Z00r(   c                 Z    | j                  |      }||v r||   }|j                  |      S y r/   )_get_dynamic_context_paramsrQ   )r#   r   r   r   dynamic_ctx_paramsmember_names         r&   r   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_parami  s<     "==oN++,Z8K==-- ,r(   c                 l    | j                         }||v r ||   }| j                  j                  |      S y r/   )_get_client_context_paramsr   rQ   )r#   r   client_ctx_paramsclient_ctx_varnames       r&   r   z>EndpointRulesetResolver._resolve_param_as_client_context_paramq  sB     ;;=**!2:!>''++,>?? +r(   c                 `    |j                   }||v r||   d   }t        j                  ||      S y )Npath)operation_context_parametersjmespathsearch)r#   r   r   r   operation_ctx_paramsr   s         r&   r   zAEndpointRulesetResolver._resolve_param_as_operation_context_paramw  s>      /KK--'
3F;D??433 .r(   c                     |t         j                  j                         vrt        |      |j	                  |      }t        |      r |       S |S )N)name)r   __members__valuesr   rQ   callable)r#   r   r   r   s       r&   r   z1EndpointRulesetResolver._resolve_param_as_builtin  sH    7CCJJLL6LII,,|,G9r(   c                 j    |j                   D ci c]  }|j                  |j                   c}S c c}w )z=Mapping of param names to static param value for an operation)static_context_parametersr   valuer#   r   params      r&   r   z2EndpointRulesetResolver._get_static_context_params  s7    
 )BB
 JJ#
 	
 
   0c                 j    |j                   D ci c]  }|j                  |j                   c}S c c}w )z7Mapping of param names to member names for an operation)context_parametersr   r   r   s      r&   r   z3EndpointRulesetResolver._get_dynamic_context_params  s9    
 );;
 JJ)))
 	
 
r   c                     | j                   j                  D ci c]"  }|j                  t        |j                        $ c}S c c}w )z7Mapping of param names to client configuration variable)r   client_context_parametersr   r   )r#   r   s     r&   r   z2EndpointRulesetResolver._get_client_context_params  sB    
 ,,FF
 JJ
5::..
 	
 
s   'Ac                     | j                   j                  j                         }t        j                  | j                        }| j
                  j                  d| ||||       |S )Nzbefore-endpoint-resolution.)r   modelparamscontext)r   
service_id	hyphenizerv   r   r   emit)r#   r   r   r   r  r   s         r&   r   z0EndpointRulesetResolver._get_customized_builtins  sh     ((33==?
"ii7  )*6(!# 	! 	
 #"r(   c                 :    t        |t              rt        |      dk(  rt        d      t        j                  ddj                  |D cg c]  }d|j                  d       d c}       j                          j                  t        k(  rdi fS |D cg c]  }|d   j                  d      d	    }}|D cg c]  }i |d j                  |d         i }} j                  	 t         fd|D              \  }}n j                  a j                  j                  d      }|D ci c])  } j                  |d   j                  d      d	         |+ }}t        ||      }||   }n	 t        d |D              \  }}i }
d|v r	|d   |
d<   n,d|v r(t        |d         dkD  rdj                  |d         |
d<   d|v r|
j)                  |d          d|v rt+        |d         |
d<   t        j                  d|d   ||
       ||
fS c c}w c c}w c c}w # t        $ r d
i fcY S w xY wc c}w # t        $ r\ d}|D cg c]  }|d   	 nc c}w }	}t         st#        d |	D              }|rt%        d      t'        dj                  |	            w xY w)a  Convert an Endpoint's authSchemes property to a signing_context dict

        :type auth_schemes: list
        :param auth_schemes: A list of dictionaries taken from the
            ``authSchemes`` property of an Endpoint object returned by
            ``EndpointProvider``.

        :rtype: str, dict
        :return: Tuple of auth type string (to be used in
            ``request_context['auth_type']``) and signing context dict (for use
            in ``request_context['signing']``).
        r   z&auth_schemes must be a non-empty list.z_Selecting from endpoint provider's list of auth schemes: %s. User selected auth scheme is: "%s"z, "r   none#Nc              3   x   K   | ]1  }j                  j                  |d          rj                  |f 3 ywr   N)._does_botocore_authname_match_ruleset_authnamer   ).0sr#   s     r&   	<genexpr>zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sA      $JJ33QvY 00!4$s   7:,c              3   @   K   | ]  }|d    t         v r	|d    |f  ywr
  )r   )r  r  s     r&   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  s,      $yN2 vYN$s   Fc              3   ,   K   | ]  }|t         v   y wr/   r	   )r  schemes     r&   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  s      +" "::+s   zbThis operation requires an additional dependency. Use pip install botocore[crt] before proceeding.msg)signature_versionsigningRegionr   signingRegionSetsigningName)signing_namedisableDoubleEncodingz?Selected auth type "%s" as "%s" with signing context params: %s)
isinstancelistlen	TypeErrorrh   ri   joinrQ   r   r   split_strip_sig_prefixnextStopIterationr   r   r   anyr   r   updater   )r#   auth_schemesr  available_ruleset_namesr  r   prefsauth_schemes_by_auth_typefixable_with_crtauth_type_optionssigning_contexts   `          r&   auth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx  s6    ,-\1Ba1GDEE		1II\B155=/+BC''		
 &&(22: /;#
)*AfIOOC $#
 #

 '
 GvFvt55fVnEF
 
 &&2   $ $)$  f ))50066s;E &) &&qys';B'?@!C)% ) 2.D /t4F# $)$  f6 f$(.(?OH%6)6,-.2,/HH-.-) F"""}0E"F"f,7E./8O34 			M6N		
 _$$w C#

  !   Rx	 ) !  $) 8D$E1QvY$E$E!$E'* +&7+ ($
 $4L 
 7*.))4E*F %sC   
HH;!H+H ..H01H5 H-,H-5JIA
Jc                 2    |j                  d      r|dd S |S )z6Normalize auth type names by removing any "sig" prefixsig   N)r   )r#   	auth_names     r&   r!  z)EndpointRulesetResolver._strip_sig_prefix  s      ) 4 4U ;y}JJr(   c                     | j                  |      }|j                  d      d   }|dk7  r|j                  d      r|dd }||k(  S )a\  
        Whether a valid string provided as signature_version parameter for
        client construction refers to the same auth methods as a string
        returned by the endpoint ruleset provider. This accounts for:

        * The ruleset prefixes auth names with "sig"
        * The s3 and s3control rulesets don't distinguish between v4[a] and
          s3v4[a] signers
        * The v2, v3, and HMAC v1 based signers (s3, s3-*) are botocore legacy
          features and do not exist in the rulesets
        * Only characters up to the first dash are considered

        Example matches:
        * v4, sigv4
        * v4, v4
        * s3v4, sigv4
        * s3v7, sigv7 (hypothetical example)
        * s3v4a, sigv4a
        * s3v4-query, sigv4

        Example mismatches:
        * v4a, sigv4
        * s3, sigv4
        * s3-presign-post, sigv4
        -r   rU      N)r!  r   r   )r#   botonamersnames      r&   r  zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname"  sR    4 ''/>>#&q)t 3 3D 9|H!!r(   c                    |j                   j                  d      }|y|j                  d      r!	 |j                  d      d   }t        |      S | j                  j                  }|dk(  r|dk(  s|d	k(  rt        |
      S |j                  d      sU|j                  d      sD|j                  d      s3|j                  d      s"|j                  d      s|j                  d      rt        |
      S |j                         j                  d      rt        |      S |dk(  rn|j                  d      r|j                  d      }t        ||      S |j                  d      s|j                  d      rt        |
      S |dk(  rt        |      S |dk(  r.|j                  d      rt        |
      S |dk(  rt        |
      S y# t        $ r |}Y w xY w)zAttempts to translate ruleset errors to pre-existing botocore
        exception types by string matching exception strings.
        r  NzInvalid region in ARN: `   )labelrU   z/S3 Object Lambda does not support S3 Acceleratez#Accelerate cannot be used with FIPSr  zS3 Outposts does not supportzS3 MRAP does not supportz!S3 Object Lambda does not supportzAccess Points do not supportzInvalid configuration:z#Client was configured for partitionzinvalid arn:)report	s3controlzInvalid ARN:Bucket)arnr  z!AccountId is required but not seteventszUInvalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.z&EndpointId must be a valid host label.)kwargsrQ   r   r   
IndexErrorr   r   r$   r   r   lowerr   r   r   r   )r#   ruleset_exceptionr   r  r:  r$   r>  s          r&   r   z;EndpointRulesetResolver.ruleset_error_to_botocore_exceptionB  s     &&**51;>>34		#q) )u55**774HH??63??=>>>"<=>>"EF>>"@A>>":;>>"GHAcJJyy{%%n5+377;&~~n-jj*3EE~~673>>5< >#FF99+3778#~~6 9SAA>>8SAAQ  s   G GGc                 j    |dk(  rt        d|j                                 y |dk(  rt        d       y y )NAccountIdEndpointModeACCOUNT_ID_MODE_	AccountIdRESOLVED_ACCOUNT_ID)r   upper)r#   r   r   s      r&   r   z6EndpointRulesetResolver._register_endpoint_feature_idsy  s9    00"29??3D2E FG;& 56 'r(   )TNN)r1   r2   r3   r4   r>   r'   r   r   r   r   r   r   r   r   r   r   r   r   r-  r!  r  r   r   r5   r(   r&   r   r     s    ? "#"44l DG,1.@4 
 
 
 
 
 
#n%`K"@5n7r(   r   )0r4   rv   loggingrp   enumr   r   botocorer   r   botocore.authr   r   r   botocore.crtr
   botocore.endpoint_providerr   botocore.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   botocore.useragentr   botocore.utilsr   r   	getLoggerr1   rh   DEFAULT_URI_TEMPLATErf   r   r7   strr   r   r5   r(   r&   <module>rV     s      	   ) 
 2 7     3 9g!7 #R( :" :"zu
+ u
p	%BsD %BPe7 e7r(   