From 38e029fe36421028cf73fe731649ad4bf2357712 Mon Sep 17 00:00:00 2001 From: Alan Velasco Date: Mon, 15 Jan 2018 08:47:22 -0600 Subject: [PATCH 1/2] Add handling of missing properties SchemaField.from_api_repr --- bigquery/google/cloud/bigquery/schema.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bigquery/google/cloud/bigquery/schema.py b/bigquery/google/cloud/bigquery/schema.py index 155ffe9a159a..f619b1cd9f2c 100644 --- a/bigquery/google/cloud/bigquery/schema.py +++ b/bigquery/google/cloud/bigquery/schema.py @@ -56,10 +56,13 @@ def from_api_repr(cls, api_repr): google.cloud.biquery.schema.SchemaField: The ``SchemaField`` object. """ + # Handle optional properties with default values + mode = api_repr.get('mode', 'NULLABLE') + fields = api_repr.get('fields', ()) return cls( field_type=api_repr['type'].upper(), - fields=[cls.from_api_repr(f) for f in api_repr.get('fields', ())], - mode=api_repr['mode'].upper(), + fields=[cls.from_api_repr(f) for f in fields], + mode=mode.upper(), name=api_repr['name'], ) From 6d16c415b5a46f7161a3729c7de144ac622108b7 Mon Sep 17 00:00:00 2001 From: Alan Velasco Date: Wed, 17 Jan 2018 16:40:45 -0600 Subject: [PATCH 2/2] Add testing for defaults in from_api_repr function --- bigquery/tests/unit/test_schema.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bigquery/tests/unit/test_schema.py b/bigquery/tests/unit/test_schema.py index a5d5ecacd619..1613b4feb465 100644 --- a/bigquery/tests/unit/test_schema.py +++ b/bigquery/tests/unit/test_schema.py @@ -102,6 +102,16 @@ def test_from_api_repr(self): self.assertEqual(field.fields[0].field_type, 'INTEGER') self.assertEqual(field.fields[0].mode, 'NULLABLE') + def test_from_api_repr_defaults(self): + field = self._get_target_class().from_api_repr({ + 'name': 'foo', + 'type': 'record', + }) + self.assertEqual(field.name, 'foo') + self.assertEqual(field.field_type, 'RECORD') + self.assertEqual(field.mode, 'NULLABLE') + self.assertEqual(len(field.fields), 0) + def test_name_property(self): name = 'lemon-ness' schema_field = self._make_one(name, 'INTEGER')