# Copyright 2014 VMware, Inc. # # All Rights Reserved # # 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 vmware_nsx._i18n import _ class NsxApiException(Exception): """Base NSX API Client Exception. To correctly use this class, inherit from it and define a 'message' property. That message will get printf'd with the keyword arguments provided to the constructor. """ message = _("An unknown exception occurred.") def __init__(self, **kwargs): try: self._error_string = self.message % kwargs except Exception: # at least get the core message out if something happened self._error_string = self.message def __str__(self): return self._error_string class UnAuthorizedRequest(NsxApiException): message = _("Server denied session's authentication credentials.") class ResourceNotFound(NsxApiException): message = _("An entity referenced in the request was not found.") class Conflict(NsxApiException): message = _("Request conflicts with configuration on a different " "entity.") class ServiceUnavailable(NsxApiException): message = _("Request could not completed because the associated " "resource could not be reached.") class Forbidden(NsxApiException): message = _("The request is forbidden from accessing the " "referenced resource.") class ReadOnlyMode(Forbidden): message = _("Create/Update actions are forbidden when in read-only mode.") class RequestTimeout(NsxApiException): message = _("The request has timed out.") class BadRequest(NsxApiException): message = _("The server is unable to fulfill the request due " "to a bad syntax") class InvalidSecurityCertificate(BadRequest): message = _("The backend received an invalid security certificate.") def fourZeroZero(response=None): if response and "Invalid SecurityCertificate" in response.body: raise InvalidSecurityCertificate() raise BadRequest() def fourZeroFour(response=None): raise ResourceNotFound() def fourZeroNine(response=None): raise Conflict() def fiveZeroThree(response=None): raise ServiceUnavailable() def fourZeroThree(response=None): if 'read-only' in response.body: raise ReadOnlyMode() else: raise Forbidden() def zero(self, response=None): raise NsxApiException() ERROR_MAPPINGS = { 400: fourZeroZero, 404: fourZeroFour, 405: zero, 409: fourZeroNine, 503: fiveZeroThree, 403: fourZeroThree, 301: zero, 307: zero, 500: zero, 501: zero }