feat: add quota project to base credentials class (#546)
diff --git a/google/auth/impersonated_credentials.py b/google/auth/impersonated_credentials.py
index 58e1bab..dbcb291 100644
--- a/google/auth/impersonated_credentials.py
+++ b/google/auth/impersonated_credentials.py
@@ -184,6 +184,7 @@
target_scopes,
delegates=None,
lifetime=_DEFAULT_TOKEN_LIFETIME_SECS,
+ quota_project_id=None,
):
"""
Args:
@@ -205,6 +206,9 @@
target_principal.
lifetime (int): Number of seconds the delegated credential should
be valid for (upto 3600).
+ quota_project_id (Optional[str]): The project ID used for quota and billing.
+ This project may be different from the project used to
+ create the credentials.
"""
super(Credentials, self).__init__()
@@ -221,6 +225,7 @@
self._lifetime = lifetime
self.token = None
self.expiry = _helpers.utcnow()
+ self._quota_project_id = quota_project_id
@_helpers.copy_docstring(credentials.Credentials)
def refresh(self, request):
@@ -288,19 +293,38 @@
def signer(self):
return self
+ @_helpers.copy_docstring(credentials.Credentials)
+ def with_quota_project(self, quota_project_id):
+ return self.__class__(
+ self._source_credentials,
+ target_principal=self._target_principal,
+ target_scopes=self._target_scopes,
+ delegates=self._delegates,
+ lifetime=self._lifetime,
+ quota_project_id=quota_project_id,
+ )
+
class IDTokenCredentials(credentials.Credentials):
"""Open ID Connect ID Token-based service account credentials.
"""
- def __init__(self, target_credentials, target_audience=None, include_email=False):
+ def __init__(
+ self,
+ target_credentials,
+ target_audience=None,
+ include_email=False,
+ quota_project_id=None,
+ ):
"""
Args:
target_credentials (google.auth.Credentials): The target
credential used as to acquire the id tokens for.
target_audience (string): Audience to issue the token for.
include_email (bool): Include email in IdToken
+ quota_project_id (Optional[str]): The project ID used for
+ quota and billing.
"""
super(IDTokenCredentials, self).__init__()
@@ -311,15 +335,20 @@
self._target_credentials = target_credentials
self._target_audience = target_audience
self._include_email = include_email
+ self._quota_project_id = quota_project_id
def from_credentials(self, target_credentials, target_audience=None):
return self.__class__(
- target_credentials=self._target_credentials, target_audience=target_audience
+ target_credentials=self._target_credentials,
+ target_audience=target_audience,
+ quota_project_id=self._quota_project_id,
)
def with_target_audience(self, target_audience):
return self.__class__(
- target_credentials=self._target_credentials, target_audience=target_audience
+ target_credentials=self._target_credentials,
+ target_audience=target_audience,
+ quota_project_id=self._quota_project_id,
)
def with_include_email(self, include_email):
@@ -327,6 +356,16 @@
target_credentials=self._target_credentials,
target_audience=self._target_audience,
include_email=include_email,
+ quota_project_id=self._quota_project_id,
+ )
+
+ @_helpers.copy_docstring(credentials.Credentials)
+ def with_quota_project(self, quota_project_id):
+ return self.__class__(
+ target_credentials=self._target_credentials,
+ target_audience=self._target_audience,
+ include_email=self._include_email,
+ quota_project_id=quota_project_id,
)
@_helpers.copy_docstring(credentials.Credentials)