Example #1
0
def get_s3_bucket_region(client: BaseClient, bucket_name: str) -> str:
    """Get S3 bucket region"""
    try:
        region = client.get_bucket_location(Bucket=bucket_name)["LocationConstraint"]
        if region is None:
            region = "us-east-1"  # aws api wart
        return region
    except ClientError as c_e:
        response_error = getattr(c_e, "response", {}).get("Error", {})
        error_code = response_error.get("Code", "")
        if error_code == "AccessDenied":
            raise S3BucketAccessDeniedException(
                f"Error getting region for {bucket_name}: {response_error}", c_e
            )
        if error_code == "NoSuchBucket":
            raise S3BucketDoesNotExistException(
                f"Error getting region for {bucket_name}: {response_error}", c_e
            )
        raise c_e
Example #2
0
def get_s3_bucket_region(client: BaseClient, bucket_name: str) -> str:
    """Get S3 bucket region"""
    # The list of valid location values is defined here:
    # https://docs.aws.amazon.com/general/latest/gr/s3.html
    try:
        region = client.get_bucket_location(
            Bucket=bucket_name)["LocationConstraint"]
        if region is None:
            region = "us-east-1"  # aws api wart
        elif region == "EU":
            region = "eu-west-1"
        return region
    except ClientError as c_e:
        response_error = getattr(c_e, "response", {}).get("Error", {})
        error_code = response_error.get("Code", "")
        if error_code == "AccessDenied":
            raise S3BucketAccessDeniedException(
                f"Error getting region for {bucket_name}: {response_error}",
                c_e) from c_e
        if error_code == "NoSuchBucket":
            raise S3BucketDoesNotExistException(
                f"Error getting region for {bucket_name}: {response_error}",
                c_e) from c_e
        raise c_e