From a18c0af8c6f066f413b9b3640bdf42986ad2d150 Mon Sep 17 00:00:00 2001 From: przemekwitek Date: Wed, 2 Nov 2016 15:30:02 +0100 Subject: [PATCH 1/2] Fix '_IncludeFields' method. Fix '_IncludeFields' method so that it leaves siblings of the cleared fields unaffected. --- apitools/base/py/encoding.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apitools/base/py/encoding.py b/apitools/base/py/encoding.py index 7eec985d..182f1666 100644 --- a/apitools/base/py/encoding.py +++ b/apitools/base/py/encoding.py @@ -230,8 +230,7 @@ def _GetField(message, field_path): def _SetField(dictblob, field_path, value): for field in field_path[:-1]: - dictblob[field] = {} - dictblob = dictblob[field] + dictblob = dictblob.setdefault(field, {}) dictblob[field_path[-1]] = value From 529614ae4fb84a37752d3eb072fe7ad8f2168cc9 Mon Sep 17 00:00:00 2001 From: przemekwitek Date: Wed, 2 Nov 2016 15:35:01 +0100 Subject: [PATCH 2/2] Fix unit test for the '_IncludeFields' method. --- apitools/base/py/encoding_test.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apitools/base/py/encoding_test.py b/apitools/base/py/encoding_test.py index d306aaed..3564ca04 100644 --- a/apitools/base/py/encoding_test.py +++ b/apitools/base/py/encoding_test.py @@ -203,9 +203,12 @@ def testNestedIncludeFields(self): self.assertEqual( '{"nested": {"nested": null}}', encoding.MessageToJson(msg, include_fields=['nested.nested'])) - self.assertEqual( - '{"nested": {"nested_list": []}}', - encoding.MessageToJson(msg, include_fields=['nested.nested_list'])) + # When clearing 'nested.nested_list', its sibling ('nested.nested') + # should remain unaffected. + self.assertIn( + encoding.MessageToJson(msg, include_fields=['nested.nested_list']), + ['{"nested": {"nested": {}, "nested_list": []}}', + '{"nested": {"nested_list": [], "nested": {}}}']) self.assertEqual( '{"nested": {"nested": {"additional_properties": []}}}', encoding.MessageToJson(