Source code for tcc.exceptions
"""Exception handling for tcc package
See https://docs.python.org/3/tutorial/errors.html#user-defined-exceptions
"""
import json
[docs]class TCCError(Exception):
"""Base error for package
"""
pass
[docs]class HTTPCommunicationError(TCCError):
"""Wrapping exceptions from requests
See https://julien.danjou.info/python-exceptions-guide under Wrapping Exceptions
"""
def __init__(self, msg, orig_exc):
super(HTTPCommunicationError, self).__init__('{}: {}'.format(msg, orig_exc))
self.orig_exc = orig_exc
[docs]class ServerError(TCCError):
"""Raised when receive not 200 from server
400: Probably something wrong with payload (e.g. option validation)
401: Authentication
Should not get anything else...
"""
def __init__(self, request):
code = request.status_code
if code == 400:
msg = "Server could not process request properly (code {})".format(code)
elif code == 401:
msg = "Server failed to authenticate user (code {})".format(code)
elif code == 404:
msg = "Server failed to find resource (code {})".format(code)
else:
msg = "Server returned unknown response (code {})".format(code)
try:
response = json.loads(request.text)
message = response.get('message', None)
errors = response.get('errors', None)
if message is not None:
msg += ': {}'.format(message)
if isinstance(errors, dict):
msg += '\n'
for key in errors:
msg += " {}: {}\n".format(key, str(errors[key]))
except ValueError:
msg = "Server did not provide valid response body (code {})".format(code)
super(ServerError, self).__init__(msg)
self.request = request