diff --git a/googleapiclient/model.py b/googleapiclient/model.py index b853a4f682e..659ec0b08e2 100644 --- a/googleapiclient/model.py +++ b/googleapiclient/model.py @@ -273,13 +273,18 @@ def serialize(self, body_value): return json.dumps(body_value) def deserialize(self, content): + body = {} try: content = content.decode("utf-8") except AttributeError: pass - body = json.loads(content) - if self._data_wrapper and isinstance(body, dict) and "data" in body: - body = body["data"] + try: + body = json.loads(content) + if self._data_wrapper and isinstance(body, dict) and "data" in body: + body = body["data"] + except json.decoder.JSONDecodeError: + if isinstance(content, str): + body = content return body @property diff --git a/tests/test_json_model.py b/tests/test_json_model.py index 1ddc1c73bd1..4d5bb595ac7 100644 --- a/tests/test_json_model.py +++ b/tests/test_json_model.py @@ -31,7 +31,6 @@ import googleapiclient.model - from googleapiclient.errors import HttpError from googleapiclient.model import JsonModel @@ -290,6 +289,14 @@ def test_no_data_wrapper_deserialize(self): content = model.response(resp, content) self.assertEqual(content, {"data": "is good"}) + def test_no_data_wrapper_deserialize_text_format(self): + model = JsonModel(data_wrapper=False) + resp = httplib2.Response({"status": "200"}) + resp.reason = "OK" + content = 'column1,column2,column3\nstring1,1.2,string2' + content = model.response(resp, content) + self.assertEqual(content, 'column1,column2,column3\nstring1,1.2,string2') + def test_data_wrapper_deserialize(self): model = JsonModel(data_wrapper=True) resp = httplib2.Response({"status": "200"})