From 8cd5dd03da352c63d852051f2979667234e19cb0 Mon Sep 17 00:00:00 2001 From: Vlad Daniel Barosan Date: Thu, 1 Oct 2020 14:30:21 -0700 Subject: [PATCH] Fix unexpected attribute error --- apitools/base/protorpclite/protojson.py | 5 ++++- apitools/base/protorpclite/protojson_test.py | 23 +++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/apitools/base/protorpclite/protojson.py b/apitools/base/protorpclite/protojson.py index 4f3fdebf..080656aa 100644 --- a/apitools/base/protorpclite/protojson.py +++ b/apitools/base/protorpclite/protojson.py @@ -333,7 +333,10 @@ def decode_field(self, field, value): elif (isinstance(field, messages.MessageField) and issubclass(field.type, messages.Message)): - return self.__decode_dictionary(field.type, value) + try: + return self.__decode_dictionary(field.type, value) + except AttributeError as err: + raise messages.DecodeError(err) elif (isinstance(field, messages.FloatField) and isinstance(value, (six.integer_types, six.string_types))): diff --git a/apitools/base/protorpclite/protojson_test.py b/apitools/base/protorpclite/protojson_test.py index 7a8f8750..bcce28be 100644 --- a/apitools/base/protorpclite/protojson_test.py +++ b/apitools/base/protorpclite/protojson_test.py @@ -374,14 +374,21 @@ def testDecodeInvalidDateTime(self): MyMessage, '{"a_datetime": "invalid"}') def testDecodeInvalidMessage(self): - encoded = """{ - "a_nested_datetime": { - "nested_dt_value": "invalid" - } - } - """ - self.assertRaises(messages.DecodeError, protojson.decode_message, - MyMessage, encoded) + for encoded in ( + """{ + "a_nested_datetime": { + "nested_dt_value": "invalid" + } + } + """, + """{ + "a_nested_datetime": [{ + "nested_dt_value": "2012-09-30T15:31:50.262" + }] + } + """): + self.assertRaises(messages.DecodeError, protojson.decode_message, + MyMessage, encoded) def testEncodeDateTime(self): for datetime_string, datetime_vals in (