Skip to content

Commit 34a747c

Browse files
committed
Pre-check for missing dataset/table name when parsing resource.
Addresses: #1045 (comment)
1 parent 2cd2cd2 commit 34a747c

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

gcloud/bigquery/dataset.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,10 @@ def from_api_repr(cls, resource, client):
204204
:rtype: :class:`gcloud.bigquery.dataset.Dataset`
205205
:returns: Dataset parsed from ``resource``.
206206
"""
207+
if ('datasetReference' not in resource or
208+
'datasetId' not in resource['datasetReference']):
209+
raise KeyError('Resource lacks required identity information:'
210+
'["datasetReference"]["datasetId"]')
207211
name = resource['datasetReference']['datasetId']
208212
dataset = cls(name, client=client)
209213
dataset._set_properties(resource)

gcloud/bigquery/table.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,10 @@ def from_api_repr(cls, resource, dataset):
311311
:rtype: :class:`gcloud.bigquery.table.Table`
312312
:returns: Table parsed from ``resource``.
313313
"""
314+
if ('tableReference' not in resource or
315+
'tableId' not in resource['tableReference']):
316+
raise KeyError('Resource lacks required identity information:'
317+
'["tableReference"]["tableId"]')
314318
table_name = resource['tableReference']['tableId']
315319
table = cls(table_name, dataset=dataset)
316320
table._set_properties(resource)

gcloud/bigquery/test_dataset.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,14 @@ def test_location_setter(self):
143143
dataset.location = 'LOCATION'
144144
self.assertEqual(dataset.location, 'LOCATION')
145145

146+
def test_from_api_repr_missing_identity(self):
147+
self._setUpConstants()
148+
client = _Client(self.PROJECT)
149+
RESOURCE = {}
150+
klass = self._getTargetClass()
151+
with self.assertRaises(KeyError):
152+
klass.from_api_repr(RESOURCE, client=client)
153+
146154
def test_from_api_repr_bare(self):
147155
self._setUpConstants()
148156
client = _Client(self.PROJECT)

gcloud/bigquery/test_table.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,15 @@ def test_view_query_deleter(self):
348348
del table.view_query
349349
self.assertEqual(table.view_query, None)
350350

351+
def test_from_api_repr_missing_identity(self):
352+
self._setUpConstants()
353+
client = _Client(self.PROJECT)
354+
dataset = _Dataset(client)
355+
RESOURCE = {}
356+
klass = self._getTargetClass()
357+
with self.assertRaises(KeyError):
358+
klass.from_api_repr(RESOURCE, dataset)
359+
351360
def test_from_api_repr_bare(self):
352361
self._setUpConstants()
353362
client = _Client(self.PROJECT)

0 commit comments

Comments
 (0)