8000 Implementing Bigtable ColumnFamily.create(). · googleapis/google-cloud-python@1ed5b0d · GitHub
[go: up one dir, main page]

Skip to content

Commit 1ed5b0d

Browse files
committed
Implementing Bigtable ColumnFamily.create().
1 parent 3a26d60 commit 1ed5b0d

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

gcloud/bigtable/column_family.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ class ColumnFamily(object):
197197
198198
We can use a :class:`ColumnFamily` to:
199199
200+
* :meth:`create` itself
200201
* :meth:`delete` itself
201202
202203
:type column_family_id: str
@@ -244,6 +245,24 @@ def __eq__(self, other):
244245
def __ne__(self, other):
245246
return not self.__eq__(other)
246247

248+
def create(self):
249+
"""Create this column family."""
250+
if self.gc_rule is None:
251+
column_family = data_pb2.ColumnFamily()
252+
else:
253+
column_family = data_pb2.ColumnFamily(gc_rule=self.gc_rule.to_pb())
254+
request_pb = messages_pb2.CreateColumnFamilyRequest(
255+
name=self._table.name,
256+
column_family_id=self.column_family_id,
257+
column_family=column_family,
258+
)
259+
client = self._table._cluster._client
260+
# We expect a `.data_pb2.ColumnFamily`. We ignore it since the only
261+
# data it contains are the GC rule and the column family ID already
262+
# stored on this instance.
263+
client._table_stub.CreateColumnFamily(request_pb,
264+
client.timeout_seconds)
265+
247266
def delete(self):
248267
"""Delete this column family."""
249268
request_pb = messages_pb2.DeleteColumnFamilyRequest(name=self.name)

gcloud/bigtable/test_column_family.py

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

398+
def _create_test_helper(self, gc_rule=None):
399+
from gcloud.bigtable._generated import (
400+
bigtable_table_data_pb2 as data_pb2)
401+
from gcloud.bigtable._generated import (
402+
bigtable_table_service_messages_pb2 as messages_pb2)
403+
from gcloud.bigtable._testing import _FakeStub
404+
405+
project_id = 'project-id'
406+
zone = 'zone'
407+
cluster_id = 'cluster-id'
408+
table_id = 'table-id'
409+
column_family_id = 'column-family-id'
410+
timeout_seconds = 4
411+
table_name = ('projects/' + project_id + '/zones/' + zone +
412+
'/clusters/' + cluster_id + '/tables/' + table_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, gc_rule=gc_rule)
417+
418+
# Create request_pb
419+
if gc_rule is None:
420+
column_family_pb = data_pb2.ColumnFamily()
421+
else:
422+
column_family_pb = data_pb2.ColumnFamily(gc_rule=gc_rule.to_pb())
423+
request_pb = messages_pb2.CreateColumnFamilyRequest(
424+
name=table_name,
425+
column_family_id=column_family_id,
426+
column_family=column_family_pb,
427+
)
428+
429+
# Create response_pb
430+
response_pb = data_pb2.ColumnFamily()
431+
432+
# Patch the stub used by the API method.
433+
client._table_stub = stub = _FakeStub(response_pb)
434+
435+
# Create expected_result.
436+
expected_result = None # create() has no return value.
437+
438+
# Perform the method and check the result.
439+
self.assertEqual(stub.results, (response_pb,))
440+
result = column_family.create()
441+
self.assertEqual(stub.results, ())
442+
self.assertEqual(result, expected_result)
443+
self.assertEqual(stub.method_calls, [(
444+
'CreateColumnFamily',
445+
(request_pb, timeout_seconds),
446+
8196 {},
447+
)])
448+
449+
def test_create(self):
450+
self._create_test_helper(gc_rule=None)
451+
452+
def test_create_with_gc_rule(self):
453+
from gcloud.bigtable.column_family import MaxVersionsGCRule
454+
gc_rule = MaxVersionsGCRule(1337)
455+
self._create_test_helper(gc_rule=gc_rule)
456+
398457
def test_delete(self):
399458
from gcloud.bigtable._generated import (
400459
bigtable_table_service_messages_pb2 as messages_pb2)

0 commit comments

Comments
 (0)
0