|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import botocore.exceptions |
|
|
|
|
|
|
|
class Boto3Error(Exception): |
|
"""Base class for all Boto3 errors.""" |
|
|
|
|
|
class ResourceLoadException(Boto3Error): |
|
pass |
|
|
|
|
|
|
|
|
|
class NoVersionFound(Boto3Error): |
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UnknownAPIVersionError( |
|
Boto3Error, botocore.exceptions.DataNotFoundError |
|
): |
|
def __init__(self, service_name, bad_api_version, available_api_versions): |
|
msg = ( |
|
f"The '{service_name}' resource does not support an API version of: {bad_api_version}\n" |
|
f"Valid API versions are: {available_api_versions}" |
|
) |
|
|
|
|
|
Boto3Error.__init__(self, msg) |
|
|
|
|
|
class ResourceNotExistsError( |
|
Boto3Error, botocore.exceptions.DataNotFoundError |
|
): |
|
"""Raised when you attempt to create a resource that does not exist.""" |
|
|
|
def __init__(self, service_name, available_services, has_low_level_client): |
|
msg = ( |
|
"The '{}' resource does not exist.\n" |
|
"The available resources are:\n" |
|
" - {}\n".format( |
|
service_name, '\n - '.join(available_services) |
|
) |
|
) |
|
if has_low_level_client: |
|
msg = ( |
|
f"{msg}\nConsider using a boto3.client('{service_name}') " |
|
f"instead of a resource for '{service_name}'" |
|
) |
|
|
|
|
|
Boto3Error.__init__(self, msg) |
|
|
|
|
|
class RetriesExceededError(Boto3Error): |
|
def __init__(self, last_exception, msg='Max Retries Exceeded'): |
|
super().__init__(msg) |
|
self.last_exception = last_exception |
|
|
|
|
|
class S3TransferFailedError(Boto3Error): |
|
pass |
|
|
|
|
|
class S3UploadFailedError(Boto3Error): |
|
pass |
|
|
|
|
|
class DynamoDBOperationNotSupportedError(Boto3Error): |
|
"""Raised for operations that are not supported for an operand.""" |
|
|
|
def __init__(self, operation, value): |
|
msg = ( |
|
f'{operation} operation cannot be applied to value {value} of type ' |
|
f'{type(value)} directly. Must use AttributeBase object methods ' |
|
f'(i.e. Attr().eq()). to generate ConditionBase instances first.' |
|
) |
|
Exception.__init__(self, msg) |
|
|
|
|
|
|
|
DynanmoDBOperationNotSupportedError = DynamoDBOperationNotSupportedError |
|
|
|
|
|
class DynamoDBNeedsConditionError(Boto3Error): |
|
"""Raised when input is not a condition""" |
|
|
|
def __init__(self, value): |
|
msg = ( |
|
f'Expecting a ConditionBase object. Got {value} of type {type(value)}. ' |
|
f'Use AttributeBase object methods (i.e. Attr().eq()). to ' |
|
f'generate ConditionBase instances.' |
|
) |
|
Exception.__init__(self, msg) |
|
|
|
|
|
class DynamoDBNeedsKeyConditionError(Boto3Error): |
|
pass |
|
|
|
|
|
class PythonDeprecationWarning(Warning): |
|
""" |
|
Python version being used is scheduled to become unsupported |
|
in an future release. See warning for specifics. |
|
""" |
|
|
|
pass |
|
|