Skip to content

Commit 3a26d60

Browse files
committed
Merge pull request #1323 from dhermes/bigtable-column-family-delete
Implementing Bigtable ColumnFamily.delete().
2 parents 9e2b07d + 281620d commit 3a26d60

2 files changed

Lines changed: 72 additions & 1 deletion

File tree

gcloud/bigtable/column_family.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
from gcloud._helpers import _total_seconds
2121
from gcloud.bigtable._generated import bigtable_table_data_pb2 as data_pb2
22+
from gcloud.bigtable._generated import (
23+
bigtable_table_service_messages_pb2 as messages_pb2)
2224
from gcloud.bigtable._generated import duration_pb2
2325

2426

@@ -193,6 +195,10 @@ def to_pb(self):
193195
class ColumnFamily(object):
194196
"""Representation of a Google Cloud Bigtable Column Family.
195197
198+
We can use a :class:`ColumnFamily` to:
199+
200+
* :meth:`delete` itself
201+
196202
:type column_family_id: str
197203
:param column_family_id: The ID of the column family. Must be of the
198204
form ``[_a-zA-Z0-9][-_.a-zA-Z0-9]*``.
@@ -238,6 +244,14 @@ def __eq__(self, other):
238244
def __ne__(self, other):
239245
return not self.__eq__(other)
240246

247+
def delete(self):
248+
"""Delete this column family."""
249+
request_pb = messages_pb2.DeleteColumnFamilyRequest(name=self.name)
250+
client = self._table._cluster._client
251+
# We expect a `._generated.empty_pb2.Empty`
252+
client._table_stub.DeleteColumnFamily(request_pb,
253+
client.timeout_seconds)
254+
241255

242256
def _gc_rule_from_pb(gc_rule_pb):
243257
"""Convert a protobuf GC rule to a native object.

gcloud/bigtable/test_column_family.py

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,50 @@ def test___ne__(self):
395395
column_family2 = self._makeOne('column_family_id2', None)
396396
self.assertNotEqual(column_family1, column_family2)
397397

398+
def test_delete(self):
399+
from gcloud.bigtable._generated import (
400+
bigtable_table_service_messages_pb2 as messages_pb2)
401+
from gcloud.bigtable._generated import empty_pb2
402+
from gcloud.bigtable._testing import _FakeStub
403+
404+
project_id = 'project-id'
405+
zone = 'zone'
406+
cluster_id = 'cluster-id'
407+
table_id = 'table-id'
408+
column_family_id = 'column-family-id'
409+
timeout_seconds = 7
410+
table_name = ('projects/' + project_id + '/zones/' + zone +
411+
'/clusters/' + cluster_id + '/tables/' + table_id)
412+
column_family_name = table_name + '/columnFamilies/' + column_family_id
413+
414+
client = _Client(timeout_seconds=timeout_seconds)
415+
table = _Table(table_name, client=client)
416+
column_family = self._makeOne(column_family_id, table)
417+
418+
# Create request_pb
419+
request_pb = messages_pb2.DeleteColumnFamilyRequest(
420+
name=column_family_name)
421+
422+
# Create response_pb
423+
response_pb = empty_pb2.Empty()
424+
425+
# Patch the stub used by the API method.
426+
client._table_stub = stub = _FakeStub(response_pb)
427+
428+
# Create expected_result.
429+
expected_result = None # delete() has no return value.
430+
431+
# Perform the method and check the result.
432+
self.assertEqual(stub.results, (response_pb,))
433+
result = column_family.delete()
434+
self.assertEqual(stub.results, ())
435+
self.assertEqual(result, expected_result)
436+
self.assertEqual(stub.method_calls, [(
437+
'DeleteColumnFamily',
438+
(request_pb, timeout_seconds),
439+
{},
440+
)])
441+
398442

399443
class Test__gc_rule_from_pb(unittest2.TestCase):
400444

@@ -471,7 +515,20 @@ def WhichOneof(cls, name):
471515
self.assertEqual(MockProto.names, ['rule'])
472516

473517

518+
class _Cluster(object):
519+
520+
def __init__(self, client=None):
521+
self._client = client
522+
523+
524+
class _Client(object):
525+
526+
def __init__(self, timeout_seconds=None):
527+
self.timeout_seconds = timeout_seconds
528+
529+
474530
class _Table(object):
475531

476-
def __init__(self, name):
532+
def __init__(self, name, client=None):
477533
self.name = name
534+
self._cluster = _Cluster(client)

0 commit comments

Comments
 (0)