From 35b00c7ddfb5d86b6cc45aa8a4bf3dacedafac78 Mon Sep 17 00:00:00 2001 From: marselester Date: Mon, 11 Feb 2013 18:22:52 +0700 Subject: [PATCH] Add catching ``ValueError: No JSON object could be decoded`` --- intercom/intercom.py | 5 ++++- tests/unit/fixtures/invalid.json | 0 tests/unit/test_intercom.py | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 tests/unit/fixtures/invalid.json diff --git a/intercom/intercom.py b/intercom/intercom.py index 98764172..c0177e91 100644 --- a/intercom/intercom.py +++ b/intercom/intercom.py @@ -45,7 +45,10 @@ def wrapper(*args, **kwargs): response = func_to_decorate(*args, **kwargs) if response.status_code == 401: raise AuthenticationError("Invalid API key/username provided.") - result = json.loads(response.content) + try: + result = json.loads(response.content) + except ValueError as err: + raise ServerError(err.message) if response.status_code in (200, 201): pass else: diff --git a/tests/unit/fixtures/invalid.json b/tests/unit/fixtures/invalid.json new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/test_intercom.py b/tests/unit/test_intercom.py index ee3ab0b1..b67c8a2f 100644 --- a/tests/unit/test_intercom.py +++ b/tests/unit/test_intercom.py @@ -77,3 +77,8 @@ def test_not_found(self): @patch('requests.request', create_response(500, '500.json')) def test_api_error(self): resp = Intercom.get_users() + + @raises(ServerError) + @patch('requests.request', create_response(500, 'invalid.json')) + def test_api_error_when_json_is_invalid(self): + Intercom.get_users()