diff --git a/trakt/errors.py b/trakt/errors.py index a357847..5b366d2 100644 --- a/trakt/errors.py +++ b/trakt/errors.py @@ -69,11 +69,13 @@ class OAuthException(TraktException): class OAuthRefreshException(OAuthException): + """Raised when OAuth token refresh fails.""" + message = 'Unauthorized - OAuth token refresh failed' def __init__(self, response=None): super().__init__(response) - self.data = self.response.json() + self.data = self._error_data(self.response) @property def error(self): @@ -83,6 +85,30 @@ def error(self): def error_description(self): return self.data["error_description"] + @classmethod + def _error_data(cls, response): + data = cls._response_json(response) + + return { + "error": data.get("error", ""), + "error_description": data.get("error_description", ""), + } + + @staticmethod + def _response_json(response): + if response is None: + return {} + + try: + data = response.json() + except (ValueError, AttributeError): + return {} + + if not isinstance(data, dict): + return {} + + return data + class ForbiddenException(TraktException): """TraktException type to be raised when a 403 return code is received"""