diff --git a/swh/core/api/serializers.py b/swh/core/api/serializers.py --- a/swh/core/api/serializers.py +++ b/swh/core/api/serializers.py @@ -5,7 +5,7 @@ import base64 import datetime -from json import JSONDecoder, JSONEncoder +import json import types from uuid import UUID @@ -28,7 +28,7 @@ if content_type.startswith('application/x-msgpack'): r = msgpack_loads(response.content) elif content_type.startswith('application/json'): - r = response.json(cls=SWHJSONDecoder) + r = json.loads(response.text, cls=SWHJSONDecoder) else: raise ValueError('Wrong content type `%s` for API response' % content_type) @@ -36,7 +36,7 @@ return r -class SWHJSONEncoder(JSONEncoder): +class SWHJSONEncoder(json.JSONEncoder): """JSON encoder for data structures generated by Software Heritage. This JSON encoder extends the default Python JSON encoder and adds @@ -101,7 +101,7 @@ return list(iterable) -class SWHJSONDecoder(JSONDecoder): +class SWHJSONDecoder(json.JSONDecoder): """JSON decoder for data structures encoded with SWHJSONEncoder. This JSON decoder extends the default Python JSON decoder, diff --git a/swh/core/api/tests/test_serializers.py b/swh/core/api/tests/test_serializers.py --- a/swh/core/api/tests/test_serializers.py +++ b/swh/core/api/tests/test_serializers.py @@ -9,12 +9,15 @@ from uuid import UUID import arrow +import requests +import requests_mock from swh.core.api.serializers import ( SWHJSONDecoder, SWHJSONEncoder, msgpack_dumps, - msgpack_loads + msgpack_loads, + decode_response ) @@ -79,3 +82,11 @@ def test_generator_msgpack(self): data = msgpack_dumps(self.generator) self.assertEqual(self.gen_lst, msgpack_loads(data)) + + @requests_mock.Mocker() + def test_decode_response_json(self, mock_requests): + mock_requests.get('https://example.org/test/data', + json=self.encoded_data, + headers={'content-type': 'application/json'}) + response = requests.get('https://example.org/test/data') + assert decode_response(response) == self.data