@@ -30,6 +30,7 @@ from google.api_core import exceptions as core_exceptions
3030from google.api_core import extended_operation
3131{% endif %}
3232from google.api_core import gapic_v1
33+ from {{package_path}} import _compat as client_utils
3334from google.api_core import retry as retries
3435from google.auth import credentials as ga_credentials # type: ignore
3536from google.auth.transport import mtls # type: ignore
@@ -190,30 +191,8 @@ class {{ service.client_name }}(metaclass={{ service.client_name }}Meta):
190191
191192 @staticmethod
192193 def _use_client_cert_effective() -> bool:
193- """Returns whether client certificate should be used for mTLS if the
194- google-auth version supports should_use_client_cert automatic mTLS enablement.
195-
196- Alternatively, read from the GOOGLE_API_USE_CLIENT_CERTIFICATE env var.
197-
198- Returns:
199- bool: whether client certificate should be used for mTLS
200- Raises:
201- ValueError: (If using a version of google-auth without should_use_client_cert and
202- GOOGLE_API_USE_CLIENT_CERTIFICATE is set to an unexpected value.)
203- """
204- # TODO: Remove this fallback when google-auth >= 2.43.0 is the minimum required version
205- # check if google-auth version supports should_use_client_cert for automatic mTLS enablement
206- if hasattr(mtls, "should_use_client_cert"): # pragma: NO COVER
207- return mtls.should_use_client_cert()
208- else: # pragma: NO COVER
209- # if unsupported, fallback to reading from env var
210- use_client_cert_str = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false").lower()
211- if use_client_cert_str not in ("true", "false"):
212- raise ValueError(
213- "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be"
214- " either `true` or `false`"
215- )
216- return use_client_cert_str == "true"
194+ """Returns whether client certificate should be used for mTLS."""
195+ return client_utils.use_client_cert_effective()
217196
218197 @classmethod
219198 def from_service_account_info(cls, info: dict, *args, **kwargs):
@@ -357,30 +336,8 @@ class {{ service.client_name }}(metaclass={{ service.client_name }}Meta):
357336 provided_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]],
358337 use_cert_flag: bool,
359338 ) -> Optional[Callable[[], Tuple[bytes, bytes]]]:
360- """Return the client cert source to be used by the client.
361-
362- Args:
363- provided_cert_source (Callable[[], Tuple[bytes, bytes]]): The client certificate source provided.
364- use_cert_flag (bool): A flag indicating whether to use the client certificate.
365-
366- Returns:
367- Callable[[], Tuple[bytes, bytes]] or None: The client cert source to be used by the client.
368- """
369- # TODO: Remove this fallback when google-auth >= 2.43.0 is the minimum required version
370- client_cert_source = None
371- if use_cert_flag:
372- if provided_cert_source:
373- client_cert_source = provided_cert_source
374- elif (
375- hasattr(mtls, "has_default_client_cert_source")
376- and mtls.has_default_client_cert_source()
377- ):
378- client_cert_source = mtls.default_client_cert_source()
379- else:
380- raise ValueError(
381- "Client certificate is required for mTLS, but no client certificate source was provided or found."
382- )
383- return client_cert_source
339+ """Return the client cert source to be used by the client."""
340+ return client_utils.get_client_cert_source(provided_cert_source, use_cert_flag)
384341
385342 @staticmethod
386343 def _get_api_endpoint(api_override, client_cert_source, universe_domain, use_mtls_endpoint) -> str:
@@ -588,15 +545,7 @@ class {{ service.client_name }}(metaclass={{ service.client_name }}Meta):
588545
589546 universe_domain_opt = getattr(self._client_options, 'universe_domain', None)
590547
591- # TODO: Remove the use_client_cert fallback when google-auth >= 2.43.0 is the minimum required version
592- self._use_client_cert = {{ service.client_name }}._use_client_cert_effective()
593- self._use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto").lower()
594- if self._use_mtls_endpoint not in ("auto", "never", "always"):
595- raise MutualTLSChannelError(
596- "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` "
597- "must be `never`, `auto` or `always`"
598- )
599- self._universe_domain_env = os.getenv("GOOGLE_CLOUD_UNIVERSE_DOMAIN")
548+ self._use_client_cert, self._use_mtls_endpoint, self._universe_domain_env = client_utils.read_environment_variables()
600549 self._client_cert_source = {{ service.client_name }}._get_client_cert_source(self._client_options.client_cert_source, self._use_client_cert)
601550 self._universe_domain = {{ service.client_name }}._get_universe_domain(universe_domain_opt, self._universe_domain_env)
602551 self._api_endpoint: str = "" # updated below, depending on `transport`
0 commit comments