summaryrefslogtreecommitdiff
path: root/heatclient/exc.py
diff options
context:
space:
mode:
authorSteve Baker <sbaker@redhat.com>2012-10-10 08:55:03 +1300
committerSteve Baker <sbaker@redhat.com>2012-10-10 08:55:03 +1300
commit1269bb20c770ca9869f54da9e1db9af7173b9809 (patch)
tree2f66d6bb8078a1e765b3215e3a93b7a3e5fa44e4 /heatclient/exc.py
downloadpython-heatclient-1269bb20c770ca9869f54da9e1db9af7173b9809.tar.gz
Initial import
Diffstat (limited to 'heatclient/exc.py')
-rw-r--r--heatclient/exc.py163
1 files changed, 163 insertions, 0 deletions
diff --git a/heatclient/exc.py b/heatclient/exc.py
new file mode 100644
index 0000000..d3d3cab
--- /dev/null
+++ b/heatclient/exc.py
@@ -0,0 +1,163 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import sys
+
+
+class BaseException(Exception):
+ """An error occurred."""
+ def __init__(self, message=None):
+ self.message = message
+
+ def __str__(self):
+ return self.message or self.__class__.__doc__
+
+
+class CommandError(BaseException):
+ """Invalid usage of CLI"""
+
+
+class InvalidEndpoint(BaseException):
+ """The provided endpoint is invalid."""
+
+
+class CommunicationError(BaseException):
+ """Unable to communicate with server."""
+
+
+class ClientException(Exception):
+ """DEPRECATED"""
+
+
+class HTTPException(ClientException):
+ """Base exception for all HTTP-derived exceptions"""
+ code = 'N/A'
+
+ def __init__(self, details=None):
+ self.details = details
+
+ def __str__(self):
+ return "%s (HTTP %s)" % (self.__class__.__name__, self.code)
+
+
+class HTTPMultipleChoices(HTTPException):
+ code = 300
+
+ def __str__(self):
+ self.details = ("Requested version of OpenStack Images API is not"
+ "available.")
+ return "%s (HTTP %s) %s" % (self.__class__.__name__, self.code,
+ self.details)
+
+
+class BadRequest(HTTPException):
+ """DEPRECATED"""
+ code = 400
+
+
+class HTTPBadRequest(BadRequest):
+ pass
+
+
+class Unauthorized(HTTPException):
+ """DEPRECATED"""
+ code = 401
+
+
+class HTTPUnauthorized(Unauthorized):
+ pass
+
+
+class Forbidden(HTTPException):
+ """DEPRECATED"""
+ code = 403
+
+
+class HTTPForbidden(Forbidden):
+ pass
+
+
+class NotFound(HTTPException):
+ """DEPRECATED"""
+ code = 404
+
+
+class HTTPNotFound(NotFound):
+ pass
+
+
+class HTTPMethodNotAllowed(HTTPException):
+ code = 405
+
+
+class Conflict(HTTPException):
+ """DEPRECATED"""
+ code = 409
+
+
+class HTTPConflict(Conflict):
+ pass
+
+
+class OverLimit(HTTPException):
+ """DEPRECATED"""
+ code = 413
+
+
+class HTTPOverLimit(OverLimit):
+ pass
+
+
+class HTTPInternalServerError(HTTPException):
+ code = 500
+
+
+class HTTPNotImplemented(HTTPException):
+ code = 501
+
+
+class HTTPBadGateway(HTTPException):
+ code = 502
+
+
+class ServiceUnavailable(HTTPException):
+ """DEPRECATED"""
+ code = 503
+
+
+class HTTPServiceUnavailable(ServiceUnavailable):
+ pass
+
+
+#NOTE(bcwaldon): Build a mapping of HTTP codes to corresponding exception
+# classes
+_code_map = {}
+for obj_name in dir(sys.modules[__name__]):
+ if obj_name.startswith('HTTP'):
+ obj = getattr(sys.modules[__name__], obj_name)
+ _code_map[obj.code] = obj
+
+
+def from_response(response):
+ """Return an instance of an HTTPException based on httplib response."""
+ cls = _code_map.get(response.status, HTTPException)
+ return cls()
+
+
+class NoTokenLookupException(Exception):
+ """DEPRECATED"""
+ pass
+
+
+class EndpointNotFound(Exception):
+ """DEPRECATED"""
+ pass