179 lines
5.2 KiB
Python
179 lines
5.2 KiB
Python
class BaseError(Exception):
|
|
'''
|
|
A base error class.
|
|
|
|
:ivar str message: A developer-friendly error message. Not
|
|
safe for programmatic use.
|
|
:ivar str type: A broad categorization of the error,
|
|
corresponding to the error class.
|
|
:ivar str code: An error code for programmatic use.
|
|
:ivar str display_message: A user-friendly error message. Not safe
|
|
for programmatic use. May be None.
|
|
'''
|
|
def __init__(
|
|
self,
|
|
message,
|
|
type,
|
|
code,
|
|
display_message,
|
|
):
|
|
super(BaseError, self).__init__(message)
|
|
|
|
# In Python 3, the Exception class does not expose a `message`
|
|
# attribute so we need to set it explicitly. See
|
|
# https://www.python.org/dev/peps/pep-0352/#retracted-ideas.
|
|
self.message = message
|
|
|
|
self.type = type
|
|
self.code = code
|
|
self.display_message = display_message
|
|
|
|
|
|
class PlaidError(BaseError):
|
|
'''
|
|
A Plaid API error.
|
|
|
|
:ivar str message: A developer-friendly error message. Not
|
|
safe for programmatic use.
|
|
:ivar str type: A broad categorization of the error,
|
|
corresponding to the error class.
|
|
:ivar str code: An error code for programmatic use.
|
|
:ivar str display_message: A user-friendly error message. Not safe
|
|
for programmatic use. May be None.
|
|
:ivar str request_id: A unique id returned for all server
|
|
responses.
|
|
:ivar list causes: A list of reasons explaining why the
|
|
error happened.
|
|
'''
|
|
|
|
def __init__(
|
|
self,
|
|
message,
|
|
type,
|
|
code,
|
|
display_message,
|
|
request_id="",
|
|
causes=None,
|
|
):
|
|
super(PlaidError, self).__init__(
|
|
message,
|
|
type,
|
|
code,
|
|
display_message,
|
|
)
|
|
self.request_id = request_id
|
|
self.causes = [
|
|
PlaidCause(
|
|
cause['error_message'],
|
|
cause['error_type'],
|
|
cause['error_code'],
|
|
cause.get('display_message', ''),
|
|
cause['item_id'],
|
|
) for cause in causes or []
|
|
]
|
|
|
|
@staticmethod
|
|
def from_response(response):
|
|
'''
|
|
Create an error of the right class from an API response.
|
|
|
|
:param response dict Response JSON
|
|
'''
|
|
cls = PLAID_ERROR_TYPE_MAP.get(response['error_type'], PlaidError)
|
|
return cls(response['error_message'],
|
|
response['error_type'],
|
|
response['error_code'],
|
|
response['display_message'],
|
|
response['request_id'],
|
|
response.get('causes'))
|
|
|
|
|
|
class PlaidCause(BaseError):
|
|
'''
|
|
A cause of a Plaid error.
|
|
|
|
:ivar str message: A developer-friendly error message. Not
|
|
safe for programmatic use.
|
|
:ivar str type: A broad categorization of the error,
|
|
corresponding to the error class.
|
|
:ivar str code: An error code for programmatic use.
|
|
:ivar str display_message: A user-friendly error message. Not safe
|
|
for programmatic use. May be None.
|
|
:ivar str item_id: The item ID.
|
|
'''
|
|
|
|
def __init__(
|
|
self,
|
|
message,
|
|
type,
|
|
code,
|
|
display_message,
|
|
item_id,
|
|
):
|
|
super(PlaidCause, self).__init__(
|
|
message,
|
|
type,
|
|
code,
|
|
display_message,
|
|
)
|
|
self.item_id = item_id
|
|
|
|
|
|
class InvalidRequestError(PlaidError):
|
|
'''The request is malformed and cannot be processed.'''
|
|
|
|
pass
|
|
|
|
|
|
class InvalidInputError(PlaidError):
|
|
'''The request is correctly formatted, but the values are incorrect.'''
|
|
|
|
pass
|
|
|
|
|
|
class RateLimitExceededError(PlaidError):
|
|
'''The request is valid but has exceeded established rate limits.'''
|
|
|
|
pass
|
|
|
|
|
|
class APIError(PlaidError):
|
|
'''Planned maintenance or an API internal server error.'''
|
|
|
|
pass
|
|
|
|
|
|
class ItemError(PlaidError):
|
|
'''There is invalid information about an item or it is not supported.'''
|
|
|
|
pass
|
|
|
|
|
|
class InstitutionError(PlaidError):
|
|
'''There are errors for the requested financial institution.'''
|
|
|
|
pass
|
|
|
|
|
|
class AuthError(PlaidError):
|
|
'''There are errors with verifying or pulling auth numbers data.'''
|
|
|
|
pass
|
|
|
|
|
|
class AssetReportError(PlaidError):
|
|
'''There are errors with creating the asset report.'''
|
|
|
|
pass
|
|
|
|
|
|
PLAID_ERROR_TYPE_MAP = {
|
|
'INSTITUTION_ERROR': InstitutionError,
|
|
'INVALID_REQUEST': InvalidRequestError,
|
|
'INVALID_INPUT': InvalidInputError,
|
|
'RATE_LIMIT_EXCEEDED': RateLimitExceededError,
|
|
'API_ERROR': APIError,
|
|
'ITEM_ERROR': ItemError,
|
|
'AUTH_ERROR': AuthError,
|
|
'ASSET_REPORT_ERROR': AssetReportError,
|
|
}
|