Add _metadata.get_project_id.
diff --git a/google/auth/_default.py b/google/auth/_default.py
index 74b96b3..356780b 100644
--- a/google/auth/_default.py
+++ b/google/auth/_default.py
@@ -172,7 +172,7 @@
if _metadata.ping(request=request):
# Get the project ID.
try:
- project_id = _metadata.get(request, 'project/project-id')
+ project_id = _metadata.get_project_id(request=request)
except exceptions.TransportError:
_LOGGER.warning(
'No project ID could be determined from the Compute Engine '
diff --git a/google/auth/compute_engine/_metadata.py b/google/auth/compute_engine/_metadata.py
index 6d13a54..a107015 100644
--- a/google/auth/compute_engine/_metadata.py
+++ b/google/auth/compute_engine/_metadata.py
@@ -128,6 +128,23 @@
url, response.status, response.data), response)
+def get_project_id(request):
+ """Get the Google Cloud Project ID from the metadata server.
+
+ Args:
+ request (google.auth.transport.Request): A callable used to make
+ HTTP requests.
+
+ Returns:
+ str: The project ID
+
+ Raises:
+ google.auth.exceptions.TransportError: if an error occurred while
+ retrieving metadata.
+ """
+ return get(request, 'project/project-id')
+
+
def get_service_account_info(request, service_account='default'):
"""Get information about a service account from the metadata server.
diff --git a/tests/compute_engine/test__metadata.py b/tests/compute_engine/test__metadata.py
index 4cc3e55..6a45c42 100644
--- a/tests/compute_engine/test__metadata.py
+++ b/tests/compute_engine/test__metadata.py
@@ -126,6 +126,20 @@
headers=_metadata._METADATA_HEADERS)
+def test_get_project_id(mock_request):
+ project = 'example-project'
+ request_mock = mock_request(
+ project, headers={'content-type': 'text/plain'})
+
+ project_id = _metadata.get_project_id(request_mock)
+
+ request_mock.assert_called_once_with(
+ method='GET',
+ url=_metadata._METADATA_ROOT + 'project/project-id',
+ headers=_metadata._METADATA_HEADERS)
+ assert project_id == project
+
+
@mock.patch('google.auth._helpers.utcnow', return_value=datetime.datetime.min)
def test_get_service_account_token(utcnow, mock_request):
ttl = 500
diff --git a/tests/test__default.py b/tests/test__default.py
index 747bfa4..e244b3d 100644
--- a/tests/test__default.py
+++ b/tests/test__default.py
@@ -214,7 +214,8 @@
@mock.patch(
'google.auth.compute_engine._metadata.ping', return_value=True)
@mock.patch(
- 'google.auth.compute_engine._metadata.get', return_value='example-project')
+ 'google.auth.compute_engine._metadata.get_project_id',
+ return_value='example-project')
def test__get_gce_credentials(get_mock, ping_mock):
credentials, project_id = _default._get_gce_credentials()
@@ -233,7 +234,7 @@
@mock.patch(
'google.auth.compute_engine._metadata.ping', return_value=True)
@mock.patch(
- 'google.auth.compute_engine._metadata.get',
+ 'google.auth.compute_engine._metadata.get_project_id',
side_effect=exceptions.TransportError())
def test__get_gce_credentials_no_project_id(get_mock, ping_mock):
credentials, project_id = _default._get_gce_credentials()