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(