Source code for misfit.exceptions

import json


[docs]class MisfitException(Exception): pass
[docs]class MisfitHttpException(MisfitException): """ Base class for all HTTP exceptions raised by the Misfit API. All exceptions will have three attributes. - code: The status code of the HTTP response, defaults to 500 - message: The messages returned from the Misfit API - response: If we have one, this attribute will be the response object, of type :code:`requests.models.Response`. It's useful to have access to this because each response contains useful headers. For example, if the library throws an exception of type :code:`MisfitRateLimitError` you can retrieve a time stamp for when the rate limit resets with the following code: :code:`exc.response.headers['x-ratelimit-reset']` """ def __init__(self, code, message, response=None): self.code = code self.message = message self.response = response super(MisfitHttpException, self).__init__(self, message) @staticmethod
[docs] def build_exception(exc): code = exc.response.status_code if hasattr(exc, 'response') else 500 message = exc.message if hasattr(exc, 'message') else 'Unknown error' try: json_content = json.loads(exc.content.decode('utf8')) except ValueError: pass else: # Loading the content to json succeeded, try to get the # code/message from there if 'message' in json_content: message = json_content['message'] elif 'error_message' in json_content: message = json_content['error_message'] if 'code' in json_content: code = json_content['code'] elif 'error_code' in json_content: code = json_content['error_code'] exceptions = { 400: MisfitBadRequest, 401: MisfitUnauthorized, 403: MisfitForbidden, 404: MisfitNotFoundError, 429: MisfitRateLimitError, 500: MisfitUnknownError, 502: MisfitBadGateway } raise exceptions[code](code, message, getattr(exc, 'response', None))
[docs]class MisfitNotFoundError(MisfitHttpException): pass
[docs]class MisfitBadRequest(MisfitHttpException): pass
[docs]class MisfitBadGateway(MisfitHttpException): pass
[docs]class MisfitUnauthorized(MisfitHttpException): pass
[docs]class MisfitForbidden(MisfitHttpException): pass
[docs]class MisfitRateLimitError(MisfitHttpException): pass
[docs]class MisfitUnknownError(MisfitHttpException): pass