Prevent StopIteration exception during parse response
- Parse response body only if there is one top-level element in JSON object because if there is nullable JSON in response body six will throw us an StopIteration exception from six.next Closes-Bug: #1529144 Change-Id: Iea2d0950b25cb8f576ca7e15383a205e04d7c9e3
This commit is contained in:
		| @@ -461,7 +461,9 @@ class RestClient(object): | ||||
|         #  } | ||||
|         try: | ||||
|             # Ensure there are not more than one top-level keys | ||||
|             if len(body.keys()) > 1: | ||||
|             # NOTE(freerunner): Ensure, that JSON is not nullable to | ||||
|             # to prevent StopIteration Exception | ||||
|             if len(body.keys()) != 1: | ||||
|                 return body | ||||
|             # Just return the "wrapped" element | ||||
|             first_key, first_item = six.next(six.iteritems(body)) | ||||
|   | ||||
| @@ -244,6 +244,7 @@ class TestRestClientParseRespJSON(BaseRestClientTestClass): | ||||
|         keys[0]: values[0], | ||||
|         keys[1]: values[1], | ||||
|     }} | ||||
|     null_dict = {} | ||||
|  | ||||
|     def setUp(self): | ||||
|         self.fake_http = fake_http.fake_httplib2() | ||||
| @@ -273,6 +274,10 @@ class TestRestClientParseRespJSON(BaseRestClientTestClass): | ||||
|         body = self.rest_client._parse_resp(json.dumps(data)) | ||||
|         self.assertEqual(data, body) | ||||
|  | ||||
|     def test_parse_nullable_dict(self): | ||||
|         body = self.rest_client._parse_resp(json.dumps(self.null_dict)) | ||||
|         self.assertEqual(self.null_dict, body) | ||||
|  | ||||
|  | ||||
| class TestRestClientErrorCheckerJSON(base.TestCase): | ||||
|     c_type = "application/json" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Victor Ryzhenkin
					Victor Ryzhenkin