Skip to content

Commit 656c285

Browse files
committed
Changing Bigtable stub factories to use beta stubs.
1 parent af18334 commit 656c285

File tree

3 files changed

+47
-17
lines changed

3 files changed

+47
-17
lines changed

gcloud/bigtable/_helpers.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
"""
2020

2121

22+
from grpc.beta import implementations
23+
24+
2225
# See https://gist.github.com/dhermes/bbc5b7be1932bfffae77
2326
# for appropriate values on other systems.
2427
# NOTE: Even this path is Unix specific.
@@ -66,7 +69,9 @@ def get_certs():
6669

6770

6871
def make_stub(client, stub_factory, host, port):
69-
"""Makes a stub for the an API.
72+
"""Makes a stub for an RPC service.
73+
74+
Uses / depends on the beta implementation of gRPC.
7075
7176
:type client: :class:`.client.Client`
7277
:param client: The client that owns the cluster. Provides authorization and
@@ -85,8 +90,11 @@ def make_stub(client, stub_factory, host, port):
8590
:rtype: :class:`grpc.beta._stub._AutoIntermediary`
8691
:returns: The stub object used to make gRPC requests to a given API.
8792
"""
93+
root_certificates = get_certs()
94+
client_credentials = implementations.ssl_client_credentials(
95+
root_certificates, private_key=None, certificate_chain=None)
96+
channel = implementations.secure_channel(
97+
host, port, client_credentials)
8898
custom_metadata_transformer = MetadataTransformer(client)
89-
return stub_factory(host, port,
90-
metadata_transformer=custom_metadata_transformer,
91-
secure=True,
92-
root_certificates=get_certs())
99+
return stub_factory(channel,
100+
metadata_transformer=custom_metadata_transformer)

gcloud/bigtable/client.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,28 +43,27 @@
4343
from gcloud.credentials import get_credentials
4444

4545

46-
TABLE_STUB_FACTORY = (bigtable_table_service_pb2.
47-
early_adopter_create_BigtableTableService_stub)
46+
TABLE_STUB_FACTORY = (
47+
bigtable_table_service_pb2.beta_create_BigtableTableService_stub)
4848
TABLE_ADMIN_HOST = 'bigtabletableadmin.googleapis.com'
4949
"""Table Admin API request host."""
5050
TABLE_ADMIN_PORT = 443
5151
"""Table Admin API request port."""
5252

53-
CLUSTER_STUB_FACTORY = (bigtable_cluster_service_pb2.
54-
early_adopter_create_BigtableClusterService_stub)
53+
CLUSTER_STUB_FACTORY = (
54+
bigtable_cluster_service_pb2.beta_create_BigtableClusterService_stub)
5555
CLUSTER_ADMIN_HOST = 'bigtableclusteradmin.googleapis.com'
5656
"""Cluster Admin API request host."""
5757
CLUSTER_ADMIN_PORT = 443
5858
"""Cluster Admin API request port."""
5959

60-
DATA_STUB_FACTORY = (bigtable_service_pb2.
61-
early_adopter_create_BigtableService_stub)
60+
DATA_STUB_FACTORY = bigtable_service_pb2.beta_create_BigtableService_stub
6261
DATA_API_HOST = 'bigtable.googleapis.com'
6362
"""Data API request host."""
6463
DATA_API_PORT = 443
6564
"""Data API request port."""
6665

67-
OPERATIONS_STUB_FACTORY = operations_pb2.early_adopter_create_Operations_stub
66+
OPERATIONS_STUB_FACTORY = operations_pb2.beta_create_Operations_stub
6867

6968
ADMIN_SCOPE = 'https://www.googleapis.com/auth/cloud-bigtable.admin'
7069
"""Scope for interacting with the Cluster Admin and Table Admin APIs."""

gcloud/bigtable/test__helpers.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,27 @@ def test_it(self):
9797
mock_result = object()
9898
stub_inputs = []
9999

100-
def mock_stub_factory(host, port, metadata_transformer=None,
101-
secure=None, root_certificates=None):
102-
stub_inputs.append((host, port, metadata_transformer,
103-
secure, root_certificates))
100+
CLIENT_CREDS = object()
101+
CHANNEL = object()
102+
103+
class _ImplementationsModule(object):
104+
105+
def __init__(self):
106+
self.ssl_client_credentials_args = None
107+
self.secure_channel_args = None
108+
109+
def ssl_client_credentials(self, *args, **kwargs):
110+
self.ssl_client_credentials_args = (args, kwargs)
111+
return CLIENT_CREDS
112+
113+
def secure_channel(self, *args, **kwargs):
114+
self.secure_channel_args = (args, kwargs)
115+
return CHANNEL
116+
117+
implementations_mod = _ImplementationsModule()
118+
119+
def mock_stub_factory(channel, metadata_transformer=None):
120+
stub_inputs.append((channel, metadata_transformer))
104121
return mock_result
105122

106123
transformed = object()
@@ -115,12 +132,18 @@ def mock_transformer(client):
115132
certs = 'FOOBAR'
116133
client = object()
117134
with _Monkey(MUT, get_certs=lambda: certs,
135+
implementations=implementations_mod,
118136
MetadataTransformer=mock_transformer):
119137
result = self._callFUT(client, mock_stub_factory, host, port)
120138

121139
self.assertTrue(result is mock_result)
122-
self.assertEqual(stub_inputs, [(host, port, transformed, True, certs)])
140+
self.assertEqual(stub_inputs, [(CHANNEL, transformed)])
123141
self.assertEqual(clients, [client])
142+
ssl_cli_kwargs = {'private_key': None, 'certificate_chain': None}
143+
self.assertEqual(implementations_mod.ssl_client_credentials_args,
144+
((certs,), ssl_cli_kwargs))
145+
self.assertEqual(implementations_mod.secure_channel_args,
146+
((host, port, CLIENT_CREDS), {}))
124147

125148

126149
class _Credentials(object):

0 commit comments

Comments
 (0)