o ?c@@s~dZddlZddlZddlmZddlmZmZmZe e Z dZ diiZ GdddZGd d d eZGd d d eeZdS) 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)EndpointVariantError NoRegionErrorUnknownRegionErrorz{service}.{region}.{dnsSuffix} endpointsc@s.eZdZdZd ddZddZ d d d ZdS) BaseEndpointResolverz3Resolves regions and endpoints. Must be subclassed.NcCt)a7Resolves 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) A list of possible signature versions, including s3, v4, v2, and s3v4 - protocols: (list) 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_namerk/private/var/folders/cw/wlscbxl13mj6wd668h7l9g9sllkg5j/T/pip-target-b31awkwq/lib/python/botocore/regions.pyconstruct_endpoint%sz'BaseEndpointResolver.construct_endpointcCr)zLists the partitions available to the endpoint resolver. :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]). r )r rrrget_available_partitionsBsz-BaseEndpointResolver.get_available_partitionsawsFcCr)aLists 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_nameallow_non_regionalrrrget_available_endpointsIsz,BaseEndpointResolver.get_available_endpointsN)rF)__name__ __module__ __qualname____doc__rrrrrrrr"s  rc@seZdZdZddgZd%ddZd&dd Zd d Z   d'd dZ d(ddZ  d)ddZ ddZ d%ddZ ddZ ddZddZddZdd Zd!d"Zd#d$Zd S)*EndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz aws-iso-bFcCs d|vrtd||_||_dS)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_datauses_builtin_data)r endpoint_datarrrr__init__ds  zEndpointResolver.__init__rcCsB|jdD]}|d|krq|d}||vrq||dSdS)Nr partitionservicesr)r)r r rr"r#rrrget_service_endpoints_datars z+EndpointResolver.get_service_endpoints_datacCs&g}|jdD] }||dq|S)Nrr")rappend)r resultr"rrrr{sz)EndpointResolver.get_available_partitionsNc Csg}|jdD]@}|d|krq|d}||vrq||d}|D]%} | |dv} |r=| r=||| |} | r<|| q!|sA| rF|| q!q|S)Nrr"r#rregions)r_retrieve_variant_datar%) r r rrendpoint_variant_tagsr&r"r#Zservice_endpoints endpoint_nameZis_regional_endpointZ variant_datarrrrs,      z(EndpointResolver.get_available_endpointscCs\|jdD]&}|d|kr+|r%||d|}|r$d|vr$|dSq|dSqdS)Nrr"defaults dnsSuffix)rr(get)r rr)r"variantrrrget_partition_dns_suffixs      z)EndpointResolver.get_partition_dns_suffixc Cs|dkr |r |dur d}|dur4d}|jdD] }|d|kr!|}q|dur2||||||d}|SdS|jdD]}|rE|d|jvrEq9||||||}|rT|Sq9dS)NZs3z us-east-1rr"T)r_endpoint_for_partition!_UNSUPPORTED_DUALSTACK_PARTITIONS) r r r ruse_dualstack_endpointuse_fips_endpointZvalid_partitionr"r&rrrrsT  z#EndpointResolver.construct_endpointcCs4|jdD]}|||r|dSqt|dd)Nrr"z,No partition found for provided region_name.)r error_msg)r _region_matchr)r r r"rrrget_partition_for_regions  z)EndpointResolver.get_partition_for_regionc Cs|d}|r||jvrd|}tdg|d|d|t} |dur.d| vr+| d}nt||| |||d} || dvrE|jdi| S|||sM|r| d} | d d } | rp| sptd ||| | | d <|jdi| Std |||jdi| SdS)Nr"z@Dualstack endpoints are currently not supported for %s partition dualstacktagsr4r#ZpartitionEndpoint)r"r service_datar*r2r3rZisRegionalizedTz'Using partition endpoint for %s, %s: %sr*z*Creating a regex based endpoint for %s, %sr) r1rr-DEFAULT_SERVICE_DATAr_resolver5LOGdebug) r r"r r r2r3Zforce_partitionrr4r:Zresolve_kwargsZpartition_endpointZis_regionalizedrrrr0sZ     z(EndpointResolver._endpoint_for_partitioncCs0||dvrdSd|vrt|d|SdS)Nr'TZ regionRegexF)recompilematch)r r"r rrrr5(s zEndpointResolver._region_matchcCs>|dg}|D]}t|dt|kr|}|SqdS)Nvariantsr9)r-setcopy)r r r9rBr.r&rrrr(/s z'EndpointResolver._retrieve_variant_datacCs$g}|r |d|r|d|S)Nr7Zfips)r%)r r2r3r9rrr_create_tag_list6s   z!EndpointResolver._create_tag_listcCs4i}|||fD]}|||}|r|||q|Sr)r( _merge_keys)r r9r service_defaultspartition_defaultsr&rBr.rrr_resolve_variant>s  z!EndpointResolver._resolve_variantc Cs"|di|i}|drtd||di}|di} |||} | rK|| ||| } | ikrDd|d|} t| | d||| n|} d| vrW|d| d<|d | d <|| d <||| || | ||| d ||| d| d <d | vr||| d ||| d| d <| S) Nr deprecatedz5Client is configured with the deprecated endpoint: %sr+zEndpoint does not exist for z in region r8r,r"Z endpointNamehostnameZ sslCommonName)r-r=warningrErIrrF_expand_template) r r"r r:r*r2r3r rGrHr9r&r4rrrr<Hs\          zEndpointResolver._resolvecCs"|D] }||vr||||<qdSrr)r from_datar&keyrrrrFs  zEndpointResolver._merge_keyscCs|j|||dS)N)Zserviceregionr,)format)r r"templater r*r,rrrrMsz!EndpointResolver._expand_template)F)r)rFNr)NNFF)rrrrr1r!r$rrr/rr6r0r5r(rErIr<rFrMrrrrr_s6       2 A B rc@s8eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d S) EndpointResolverBuiltinsz AWS::Regionz AWS::UseFIPSzAWS::UseDualStackzAWS::STS::UseGlobalEndpointzAWS::S3::UseGlobalEndpointzAWS::S3::AcceleratezAWS::S3::ForcePathStylezAWS::S3::UseArnRegionzAWS::S3Control::UseArnRegionz'AWS::S3::DisableMultiRegionAccessPointsz SDK::EndpointN)rrrZ AWS_REGIONZ AWS_USE_FIPSZAWS_USE_DUALSTACKZAWS_STS_USE_GLOBAL_ENDPOINTZAWS_S3_USE_GLOBAL_ENDPOINTZAWS_S3_ACCELERATEZAWS_S3_FORCE_PATH_STYLEZAWS_S3_USE_ARN_REGIONZAWS_S3CONTROL_USE_ARN_REGIONZAWS_S3_DISABLE_MRAPZ SDK_ENDPOINTrrrrrSsrS)rloggingr?enumrZbotocore.exceptionsrrr getLoggerrr=ZDEFAULT_URI_TEMPLATEr;rrstrrSrrrrs   =: