fxa/errors.py (23 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
"""
fxa.errors: basic exception classes for PyFxA
"""
class Error(Exception):
"""Base error class for all PyFxA exceptions."""
pass
class OutOfProtocolError(Error):
"""Base error class for undefined out-of-protocol error conditions.
Such errors will typically be raised if a server is behaving badly, e.g.
returning invalid JSON responses. These are typically fatal as they
mean that a piece of the infra is not acting as it should.
"""
pass
class InProtocolError(Error):
"""Base error class for defined in-protocol error conditions.
Such errors will always present as a well-formed JSON response from a
server, and will include a code, errno, error message etc. We reflect
these properties as attributes of the exception object.
"""
def __init__(self, details={}):
self.details = details
self.code = details.get("code", 500)
self.errno = details.get("errno", 999)
self.error = details.get("error", "unknown error")
self.info = details.get("info", None)
message = details.get("message", self.error)
super().__init__(message)
class ClientError(InProtocolError):
"""Base error class for in-protocol errors caused by client behaviour."""
pass
class ServerError(InProtocolError):
"""Base error class for in-protocol errors caused by server behaviour."""
pass
class TrustError(Error):
"""Base error class for security conditions being violated.
Examples might include a bad signature on some data, a mismatched
audience on an assertion, or a missing scope on an OAuth token.
"""
pass
class ScopeMismatchError(TrustError):
"""Error raised when the OAuth scopes do not match."""
def __init__(self, provided, required):
message = f"scope {provided} does not match {required}"
super().__init__(message)