fix: disable warning if quota project id provided to auth.default() (#856)
* fix: disable warning if quota project id provided to auth.default()
* add more tests
diff --git a/google/auth/_default.py b/google/auth/_default.py
index 7da77a2..d4ccbc6 100644
--- a/google/auth/_default.py
+++ b/google/auth/_default.py
@@ -172,7 +172,7 @@
)
-def _get_gcloud_sdk_credentials():
+def _get_gcloud_sdk_credentials(quota_project_id=None):
"""Gets the credentials and project ID from the Cloud SDK."""
from google.auth import _cloud_sdk
@@ -185,7 +185,9 @@
_LOGGER.debug("Cloud SDK credentials not found on disk; not using them")
return None, None
- credentials, project_id = load_credentials_from_file(credentials_filename)
+ credentials, project_id = load_credentials_from_file(
+ credentials_filename, quota_project_id=quota_project_id
+ )
if not project_id:
project_id = _cloud_sdk.get_project_id()
@@ -193,7 +195,7 @@
return credentials, project_id
-def _get_explicit_environ_credentials():
+def _get_explicit_environ_credentials(quota_project_id=None):
"""Gets credentials from the GOOGLE_APPLICATION_CREDENTIALS environment
variable."""
from google.auth import _cloud_sdk
@@ -213,11 +215,11 @@
"Explicit credentials path %s is the same as Cloud SDK credentials path, fall back to Cloud SDK credentials flow...",
explicit_file,
)
- return _get_gcloud_sdk_credentials()
+ return _get_gcloud_sdk_credentials(quota_project_id=quota_project_id)
if explicit_file is not None:
credentials, project_id = load_credentials_from_file(
- os.environ[environment_vars.CREDENTIALS]
+ os.environ[environment_vars.CREDENTIALS], quota_project_id=quota_project_id
)
return credentials, project_id
@@ -447,8 +449,8 @@
# with_scopes_if_required() below will ensure scopes/default scopes are
# safely set on the returned credentials since requires_scopes will
# guard against setting scopes on user credentials.
- _get_explicit_environ_credentials,
- _get_gcloud_sdk_credentials,
+ lambda: _get_explicit_environ_credentials(quota_project_id=quota_project_id),
+ lambda: _get_gcloud_sdk_credentials(quota_project_id=quota_project_id),
_get_gae_credentials,
lambda: _get_gce_credentials(request),
)
diff --git a/google/auth/_default_async.py b/google/auth/_default_async.py
index 82e6c43..3fa125b 100644
--- a/google/auth/_default_async.py
+++ b/google/auth/_default_async.py
@@ -73,11 +73,13 @@
try:
credentials = credentials.Credentials.from_authorized_user_info(
info, scopes=scopes
- ).with_quota_project(quota_project_id)
+ )
except ValueError as caught_exc:
msg = "Failed to load authorized user credentials from {}".format(filename)
new_exc = exceptions.DefaultCredentialsError(msg, caught_exc)
raise new_exc from caught_exc
+ if quota_project_id:
+ credentials = credentials.with_quota_project(quota_project_id)
if not credentials.quota_project_id:
_default._warn_about_problematic_credentials(credentials)
return credentials, None
@@ -104,7 +106,7 @@
)
-def _get_gcloud_sdk_credentials():
+def _get_gcloud_sdk_credentials(quota_project_id=None):
"""Gets the credentials and project ID from the Cloud SDK."""
from google.auth import _cloud_sdk
@@ -114,7 +116,9 @@
if not os.path.isfile(credentials_filename):
return None, None
- credentials, project_id = load_credentials_from_file(credentials_filename)
+ credentials, project_id = load_credentials_from_file(
+ credentials_filename, quota_project_id=quota_project_id
+ )
if not project_id:
project_id = _cloud_sdk.get_project_id()
@@ -122,7 +126,7 @@
return credentials, project_id
-def _get_explicit_environ_credentials():
+def _get_explicit_environ_credentials(quota_project_id=None):
"""Gets credentials from the GOOGLE_APPLICATION_CREDENTIALS environment
variable."""
from google.auth import _cloud_sdk
@@ -134,11 +138,11 @@
# Cloud sdk flow calls gcloud to fetch project id, so if the explicit
# file path is cloud sdk credentials path, then we should fall back
# to cloud sdk flow, otherwise project id cannot be obtained.
- return _get_gcloud_sdk_credentials()
+ return _get_gcloud_sdk_credentials(quota_project_id=quota_project_id)
if explicit_file is not None:
credentials, project_id = load_credentials_from_file(
- os.environ[environment_vars.CREDENTIALS]
+ os.environ[environment_vars.CREDENTIALS], quota_project_id=quota_project_id
)
return credentials, project_id
@@ -250,8 +254,8 @@
)
checkers = (
- _get_explicit_environ_credentials,
- _get_gcloud_sdk_credentials,
+ lambda: _get_explicit_environ_credentials(quota_project_id=quota_project_id),
+ lambda: _get_gcloud_sdk_credentials(quota_project_id=quota_project_id),
_get_gae_credentials,
lambda: _get_gce_credentials(request),
)