
     h                     N   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 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jJ                  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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      l/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/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_partitionsW   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_endpoints^   s
    & "!r'   N)awsF)__name__
__module____qualname____doc__r&   r)   r-    r'   r%   r   r   7   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__y   s(     },DEE+!2r'   c                 d    | j                   d   D ]  }|d   |k7  r|d   }||vr||   d   c S  y )Nr8   	partitionservicesr   )r:   )r"   r#   r+   r?   r@   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 )Nr8   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 )Nr8   r?   r@   r   regions)r:   _retrieve_variant_datarC   )r"   r#   r+   r,   endpoint_variant_tagsrD   r?   r@   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 )Nr8   r?   defaults	dnsSuffix)r:   rG   get)r"   r+   rH   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-1r8   r?   T)r:   _endpoint_for_partition!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r"   r#   r$   r+   use_dualstack_endpointuse_fips_endpointvalid_partitionr?   rD   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      )Nr8   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[   r@   partitionEndpoint)r?   r#   service_datarJ   rW   rX   r   isRegionalizedTz'Using partition endpoint for %s, %s: %srJ   z*Creating a regex based endpoint for %s, %sr4   )	rV   r   rP   DEFAULT_SERVICE_DATAr   _resolver\   LOGdebug)r"   r?   r#   r$   rW   rX   force_partitionr+   r[   rc   resolve_kwargspartition_endpointis_regionalizeds                r%   rU   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)NrF   TregionRegexF)recompilematch)r"   r?   r$   s      r%   r\   zEndpointResolver._region_match=  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variantsra   )rP   setcopy)r"   r<   ra   rs   rQ   rD   s         r%   rG   z'EndpointResolver._retrieve_variant_dataD  sH     $$Z4 	G76?#s4y0 	r'   c                 V    g }|r|j                  d       |r|j                  d       |S )Nr_   fips)rC   )r"   rW   rX   ra   s       r%   _create_tag_listz!EndpointResolver._create_tag_listK  s*    !KK$KKr'   c                 l    i }|||fD ])  }| j                  ||      }|s| j                  ||       + |S r.   )rG   _merge_keys)r"   ra   r<   service_defaultspartition_defaultsrD   rs   rQ   s           r%   _resolve_variantz!EndpointResolver._resolve_variantS  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: %srN   zEndpoint does not exist for z in region r`   rO   r?   endpointNamehostnamesslCommonName)rP   rg   warningrx   r}   r   rz   _expand_template)r"   r?   r#   rc   rJ   rW   rX   r<   r{   r|   ra   rD   r[   s                r%   rf   zEndpointResolver._resolve]  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.   r4   )r"   	from_datarD   keys       r%   rz   zEndpointResolver._merge_keys  s&     	-C& 'ns	-r'   c                 *    |j                  |||      S )N)serviceregionrO   )format)r"   r?   templater#   rJ   rO   s         r%   r   z!EndpointResolver._expand_template  s!      )  
 	
r'   )F)r/   )r/   FNr.   )NNFF)r0   r1   r2   r3   rV   r=   rA   r)   r-   rR   r&   r]   rU   r\   rG   rx   r}   rf   rz   r   r4   r'   r%   r6   r6   t   s    A)2K(@%37  ": 59$ $0d
  ?3B@D-

r'   r6   c                   @    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y)EndpointResolverBuiltinszAWS::RegionzAWS::UseFIPSzAWS::UseDualStackzAWS::STS::UseGlobalEndpointzAWS::S3::UseGlobalEndpointzAWS::S3::AcceleratezAWS::S3::ForcePathStylezAWS::S3::UseArnRegionzAWS::S3Control::UseArnRegionz'AWS::S3::DisableMultiRegionAccessPointszSDK::EndpointzAWS::Auth::AccountIdz AWS::Auth::AccountIdEndpointModeN)r0   r1   r2   
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_S3CONTROL_USE_ARN_REGIONAWS_S3_DISABLE_MRAPSDK_ENDPOINT
ACCOUNT_IDACCOUNT_ID_ENDPOINT_MODEr4   r'   r%   r   r     sZ    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_instance_cache)	r"   endpoint_ruleset_datar   service_modelbuiltinsclient_contextevent_emitteruse_sslrequested_auth_schemes	            r%   r=   z EndpointRulesetResolver.__init__  sf     *.)
 #'.."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   )headersr4   )_get_provider_paramsrg   rh   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_contextB  s     <<
 M>>
 N::OY 	!
 $/++:::FFr'   c                 F    | j                  |      }|j                  |      S r.   )_get_static_context_paramsrP   )r"   r   r   static_ctx_paramss       r%   r   z>EndpointRulesetResolver._resolve_param_as_static_context_paramX  s&     !;;OL $$Z00r'   c                 Z    | j                  |      }||v r||   }|j                  |      S y r.   )_get_dynamic_context_paramsrP   )r"   r   r   r   dynamic_ctx_paramsmember_names         r%   r   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_param^  s<     "==oN++,Z8K==-- ,r'   c                 l    | j                         }||v r ||   }| j                  j                  |      S y r.   )_get_client_context_paramsr   rP   )r"   r   client_ctx_paramsclient_ctx_varnames       r%   r   z>EndpointRulesetResolver._resolve_param_as_client_context_paramf  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_paraml  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   rP   callable)r"   r   r   r   s       r%   r   z1EndpointRulesetResolver._resolve_param_as_builtint  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	hyphenizeru   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]  }i |d j                  |d         i }} j                  	 t         fd	|D              \  }}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 # t        $ r di fcY S w xY 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   noneNc              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	TypeErrorrg   rh   joinrP   r   r   _strip_sig_prefixnextStopIterationr   anyr   r   updater   )r"   auth_schemesr  r  r   fixable_with_crtauth_type_optionssigning_contexts   `       r%   auth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx  sy    ,-\1Ba1GDEE		1II\B155=/+BC''		
 &&(22: '
 GvFvt55fVnEF
 
 &&2   $ $)$  f# $)$  f6 f$(.(?OH%6)6,-.2,/HH-.-) F"""}0E"F"f,7E./8O34 			M6N		
 _$$] C
  !   Rx	  !  $) 8D$E1QvY$E$E!$E'* +&7+ ($
 $4L 
 7*.))4E*F %s7   
E=!FF  F FFG?)F65A
G?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   rT      N)r  splitr   )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: `   )labelrT   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.)kwargsrP   r   r+  
IndexErrorr   r   r#   r   r   lowerr   r   r   r   )r"   ruleset_exceptionr   r  r1  r#   r5  s          r%   r   z;EndpointRulesetResolver.ruleset_error_to_botocore_exception*  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_idsa  s9    00"29??3D2E FG;& 56 'r'   )TN)r0   r1   r2   r3   r=   r&   r   r   r   r   r   r   r   r   r   r   r   r   r#  r  r  r   r   r4   r'   r%   r   r     s    ? ""04l DG,1.@4 
 
 
 
 
 
#a%FK"@5n7r'   r   )/r3   ru   loggingro   enumr   r   botocorer   r   botocore.authr   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   	getLoggerr0   rg   DEFAULT_URI_TEMPLATEre   r   r6   strr   r   r4   r'   r%   <module>rM     s      	   ) 1 1 7     3 9g!7 #R( :" :"zu
+ u
p	 BsD  BFV7 V7r'   