# Copyright 2011 OpenStack LLC # # 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 novaclient import exceptions from novaclient.exceptions import UnsupportedVersion from novaclient.exceptions import CommandError from novaclient.exceptions import AuthorizationFailure from novaclient.exceptions import NoUniqueMatch from novaclient.exceptions import NoTokenLookupException from novaclient.exceptions import EndpointNotFound from novaclient.exceptions import AmbiguousEndpoints from novaclient.exceptions import ClientException from novaclient.exceptions import BadRequest from novaclient.exceptions import Unauthorized from novaclient.exceptions import Forbidden from novaclient.exceptions import NotFound from novaclient.exceptions import OverLimit from novaclient.exceptions import HTTPNotImplemented class UnprocessableEntity(exceptions.ClientException): """ HTTP 422 - Unprocessable Entity: The request cannot be processed. """ http_status = 422 message = "Unprocessable Entity" _code_map = dict((c.http_status, c) for c in [UnprocessableEntity]) def from_response(response, body): """ Return an instance of an ClientException or subclass based on an httplib2 response. Usage:: resp, body = http.request(...) if resp.status != 200: raise exception_from_response(resp, body) """ cls = _code_map.get(response.status, None) if not cls: cls = exceptions._code_map.get(response.status, exceptions.ClientException) if body: message = "n/a" details = "n/a" if hasattr(body, 'keys'): error = body[body.keys()[0]] message = error.get('message', None) details = error.get('details', None) return cls(code=response.status, message=message, details=details) else: return cls(code=response.status)