diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index fc585ba..37e35b7 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py @@ -2214,9 +2214,12 @@ class Mastodon: if not response_object.ok: try: response = response_object.json(object_hook=self.__json_hooks) - if not isinstance(response, dict) or 'error' not in response: + if isinstance(response, dict) and 'error' in response: + error_msg = response['error'] + elif isinstance(response, str): + error_msg = response + else: error_msg = None - error_msg = response['error'] except ValueError: error_msg = None diff --git a/tests/test_errors.py b/tests/test_errors.py new file mode 100644 index 0000000..7329507 --- /dev/null +++ b/tests/test_errors.py @@ -0,0 +1,20 @@ +import pytest +from mastodon.Mastodon import MastodonAPIError + +try: + from mock import MagicMock +except ImportError: + from unittest.mock import MagicMock + +def test_nonstandard_errors(api): + response = MagicMock() + response.json = MagicMock(return_value= + "I am a non-standard instance and this error is a plain string.") + response.ok = False + session = MagicMock() + session.request = MagicMock(return_value=response) + + api.session = session + with pytest.raises(MastodonAPIError): + api.instance() +