225 lines
6.7 KiB
Python
225 lines
6.7 KiB
Python
# Copyright (c) 2012-2013 Mitch Garnaat http://garnaat.org/
|
|
# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
# copy of this software and associated documentation files (the
|
|
# "Software"), to deal in the Software without restriction, including
|
|
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
|
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
|
# persons to whom the Software is furnished to do so, subject to the fol-
|
|
# lowing conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included
|
|
# in all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
|
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
# IN THE SOFTWARE.
|
|
#
|
|
|
|
|
|
class BotoCoreError(Exception):
|
|
"""
|
|
The base exception class for BotoCore exceptions.
|
|
|
|
:ivar msg: The descriptive message associated with the error.
|
|
"""
|
|
fmt = 'An unspecified error occured'
|
|
|
|
def __init__(self, **kwargs):
|
|
msg = self.fmt.format(**kwargs)
|
|
Exception.__init__(self, msg)
|
|
self.kwargs = kwargs
|
|
|
|
|
|
class DataNotFoundError(BotoCoreError):
|
|
"""
|
|
The data associated with a particular path could not be loaded.
|
|
|
|
:ivar path: The data path that the user attempted to load.
|
|
"""
|
|
fmt = 'Unable to load data for: {data_path}'
|
|
|
|
|
|
class NoCredentialsError(BotoCoreError):
|
|
"""
|
|
No credentials could be found
|
|
"""
|
|
fmt = 'Unable to locate credentials'
|
|
|
|
|
|
class NoRegionError(BotoCoreError):
|
|
"""
|
|
No region was specified
|
|
|
|
:ivar env_var: The name of the environment variable to use to
|
|
specify the default region.
|
|
"""
|
|
fmt = 'You must specify a region or set the {env_var} environment variable.'
|
|
|
|
|
|
class UnknownSignatureVersionError(BotoCoreError):
|
|
"""
|
|
Requested Signature Version is not known.
|
|
|
|
:ivar signature_version: The name of the requested signature version.
|
|
"""
|
|
fmt = 'Unknown Signature Version: {signature_version}.'
|
|
|
|
|
|
class ServiceNotInRegionError(BotoCoreError):
|
|
"""
|
|
The service is not available in requested region.
|
|
|
|
:ivar service_name: The name of the service.
|
|
:ivar region_name: The name of the region.
|
|
"""
|
|
fmt = 'Service {service_name} not available in region {region_name}'
|
|
|
|
|
|
class ProfileNotFound(BotoCoreError):
|
|
"""
|
|
The specified configuration profile was not found in the
|
|
configuration file.
|
|
|
|
:ivar profile: The name of the profile the user attempted to load.
|
|
"""
|
|
fmt = 'The config profile ({profile}) could not be found'
|
|
|
|
|
|
class ConfigParseError(BotoCoreError):
|
|
"""
|
|
The configuration file could not be parsed.
|
|
|
|
:ivar path: The path to the configuration file.
|
|
"""
|
|
fmt = 'Unable to parse config file: {path}'
|
|
|
|
|
|
class ConfigNotFound(BotoCoreError):
|
|
"""
|
|
The specified configuration file could not be found.
|
|
|
|
:ivar path: The path to the configuration file.
|
|
"""
|
|
fmt = 'The specified config file ({path}) could not be found.'
|
|
|
|
|
|
class MissingParametersError(BotoCoreError):
|
|
"""
|
|
One or more required parameters were not supplied.
|
|
|
|
:ivar object: The object that has missing parameters.
|
|
This can be an operation or a parameter (in the
|
|
case of inner params). The str() of this object
|
|
will be used so it doesn't need to implement anything
|
|
other than str().
|
|
:ivar missing: The names of the missing parameters.
|
|
"""
|
|
fmt = ('The following required parameters are missing for '
|
|
'{object_name}: {missing}')
|
|
|
|
|
|
class ValidationError(BotoCoreError):
|
|
"""
|
|
An exception occurred validating parameters.
|
|
|
|
Subclasses must accept a ``value`` and ``param``
|
|
argument in their ``__init__``.
|
|
|
|
:ivar value: The value that was being validated.
|
|
:ivar param: The parameter that failed validation.
|
|
:ivar type_name: The name of the underlying type.
|
|
"""
|
|
fmt = ("Invalid value ('{value}') for param {param} "
|
|
"of type {type_name} ")
|
|
|
|
|
|
# These exceptions subclass from ValidationError so that code
|
|
# can just 'except ValidationError' to catch any possibly validation
|
|
# error.
|
|
|
|
class UnknownKeyError(ValidationError):
|
|
"""
|
|
Unknown key in a struct paramster.
|
|
|
|
:ivar value: The value that was being checked.
|
|
:ivar param: The name of the parameter.
|
|
:ivar choices: The valid choices the value can be.
|
|
"""
|
|
fmt = ("Unknown key '{value}' for param '{param}'. Must be one "
|
|
"of: {choices}")
|
|
|
|
|
|
class RangeError(ValidationError):
|
|
"""
|
|
A parameter value was out of the valid range.
|
|
|
|
:ivar value: The value that was being checked.
|
|
:ivar param: The parameter that failed validation.
|
|
:ivar min_value: The specified minimum value.
|
|
:ivar max_value: The specified maximum value.
|
|
"""
|
|
fmt = ('Value out of range for param {param}: '
|
|
'{min_value} <= {value} <= {max_value}')
|
|
|
|
|
|
class UnknownParameterError(ValidationError):
|
|
"""
|
|
Unknown top level parameter.
|
|
|
|
:ivar name: The name of the unknown parameter.
|
|
:ivar operation: The name of the operation.
|
|
:ivar choices: The valid choices the parameter name can be.
|
|
"""
|
|
fmt = ("Unknown parameter '{name}' for operation {operation}. Must be one "
|
|
"of: {choices}")
|
|
|
|
|
|
class UnknownServiceStyle(BotoCoreError):
|
|
"""
|
|
Unknown style of service invocation.
|
|
|
|
:ivar service_style: The style requested.
|
|
"""
|
|
fmt = 'The service style ({service_style}) is not understood.'
|
|
|
|
|
|
class PaginationError(BotoCoreError):
|
|
fmt = 'Error during pagination: {message}'
|
|
|
|
|
|
class EventNotFound(BotoCoreError):
|
|
"""
|
|
The specified event name is unknown to the system.
|
|
|
|
:ivar event_name: The name of the event the user attempted to use.
|
|
"""
|
|
fmt = 'The event ({event_name}) is not known'
|
|
|
|
|
|
class ChecksumError(BotoCoreError):
|
|
"""The expected checksum did not match the calculated checksum.
|
|
|
|
"""
|
|
fmt = ('Checksum {checksum_type} failed, expected checksum '
|
|
'{expected_checksum} did not match calculated checksum '
|
|
'{actual_checksum}.')
|
|
|
|
|
|
class UnseekableStreamError(BotoCoreError):
|
|
"""Need to seek a stream, but stream does not support seeking.
|
|
|
|
"""
|
|
fmt = ('Need to rewind the stream {stream_object}, but stream '
|
|
'is not seekable.')
|
|
|
|
|
|
class WaiterError(BotoCoreError):
|
|
"""Waiter failed to reach desired state."""
|
|
fmt = 'Waiter {name} failed: {reason}'
|