Skip to content

Commit 321e1f3

Browse files
alanbatoJon Wayne Parrott
authored and
Jon Wayne Parrott
committed
Add handling of missing properties in SchemaField.from_api_repr() (#4754)
1 parent 95aaa50 commit 321e1f3

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

bigquery/google/cloud/bigquery/schema.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,13 @@ def from_api_repr(cls, api_repr):
5656
google.cloud.biquery.schema.SchemaField:
5757
The ``SchemaField`` object.
5858
"""
59+
# Handle optional properties with default values
60+
mode = api_repr.get('mode', 'NULLABLE')
61+
fields = api_repr.get('fields', ())
5962
return cls(
6063
field_type=api_repr['type'].upper(),
61-
fields=[cls.from_api_repr(f) for f in api_repr.get('fields', ())],
62-
mode=api_repr['mode'].upper(),
64+
fields=[cls.from_api_repr(f) for f in fields],
65+
mode=mode.upper(),
6366
name=api_repr['name'],
6467
)
6568

bigquery/tests/unit/test_schema.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,16 @@ def test_from_api_repr(self):
102102
self.assertEqual(field.fields[0].field_type, 'INTEGER')
103103
self.assertEqual(field.fields[0].mode, 'NULLABLE')
104104

105+
def test_from_api_repr_defaults(self):
106+
field = self._get_target_class().from_api_repr({
107+
'name': 'foo',
108+
'type': 'record',
109+
})
110+
self.assertEqual(field.name, 'foo')
111+
self.assertEqual(field.field_type, 'RECORD')
112+
self.assertEqual(field.mode, 'NULLABLE')
113+
self.assertEqual(len(field.fields), 0)
114+
105115
def test_name_property(self):
106116
name = 'lemon-ness'
107117
schema_field = self._make_one(name, 'INTEGER')

0 commit comments

Comments
 (0)