in botocore/regions.py [0:0]
def _endpoint_for_partition(self, partition, service_name, region_name,
use_dualstack_endpoint, use_fips_endpoint,
force_partition=False):
partition_name = partition["partition"]
if (use_dualstack_endpoint and
partition_name in self._UNSUPPORTED_DUALSTACK_PARTITIONS):
error_msg = ("Dualstack endpoints are currently not supported"
" for %s partition" % partition_name)
raise EndpointVariantError(tags=['dualstack'], error_msg=error_msg)
# Get the service from the partition, or an empty template.
service_data = partition['services'].get(
service_name, DEFAULT_SERVICE_DATA)
# Use the partition endpoint if no region is supplied.
if region_name is None:
if 'partitionEndpoint' in service_data:
region_name = service_data['partitionEndpoint']
else:
raise NoRegionError()
resolve_kwargs = {
'partition': partition,
'service_name': service_name,
'service_data': service_data,
'endpoint_name': region_name,
'use_dualstack_endpoint': use_dualstack_endpoint,
'use_fips_endpoint': use_fips_endpoint,
}
# Attempt to resolve the exact region for this partition.
if region_name in service_data['endpoints']:
return self._resolve(**resolve_kwargs)
# Check to see if the endpoint provided is valid for the partition.
if self._region_match(partition, region_name) or force_partition:
# Use the partition endpoint if set and not regionalized.
partition_endpoint = service_data.get('partitionEndpoint')
is_regionalized = service_data.get('isRegionalized', True)
if partition_endpoint and not is_regionalized:
LOG.debug('Using partition endpoint for %s, %s: %s',
service_name, region_name, partition_endpoint)
resolve_kwargs['endpoint_name'] = partition_endpoint
return self._resolve(**resolve_kwargs)
LOG.debug('Creating a regex based endpoint for %s, %s',
service_name, region_name)
return self._resolve(**resolve_kwargs)