Files
python-solumclient/solumclient/common/exc.py
zhurong b951bd5ea0 Remove all the openstack dir
Remove all the openstack dir

Change-Id: I7214c3835686c4a2fa2ed237667e717de5af96a7
2016-10-19 20:40:29 +08:00

78 lines
2.5 KiB
Python

# Copyright 2013 - Noorul Islam K M
#
# 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.
from solumclient.common.apiclient import exceptions
class CommandException(Exception):
"""An error occurred."""
def __init__(self, message=None):
self.message = message
def __str__(self):
return self.message or self.__class__.__doc__
class CommandError(CommandException):
"""Invalid usage of CLI."""
class NotUnique(CommandException):
"""Name refers to more than one of a given resource."""
def __init__(self, resource='resource'):
message = "More than one %s by that name. Retry with the UUID."
self.message = message % resource
def from_response(response, method, url):
"""Returns an instance of :class:`HttpError` or subclass based on response.
:param response: instance of `requests.Response` class
:param method: HTTP method used for request
:param url: URL used for request
"""
kwargs = {
"http_status": response.status_code,
"response": response,
"method": method,
"url": url,
"request_id": response.headers.get("x-compute-request-id"),
}
if "retry-after" in response.headers:
kwargs["retry_after"] = response.headers["retry-after"]
content_type = response.headers.get("Content-Type", "")
if content_type.startswith("application/json"):
try:
body = response.json()
except ValueError:
pass
else:
if isinstance(body, dict):
kwargs["message"] = body.get("faultstring")
kwargs["details"] = body.get("debuginfo")
elif content_type.startswith("text/"):
kwargs["details"] = response.text
try:
cls = exceptions._code_map[response.status_code]
except KeyError:
if 500 <= response.status_code < 600:
cls = exceptions.HttpServerError
elif 400 <= response.status_code < 500:
cls = exceptions.HTTPClientError
else:
cls = exceptions.HttpError
return cls(**kwargs)