8000 bigquery: add client.delete_dataset (#4012) · googleapis/google-cloud-python@e5b91ea · GitHub
[go: up one dir, main page]

Skip to content

Commit e5b91ea

Browse files
jbatswast
authored andcommitted
bigquery: add client.delete_dataset (#4012)
* bigquery: add client.delete_dataset * support Dataset as well as DatasetReference * fix lint
1 parent 970f6f7 commit e5b91ea

File tree

5 files changed

+40
-61
lines changed

5 files changed

+40
-61
lines changed

bigquery/google/cloud/bigquery/client.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,6 @@ def update_dataset(self, dataset, fields):
243243
244244
:rtype: :class:`google.cloud.bigquery.dataset.Dataset`
245245
:returns: the modified ``Dataset`` instance
246-
:raises: ValueError for fields that cannot be updated.
247-
248246
"""
249247
if dataset.project is None:
250248
dataset._project = self.project
@@ -266,6 +264,22 @@ def update_dataset(self, dataset, fields):
266264
method='PATCH', path=path, data=partial, headers=headers)
267265
return Dataset.from_api_repr(api_response, self)
268266

267+
def delete_dataset(self, dataset):
268+
"""Delete a dataset.
269+
270+
See
271+
https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets/delete
272+
273+
:type dataset: One of:
274+
:class:`~google.cloud.bigquery.dataset.Dataset`
275+
:class:`~google.cloud.bigquery.dataset.DatasetReference`
276+
277+
:param dataset: the dataset to delete, or a reference to it.
278+
"""
279+
if not isinstance(dataset, (Dataset, DatasetReference)):
280+
raise TypeError('dataset must be a Dataset or a DatasetReference')
281+
self._connection.api_request(method='DELETE', path=dataset.path)
282+
269283
def _get_query_results(self, job_id, project=None, timeout_ms=None):
270284
"""Get the query results object for a query job.
271285

bigquery/google/cloud/bigquery/dataset.py

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -394,21 +394,6 @@ def from_api_repr(cls, resource, client):
394394
dataset._set_properties(resource)
395395
return dataset
396396

397-
def _require_client(self, client):
398-
"""Check client or verify over-ride.
399-
400-
:type client: :class:`~google.cloud.bigquery.client.Client` or
401-
``NoneType``
402-
:param client: the client to use. If not passed, falls back to the
403-
``client`` stored on the current dataset.
404-
405-
:rtype: :class:`google.cloud.bigquery.client.Client`
406-
:returns: The client passed in or the currently bound client.
407-
"""
408-
if client is None:
409-
client = self._client
410-
return client
411-
412397
@staticmethod
413398
def _parse_access_entries(access):
414399
"""Parse a resource fragment into a set of access entries.
@@ -488,20 +473,6 @@ def _build_resource(self):
488473

489474
return resource
490475

491-
def delete(self, client=None):
492-
"""API call: delete the dataset via a DELETE request.
493-
494-
See
495-
https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets/delete
496-
497-
:type client: :class:`~google.cloud.bigquery.client.Client` or
498-
``NoneType``
499-
:param client: the client to use. If not passed, falls back to the
500-
``client`` stored on the current dataset.
501-
"""
502-
client = self._require_client(client)
503-
client._connection.api_request(method='DELETE', path=self.path)
504-
505476
def list_tables(self, max_results=None, page_token=None):
506477
"""List tables for the project associated with this client.
507478

bigquery/tests/system.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def _still_in_use(bad_request):
105105
if isinstance(doomed, Bucket):
106106
retry_409(doomed.delete)(force=True)
107107
elif isinstance(doomed, Dataset):
108-
retry_in_use(doomed.delete)()
108+
retry_in_use(Config.CLIENT.delete_dataset)(doomed)
109109
else:
110110
doomed.delete()
111111

bigquery/tests/unit/test_client.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,29 @@ def test_update_dataset(self):
480480
req = conn._requested[1]
481481
self.assertEqual(req['headers']['If-Match'], 'etag')
482482

483+
def test_delete_dataset(self):
484+
from google.cloud.bigquery.dataset import Dataset
485+
486+
PROJECT = 'PROJECT'
487+
DS_ID = 'DATASET_ID'
488+
PATH = 'projects/%s/datasets/%s' % (PROJECT, DS_ID)
489+
creds = _make_credentials()
490+
client = self._make_one(project=PROJECT, credentials=creds)
491+
conn = client._connection = _Connection({}, {})
492+
for arg in (client.dataset(DS_ID), Dataset(DS_ID, project=PROJECT)):
493+
client.delete_dataset(arg)
494+
req = conn._requested[0]
495+
self.assertEqual(req['method'], 'DELETE')
496+
self.assertEqual(req['path'], '/%s' % PATH)
497+
498+
def test_delete_dataset_wrong_type(self):
499+
PROJECT = 'PROJECT'
500+
DS_ID = 'DATASET_ID'
501+
creds = _make_credentials()
502+
client = self._make_one(project=PROJECT, credentials=creds)
503+
with self.assertRaises(TypeError):
504+
client.delete_dataset(client.dataset(DS_ID).table("foo"))
505+
483506
def test_job_from_resource_unknown_type(self):
484507
PROJECT = 'PROJECT'
485508
creds = _make_credentials()

bigquery/tests/unit/test_dataset.py

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -388,35 +388,6 @@ def test__parse_access_entries_w_extra_keys(self):
388388
with self.assertRaises(ValueError):
389389
dataset._parse_access_entries(ACCESS)
390390

391-
def test_delete_w_bound_client(self):
392-
PATH = 'projects/%s/datasets/%s' % (self.PROJECT, self.DS_ID)
393-
conn = _Connection({})
394-
client = _Client(project=self.PROJECT, connection=conn)
395-
dataset = self._make_one(self.DS_ID, client=client)
396-
397-
dataset.delete()
398-
399-
self.assertEqual(len(conn._requested), 1)
400-
req = conn._requested[0]
401-
self.assertEqual(req['method'], 'DELETE')
402-
self.assertEqual(req['path'], '/%s' % PATH)
403-
404-
def test_delete_w_alternate_client(self):
405-
PATH = 'projects/%s/datasets/%s' % (self.PROJECT, self.DS_ID)
406-
conn1 = _Connection()
407-
CLIENT1 = _Client(project=self.PROJECT, connection=conn1)
408-
conn2 = _Connection({})
409-
CLIENT2 = _Client(project=self.PROJECT, connection=conn2)
410-
dataset = self._make_one(self.DS_ID, client=CLIENT1)
411-
412-
dataset.delete(client=CLIENT2)
413-
414-
self.assertEqual(len(conn1._requested), 0)
415-
self.assertEqual(len(conn2._requested), 1)
416-
req = conn2._requested[0]
417-
self.assertEqual(req['method'], 'DELETE')
418-
self.assertEqual(req['path'], '/%s' % PATH)
419-
420391
def test_list_tables_empty(self):
421392
import six
422393

0 commit comments

Comments
 (0)
0