
    ej                     l   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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j'        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          Z0dS )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)S3_UNREFERENCED_PARAMS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dS )
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      T/var/www/app.qaans.com/backend/venv/lib/python3.11/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)   awsFc                     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)r-   F)__name__
__module____qualname____doc__r(   r,   r1    r)   r'   r    r    ;   sX        ==" " " ":" " " 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d	S )EndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz	aws-iso-bFc                 H    d|vrt          d          || _        || _        dS )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__}   s4     },,DEEE+!2r)   r-   c                 x    | j         d         D ]+}|d         |k    r|d         }||vr||         d         c S d S )Nr;   	partitionservicesr   )r=   )r$   r%   r/   rB   rC   s        r'   get_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data   sd    ,\: 	7 	7I%77 ,H8++L)+6666	7 	7r)   c                 `    g }| j         d         D ]}|                    |d                    |S )Nr;   rB   )r=   append)r$   resultrB   s      r'   r,   z)EndpointResolver.get_available_partitions   s=    ,\: 	2 	2IMM)K01111r)   Nc                 :   g }| j         d         D ]}|d         |k    r|d         }||vr||         d         }|D ]]}	|	|d         v }
|r6|
r4|                     ||	         |          }|r|                    |	           D|s|
r|                    |	           ^|S )Nr;   rB   rC   r   regions)r=   _retrieve_variant_datarF   )r$   r%   r/   r0   endpoint_variant_tagsrG   rB   rC   service_endpointsendpoint_nameis_regional_endpointvariant_datas               r'   r1   z(EndpointResolver.get_available_endpoints   s     ,\: 	1 	1I%77 ,H8++ ( 6{ C!2 
1 
1'4	)8L'L$( 1-A 1#'#>#>)-8:O$ $L $ 5m444' 1+? 1MM-000
1 r)   c                     | j         d         D ]T}|d         |k    rF|r:|                     |                    d          |          }|rd|v r
|d         c S J|d         c S Ud S )Nr;   rB   defaults	dnsSuffix)r=   rJ   get)r$   r/   rK   rB   variants        r'   get_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix   s     ,\: 		2 		2I%77( 2"99!j113H G  4;'#9#9&{3333$[1111 8 tr)   c                 $   |dk    r|r|d}|@d }| j         d         D ]}|d         |k    r|}||                     |||||d          }|S d S | j         d         D ]3}|r|d         | j        v r|                     |||||          }|r|c S 4d S )Ns3z	us-east-1r;   rB   T)r=   _endpoint_for_partition!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r$   r%   r&   r/   use_dualstack_endpointuse_fips_endpointvalid_partitionrB   rG   s	            r'   r(   z#EndpointResolver.construct_endpoint   s    D  & !#%K%"O!0> 0 0	[)^;;&/O*55# *%  4 ,\: 	 	I% +&9: : 11&! F  	 	r)   c                     | j         d         D ]"}|                     ||          r
|d         c S #t          |d          )Nr;   rB   z,No partition found for provided region_name.)r&   	error_msg)r=   _region_matchr   )r$   r&   rB   s      r'   get_partition_for_regionz)EndpointResolver.get_partition_for_region   sd    ,\: 	. 	.I!!)[99 . ----. #D
 
 
 	
r)   c                 V   |d         }|r!|| j         v rd| d}t          dg|          |d                             |t                    }	|d|	v r	|	d         }nt	                      |||	|||d}
||	d	         v r | j        di |
S |                     ||          s|r|	                    d          }|	                    d
d          }|r1|s/t                              d|||           ||
d<    | j        di |
S t                              d||            | j        di |
S d S )NrB   z4Dualstack endpoints are currently not supported for z
 partition	dualstacktagsr^   rC   partitionEndpoint)rB   r%   service_datarM   rZ   r[   r   isRegionalizedTz'Using partition endpoint for %s, %s: %srM   z*Creating a regex based endpoint for %s, %sr7   )	rY   r   rS   DEFAULT_SERVICE_DATAr   _resolver_   LOGdebug)r$   rB   r%   r&   rZ   r[   force_partitionr/   r^   rf   resolve_kwargspartition_endpointis_regionalizeds                r'   rX   z(EndpointResolver._endpoint_for_partition   s    #;/"	P$"HHH3&3 3 3  '[MYOOOO !,00.
 
 "l22*+>?#oo% #(((&<!2
 
 ,{333 4=22>222 i55 	3 	3!-!1!12E!F!F*../?FFO! 7/ 7		= &	   3E/$t}66~666II<  
 !4=22>222%	3 	3r)   c                     ||d         v rdS d|v r-t          j        |d                                       |          S dS )NrI   TregionRegexF)recompilematch)r$   rB   r&   s      r'   r_   zEndpointResolver._region_matchA  sJ    )I...4I%%:i677==kJJJur)   c                     |                     dg           }|D ]@}t          |d                   t          |          k    r|                                }|c S Ad S )Nvariantsrd   )rS   setcopy)r$   r?   rd   rv   rT   rG   s         r'   rJ   z'EndpointResolver._retrieve_variant_dataH  sh     $$Z44 	 	G76?##s4yy00  1	 	r)   c                 f    g }|r|                     d           |r|                     d           |S )Nrb   fips)rF   )r$   rZ   r[   rd   s       r'   _create_tag_listz!EndpointResolver._create_tag_listO  s@    ! 	%KK$$$ 	 KKr)   c                 v    i }|||fD ]0}|                      ||          }|r|                     ||           1|S r2   )rJ   _merge_keys)r$   rd   r?   service_defaultspartition_defaultsrG   rv   rT   s           r'   _resolve_variantz!EndpointResolver._resolve_variantW  sZ     &(8:LM 	2 	2H11(DAAG 2  &111r)   c                     |                     di                                |i           }|                     d          rt                              d|           |                     di           }|                     di           }	|                     ||          }
|
rN|                     |
|||	          }|i k    rd| d| }t          |
|          |                     ||           n|}d|vr|d         |d<   |d	         |d	<   ||d
<   |                     ||           |                     |	|           |                     ||d         |||d                   |d<   d|v r(|                     ||d         |||d                   |d<   |S )Nr   
deprecatedz5Client is configured with the deprecated endpoint: %srQ   zEndpoint does not exist for z in region rc   rR   rB   endpointNamehostnamesslCommonName)rS   rj   warningr{   r   r   r}   _expand_template)r$   rB   r%   rf   rM   rZ   r[   r?   r~   r   rd   rG   r^   s                r'   ri   zEndpointResolver._resolvea  s    %((b99==2
 
 \** 	KKG  
 (++J;;&]]:r::$$%;=NOO 	#**m%57I F ||1< 1 1!.1 1  +	JJJJ]F3333"F f$$"+K"8F;'4{!.~ 	)6222+V444!22:;
 
z f$$&*&;&;'{#' 'F?# r)   c                 .    |D ]}||vr||         ||<   d S r2   r7   )r$   	from_datarG   keys       r'   r}   zEndpointResolver._merge_keys  s4     	- 	-C&  'ns	- 	-r)   c                 2    |                     |||          S )N)serviceregionrR   )format)r$   rB   templater%   rM   rR   s         r'   r   z!EndpointResolver._expand_template  s&      )  
 
 	
r)   )F)r-   )r-   FNr2   )NNFF)r3   r4   r5   r6   rY   r@   rD   r,   r1   rU   r(   r`   rX   r_   rJ   r{   r   ri   r}   r   r7   r)   r'   r9   r9   x   sM       AA)2K(@%3 3 3 37 7 7 7    "   : 59   $ $0 0 0 0d
 
 
  ?3 ?3 ?3 ?3B        @ @ @D- - -

 
 
 
 
r)   r9   c                   F    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dS )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)r3   r4   r5   
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_MODEr7   r)   r'   r   r     sr        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dS )EndpointRulesetResolverz5Resolves endpoints using a service's endpoint rulesetTNc
                     t          |||j        dk    rt          nd           | _        | j        j        j        | _        || _        || _        || _	        || _
        || _        || _        |	| _        i | _        d S )NrW   )ruleset_datapartition_dataexcluded_params)r   r%   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__  s     *.) !-55 '&
 
 
 #'."8"C+!-+&;#'=$!r)   c                 B   |i }|i }|                      |||          }t                              d|           	  | j        j        di |}n.# t
          $ r!}|                     ||          }| ||d}~ww xY wt                              d|j                   | j        sD|j        	                    d          r*d|vr&|
                    d|j        dd                    }|
                    d	 |j                                        D             
          }|S )zAInvokes the provider with params defined in the service's rulesetNz-Calling endpoint provider with parameters: %szEndpoint provider result: %szhttps://Endpointzhttp://   )urlc                 &    i | ]\  }}||d          S )r   r7   ).0r   vals      r'   
<dictcomp>z>EndpointRulesetResolver.construct_endpoint.<locals>.<dictcomp>)  s/        (SSV  r)   )headersr7   )_get_provider_paramsrj   rk   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_exceptions           r'   r(   z*EndpointRulesetResolver.construct_endpoint  s    I" O33Y
 
 			;_	
 	
 	
	1=dn=  ! OO % 	1 	1 	1!%!I!IO" " ")(b0	1 			0/2EFFF 	#..z::	 /11-667o1!""577 7  O *22 ,;,C,I,I,K,K   3 
 
 s   A 
A:A55A:c                 *   i }|                      |||          }| j                                        D ]_\  }}|                     |||          }|#|j        |                     |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   N)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_params0  s      #;;Y
 
 &*%<%B%B%D%D 	K 	K!J	88% /# 9  I
  Y%6%B ::!*!20 ;  	 $.7
+33J	JJJr)   c                     |                      ||          }||S |                     |||          }||S |                     |||          }||S |                     |          S r2   )&_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_contextR  s     <<
 
 M>>
 
 N::OY  	!
 $/++:::FFFr)   c                 V    |                      |          }|                    |          S r2   )_get_static_context_paramsrS   )r$   r   r   static_ctx_paramss       r'   r   z>EndpointRulesetResolver._resolve_param_as_static_context_paramh  s,     !;;OLL $$Z000r)   c                 r    |                      |          }||v r||         }|                    |          S d S r2   )_get_dynamic_context_paramsrS   )r$   r   r   r   dynamic_ctx_paramsmember_names         r'   r   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_paramn  sH     "==oNN+++,Z8K==--- ,+r)   c                 z    |                                  }||v r"||         }| j                            |          S d S r2   )_get_client_context_paramsr   rS   )r$   r   client_ctx_paramsclient_ctx_varnames       r'   r   z>EndpointRulesetResolver._resolve_param_as_client_context_paramv  sK     ;;==***!2:!>'++,>??? +*r)   c                 b    |j         }||v r#||         d         }t          j        ||          S d S )Npath)operation_context_parametersjmespathsearch)r$   r   r   r   operation_ctx_paramsr   s         r'   r   zAEndpointRulesetResolver._resolve_param_as_operation_context_param|  sB      /K---'
3F;D?4333 .-r)   c                     |t           j                                        vrt          |          |                    |          }t          |          r
 |            S |S )Nname)r   __members__valuesr   rS   callable)r$   r   r   r   s       r'   r   z1EndpointRulesetResolver._resolve_param_as_builtin  s`    7CJJLLLL6LIIII,,|,,G 	799r)   c                 $    d |j         D             S )z=Mapping of param names to static param value for an operationc                 (    i | ]}|j         |j        S r7   )r   valuer   params     r'   r   zFEndpointRulesetResolver._get_static_context_params.<locals>.<dictcomp>  s.     
 
 
 J
 
 
r)   )static_context_parametersr$   r   s     r'   r   z2EndpointRulesetResolver._get_static_context_params  s&    
 
(B
 
 
 	
r)   c                 $    d |j         D             S )z7Mapping of param names to member names for an operationc                 (    i | ]}|j         |j        S r7   )r   r   r   s     r'   r   zGEndpointRulesetResolver._get_dynamic_context_params.<locals>.<dictcomp>  s/     
 
 
 J)
 
 
r)   )context_parametersr   s     r'   r   z3EndpointRulesetResolver._get_dynamic_context_params  s&    
 
(;
 
 
 	
r)   c                 .    d | j         j        D             S )z7Mapping of param names to client configuration variablec                 B    i | ]}|j         t          |j                   S r7   )r   r   r   s     r'   r   zFEndpointRulesetResolver._get_client_context_params.<locals>.<dictcomp>  s6     
 
 
 J
5:..
 
 
r)   )r   client_context_parametersr+   s    r'   r   z2EndpointRulesetResolver._get_client_context_params  s)    
 
,F
 
 
 	
r)   c                     | j         j                                        }t          j        | j                  }| j                            d| ||||           |S )Nzbefore-endpoint-resolution.)r   modelparamscontext)r   
service_id	hyphenizerx   r   r   emit)r$   r   r   r   r  r   s         r'   r   z0EndpointRulesetResolver._get_customized_builtins  sl     (3==??
"i77  6*66(!# 	! 	
 	
 	
 #"r)   c                     t          |t                    rt          |          dk    rt          d          t                              dd                    d |D                        j                    j        t          k    rdi fS d |D             } fd|D             } j        4	 t           fd
|D                       \  }}n# t          $ r d	i fcY S w xY w j        A j                            d          } fd|D             }t          ||          }||         }n	 t          d |D                       \  }}nq# t          $ rd d}d |D             }t          st          d |D                       }|rt!          d          t#          d                    |                    w xY wi }	d|v r|d         |	d<   n;d|v r7t          |d                   dk    rd                    |d                   |	d<   d|v r|	                    |d                    d|v rt'          |d                   |	d<   t                              d|d         ||	           ||	fS )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, c                 @    g | ]}d |                     d           d S )"r   )rS   r   ss     r'   
<listcomp>zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s.    BBB+155==+++BBBr)   nonec                 P    g | ]#}|d                               d          d         $S r   #)splitr  s     r'   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s:     #
 #
 #
)*AfIOOC  $#
 #
 #
r)   c                 R    g | ]#}i |d                      |d                    i$S r   )_strip_sig_prefix)r   schemer$   s     r'   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  sK     
 
 
 GvFvt55fVnEEFF
 
 
r)   Nc              3   l   K   | ].}                     j        |d                    #j        |fV  /dS r   N)._does_botocore_authname_match_ruleset_authnamer   r   r  r$   s     r'   	<genexpr>zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sa       $ $JJ3QvY $0!4$ $ $ $ $ $r)   ,c                 z    i | ]7}                     |d                              d          d                   |8S r  )r  r  r   s     r'   r   zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<dictcomp>  sN     ) ) ) &&qys';';B'?@@!) ) )r)   c              3   H   K   | ]}|d          t           v |d          |fV  dS r  )r   r  s     r'   r!  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sE       $ $yN22 vYN2222$ $r)   Fc                     g | ]
}|d          S r   r7   r  s     r'   r  zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s    $E$E$E1QvY$E$E$Er)   c              3   (   K   | ]}|t           v V  d S r2   r	   )r   r  s     r'   r!  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  s<       + +" "::+ + + + + +r)   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: %sr   )
isinstancelistlen	TypeErrorrj   rk   joinr   r   nextStopIterationr   r  r   r   anyr   r   updater   )
r$   auth_schemes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  s    ,-- 	F\1B1Ba1G1GDEEE		1IIBB\BBBCC'		
 	
 	
 &(222:#
 #
.:#
 #
 #

 
 
 
&
 
 
 &2   $ $ $ $ $)$ $ $    ff !       Rx	 
 )5066s;;E) ) ) )%) ) )% 2. D /t4FF# $ $)$ $ $    ff
 !    $) $E$E$E$E$E! '* + +&7+ + + ( ($
 $ 4L   
 7*.))4E*F*F   %, f$$(.(?OH%%6))6,-..22,/HH-.- -) F""""}0E"FFF"f,,7E./8 8O34 			M6N		
 	
 	
 _$$s   -C CC)E A.F4c                 D    |                     d          r
|dd         n|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 ; ;Jy}}Jr)   c                     |                      |          }|                    d          d         }|dk    r|                    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   rW      N)r  r  r   )r$   botonamersnames      r'   r  zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname'  sc    4 ''//>>#&&q)t 3 3D 9 9|H!!r)   c                 t   |j                             d          }|dS |                    d          r?	 |                    d          d         }n# t          $ r |}Y nw xY wt          |          S | j        j        }|dk    r|dk    s|d	k    rt          |
          S |                    d          si|                    d          sT|                    d          s?|                    d          s*|                    d          s|                    d          rt          |
          S |
                                                    d          rt          |          S |dk    r|                    d          r&|                    d          }t          ||          S |                    d          s|                    d          rt          |
          S |dk    rt          |          S |dk    r;|                    d          rt          |
          S |dk    rt          |
          S dS )zAttempts to translate ruleset errors to pre-existing botocore
        exception types by string matching exception strings.
        r(  NzInvalid region in ARN: `   )labelrW   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.)kwargsrS   r   r  
IndexErrorr   r   r%   r   r   lowerr   r   r   r   )r$   ruleset_exceptionr	  r(  rL  r%   rP  s          r'   r   z;EndpointRulesetResolver.ruleset_error_to_botocore_exceptionG  s     &**511;F>>344 	6		#q)   (u5555*74HHH???63????=>>K>>"<==K >>"EFFK >>"@AA	K
 >>":;;K >>"GHHK BcJJJJyy{{%%n55 8+37777;&&~~n-- Fjj**3EEEE~~677 G3>>5< < G >#FFFF999+377778##~~6  B 9SAAAA>>>8SAAAAts   A A A c                     |dk    r&t          d|                                            d S |dk    rt          d           d S d S )NAccountIdEndpointModeACCOUNT_ID_MODE_	AccountIdRESOLVED_ACCOUNT_ID)r   upper)r$   r   r   s      r'   r   z6EndpointRulesetResolver._register_endpoint_feature_ids~  s]    000 F9??3D3D F FGGGGG;&& 566666 '&r)   )TNN)r3   r4   r5   r6   r@   r(   r   r   r   r   r   r   r   r   r   r   r   r   r?  r  r  r   r   r7   r)   r'   r   r     sm       ?? "#" " " ">4 4 4l     DG G G,1 1 1. . .@ @ @4 4 4   
 
 ^
 
 
 ^
 
 
 ^
# # #n% n% n%`K K K" " "@5 5 5n7 7 7 7 7r)   r   )1r6   rx   loggingrr   enumr   r   botocorer   r   botocore.authr   r   r   botocore.crtr
   botocore.endpoint_providerr   r   botocore.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   botocore.useragentr   botocore.utilsr   r   	getLoggerr3   rj   DEFAULT_URI_TEMPLATErh   r    r9   strr   r   r7   r)   r'   <module>rh     sz      				        ) ) ) ) ) ) ) )         
 2 1 1 1 1 1 O O O O O O O O                                 3 2 2 2 2 2 9 9 9 9 9 9 9 9g!!7 #R( :" :" :" :" :" :" :" :"zu
 u
 u
 u
 u
+ u
 u
 u
p	%B %B %B %B %BsD %B %B %BPj7 j7 j7 j7 j7 j7 j7 j7 j7 j7r)   