Skip to content

Commit f05cd0c

Browse files
lukesneeringertheacodes
authored andcommitted
Make client_info work without gRPC installed. (#5075)
1 parent 84aab85 commit f05cd0c

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

google/api_core/gapic_v1/client_info.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,13 @@
2323
import pkg_resources
2424

2525
_PY_VERSION = platform.python_version()
26-
_GRPC_VERSION = pkg_resources.get_distribution('grpcio').version
2726
_API_CORE_VERSION = pkg_resources.get_distribution('google-api-core').version
27+
28+
try:
29+
_GRPC_VERSION = pkg_resources.get_distribution('grpcio').version
30+
except pkg_resources.DistributionNotFound: # pragma: NO COVER
31+
_GRPC_VERSION = None
32+
2833
METRICS_METADATA_KEY = 'x-goog-api-client'
2934

3035

@@ -38,7 +43,7 @@ class ClientInfo(object):
3843
Args:
3944
python_version (str): The Python interpreter version, for example,
4045
``'2.7.13'``.
41-
grpc_version (str): The gRPC library version.
46+
grpc_version (Optional[str]): The gRPC library version.
4247
api_core_version (str): The google-api-core library version.
4348
gapic_version (Optional[str]): The sversion of gapic-generated client
4449
library, if the library was generated by gapic.
@@ -66,15 +71,18 @@ def to_user_agent(self):
6671
# expects these items to be in specific locations.
6772
ua = 'gl-python/{python_version} '
6873

69-
if self.client_library_version is not None:
70-
ua += 'gccl/{client_library_version} '
74+
if self.grpc_version is not None:
75+
ua += 'grpc/{grpc_version} '
76+
77+
ua += 'gax/{api_core_version} '
7178

7279
if self.gapic_version is not None:
7380
ua += 'gapic/{gapic_version} '
7481

75-
ua += 'gax/{api_core_version} grpc/{grpc_version}'
82+
if self.client_library_version is not None:
83+
ua += 'gccl/{client_library_version} '
7684

77-
return ua.format(**self.__dict__)
85+
return ua.format(**self.__dict__).strip()
7886

7987
def to_grpc_metadata(self):
8088
"""Returns the gRPC metadata for this client info."""

tests/unit/gapic/test_client_info.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@ def test_constructor_options():
4444
def test_to_user_agent_minimal():
4545
info = client_info.ClientInfo(
4646
python_version='1',
47-
grpc_version='2',
48-
api_core_version='3')
47+
api_core_version='2',
48+
grpc_version=None
49+
)
4950

5051
user_agent = info.to_user_agent()
5152

52-
assert user_agent == 'gl-python/1 gax/3 grpc/2'
53+
assert user_agent == 'gl-python/1 gax/2'
5354

5455

5556
def test_to_user_agent_full():
@@ -62,7 +63,7 @@ def test_to_user_agent_full():
6263

6364
user_agent = info.to_user_agent()
6465

65-
assert user_agent == 'gl-python/1 gccl/5 gapic/4 gax/3 grpc/2'
66+
assert user_agent == 'gl-python/1 grpc/2 gax/3 gapic/4 gccl/5'
6667

6768

6869
def test_to_grpc_metadata():

0 commit comments

Comments
 (0)