Skip to content

Commit 58b642e

Browse files
authored
BigQuery: add reference property to Table and Dataset (#4405)
* BigQuery: add reference property to Table and Dataset This makes it easier to call `get_table`, `get_dataset`, or other functions that want just a reference, not a full resource. * Use shared reference property between Table and TableListItem.
1 parent d5141db commit 58b642e

File tree

4 files changed

+33
-12
lines changed

4 files changed

+33
-12
lines changed

bigquery/google/cloud/bigquery/dataset.py

+11
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,17 @@ def full_dataset_id(self):
279279
"""
280280
return self._properties.get('id')
281281

282+
@property
283+
def reference(self):
284+
"""A :class:`~google.cloud.bigquery.dataset.DatasetReference` pointing to
285+
this dataset.
286+
287+
Returns:
288+
google.cloud.bigquery.dataset.DatasetReference:
289+
A pointer to this dataset
290+
"""
291+
return DatasetReference(self.project, self.dataset_id)
292+
282293
@property
283294
def etag(self):
284295
"""ETag for the dataset resource.

bigquery/google/cloud/bigquery/table.py

+16-12
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,19 @@
3434
_MARKER = object()
3535

3636

37+
def _reference_getter(table):
38+
"""A :class:`~google.cloud.bigquery.table.TableReference` pointing to
39+
this table.
40+
41+
Returns:
42+
google.cloud.bigquery.table.TableReference: pointer to this table
43+
"""
44+
from google.cloud.bigquery import dataset
45+
46+
dataset_ref = dataset.DatasetReference(table.project, table.dataset_id)
47+
return TableReference(dataset_ref, table.table_id)
48+
49+
3750
def _view_use_legacy_sql_getter(table):
3851
"""Specifies whether to execute the view with Legacy or Standard SQL.
3952
@@ -223,6 +236,8 @@ def table_id(self):
223236
"""
224237
return self._table_id
225238

239+
reference = property(_reference_getter)
240+
226241
@property
227242
def path(self):
228243
"""URL path for the table's APIs.
@@ -764,18 +779,7 @@ def table_id(self):
764779
"""
765780
return self._properties.get('tableReference', {}).get('tableId')
766781

767-
@property
768-
def reference(self):
769-
"""A :class:`~google.cloud.bigquery.table.TableReference` pointing to
770-
this table.
771-
772-
Returns:
773-
google.cloud.bigquery.table.TableReference: pointer to this table
774-
"""
775-
from google.cloud.bigquery import dataset
776-
777-
dataset_ref = dataset.DatasetReference(self.project, self.dataset_id)
778-
return TableReference(dataset_ref, self.table_id)
782+
reference = property(_reference_getter)
779783

780784
@property
781785
def labels(self):

bigquery/tests/unit/test_dataset.py

+3
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,10 @@ def _verify_access_entry(self, access_entries, resource):
245245

246246
def _verify_readonly_resource_properties(self, dataset, resource):
247247

248+
self.assertEqual(dataset.project, self.PROJECT)
248249
self.assertEqual(dataset.dataset_id, self.DS_ID)
250+
self.assertEqual(dataset.reference.project, self.PROJECT)
251+
self.assertEqual(dataset.reference.dataset_id, self.DS_ID)
249252

250253
if 'creationTime' in resource:
251254
self.assertEqual(dataset.created, self.WHEN)

bigquery/tests/unit/test_table.py

+3
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,9 @@ def test_ctor(self):
293293
self.assertEqual(table.table_id, self.TABLE_NAME)
294294
self.assertEqual(table.project, self.PROJECT)
295295
self.assertEqual(table.dataset_id, self.DS_ID)
296+
self.assertEqual(table.reference.table_id, self.TABLE_NAME)
297+
self.assertEqual(table.reference.project, self.PROJECT)
298+
self.assertEqual(table.reference.dataset_id, self.DS_ID)
296299
self.assertEqual(
297300
table.path,
298301
'/projects/%s/datasets/%s/tables/%s' % (

0 commit comments

Comments
 (0)