Merge pull request #155 from sb2nov/sb_bq_repeated_records_issue
Empty list is a valid response for repeated fields
diff --git a/apitools/base/protorpclite/protojson.py b/apitools/base/protorpclite/protojson.py
index 781afff..4c87cf4 100644
--- a/apitools/base/protorpclite/protojson.py
+++ b/apitools/base/protorpclite/protojson.py
@@ -274,10 +274,6 @@
message.set_unrecognized_field(key, value, variant)
continue
- # This is just for consistency with the old behavior.
- if value == []:
- continue
-
if field.repeated:
# This should be unnecessary? Or in fact become an error.
if not isinstance(value, list):
@@ -286,6 +282,9 @@
for item in value]
setattr(message, field.name, valid_value)
else:
+ # This is just for consistency with the old behavior.
+ if value == []:
+ continue
setattr(message, field.name, self.decode_field(field, value))
return message
diff --git a/apitools/base/protorpclite/protojson_test.py b/apitools/base/protorpclite/protojson_test.py
index a349710..4e4702a 100644
--- a/apitools/base/protorpclite/protojson_test.py
+++ b/apitools/base/protorpclite/protojson_test.py
@@ -401,6 +401,16 @@
MyMessage, '{"a_repeated_custom": [1, 2, 3]}')
self.assertEquals(MyMessage(a_repeated_custom=[1, 2, 3]), message)
+ def testDecodeRepeatedEmpty(self):
+ message = protojson.decode_message(
+ MyMessage, '{"a_repeated": []}')
+ self.assertEquals(MyMessage(a_repeated=[]), message)
+
+ def testDecodeNone(self):
+ message = protojson.decode_message(
+ MyMessage, '{"an_integer": []}')
+ self.assertEquals(MyMessage(an_integer=None), message)
+
def testDecodeBadBase64BytesField(self):
"""Test decoding improperly encoded base64 bytes value."""
self.assertRaisesWithRegexpMatch(