Skip to content

Commit

Permalink
Add client_info support to client / connection. (#7873)
Browse files Browse the repository at this point in the history
  • Loading branch information
tseaver committed May 8, 2019
1 parent 616b77a commit 8241e1c
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 14 deletions.
14 changes: 9 additions & 5 deletions translate/google/cloud/translate_v2/_http.py
Expand Up @@ -19,16 +19,22 @@
from google.cloud.translate_v2 import __version__


_CLIENT_INFO = _http.CLIENT_INFO_TEMPLATE.format(__version__)


class Connection(_http.JSONConnection):
"""A connection to Google Cloud Translation API via the JSON REST API.
:type client: :class:`~google.cloud.translate.client.Client`
:param client: The client that owns the current connection.
:type client_info: :class:`~google.api_core.client_info.ClientInfo`
:param client_info: (Optional) instance used to generate user agent.
"""

def __init__(self, client, client_info=None):
super(Connection, self).__init__(client, client_info)

self._client_info.gapic_version = __version__
self._client_info.client_library_version = __version__

API_BASE_URL = "https://translation.googleapis.com"
"""The base of the API call URL."""

Expand All @@ -37,5 +43,3 @@ class Connection(_http.JSONConnection):

API_URL_TEMPLATE = "{api_base_url}/language/translate/{api_version}{path}"
"""A template for the URL of a particular API call."""

_EXTRA_HEADERS = {_http.CLIENT_INFO_HEADER: _CLIENT_INFO}
17 changes: 15 additions & 2 deletions translate/google/cloud/translate_v2/client.py
Expand Up @@ -54,15 +54,28 @@ class Client(BaseClient):
``credentials`` for the current object.
This parameter should be considered private, and could
change in the future.
:type client_info: :class:`~google.api_core.client_info.ClientInfo`
:param client_info:
The client info used to send a user-agent string along with API
requests. If ``None``, then default info will be used. Generally,
you only need to set this if you're developing your own library
or partner tool.
"""

SCOPE = ("https://www.googleapis.com/auth/cloud-platform",)
"""The scopes required for authenticating."""

def __init__(self, target_language=ENGLISH_ISO_639, credentials=None, _http=None):
def __init__(
self,
target_language=ENGLISH_ISO_639,
credentials=None,
_http=None,
client_info=None,
):
self.target_language = target_language
super(Client, self).__init__(credentials=credentials, _http=_http)
self._connection = Connection(self)
self._connection = Connection(self, client_info=client_info)

def get_languages(self, target_language=None):
"""Get list of supported languages for translation.
Expand Down
6 changes: 2 additions & 4 deletions translate/tests/unit/test__http.py
Expand Up @@ -50,9 +50,7 @@ def test_build_api_url_w_extra_query_params(self):

def test_extra_headers(self):
import requests

from google.cloud import _http as base_http
from google.cloud.translate_v2 import _http as MUT

http = mock.create_autospec(requests.Session, instance=True)
response = requests.Response()
Expand All @@ -69,8 +67,8 @@ def test_extra_headers(self):

expected_headers = {
"Accept-Encoding": "gzip",
base_http.CLIENT_INFO_HEADER: MUT._CLIENT_INFO,
"User-Agent": conn.USER_AGENT,
base_http.CLIENT_INFO_HEADER: conn.user_agent,
"User-Agent": conn.user_agent,
}
expected_uri = conn.build_api_url("/rainbow")
http.request.assert_called_once_with(
Expand Down
13 changes: 10 additions & 3 deletions translate/tests/unit/test_client.py
Expand Up @@ -25,7 +25,8 @@ def _get_target_class():
def _make_one(self, *args, **kw):
return self._get_target_class()(*args, **kw)

def test_constructor(self):
def test_constructor_defaults(self):
from google.cloud._http import ClientInfo
from google.cloud.translate_v2._http import Connection
from google.cloud.translate_v2.client import ENGLISH_ISO_639

Expand All @@ -35,17 +36,23 @@ def test_constructor(self):
self.assertIsNone(client._connection.credentials)
self.assertIs(client._connection.http, http)
self.assertEqual(client.target_language, ENGLISH_ISO_639)
self.assertIsInstance(client._connection._client_info, ClientInfo)

def test_constructor_non_default(self):
def test_constructor_explicit(self):
from google.cloud._http import ClientInfo
from google.cloud.translate_v2._http import Connection

http = object()
target = "es"
client = self._make_one(target_language=target, _http=http)
client_info = ClientInfo()
client = self._make_one(
target_language=target, _http=http, client_info=client_info
)
self.assertIsInstance(client._connection, Connection)
self.assertIsNone(client._connection.credentials)
self.assertIs(client._connection.http, http)
self.assertEqual(client.target_language, target)
self.assertIs(client._connection._client_info, client_info)

def test_get_languages(self):
from google.cloud.translate_v2.client import ENGLISH_ISO_639
Expand Down

0 comments on commit 8241e1c

Please sign in to comment.