Skip to content

Commit 916213b

Browse files
committed
feat(secretmanager): refactor OTel interceptor injection to use centralized helper
1 parent 5d019f9 commit 916213b

2 files changed

Lines changed: 49 additions & 15 deletions

File tree

packages/google-cloud-secret-manager/google/cloud/secretmanager_v1/services/secret_manager_service/client.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
)
3636

3737
import google.protobuf
38-
from google.api_core import _feature_gating_helpers, gapic_v1
38+
from google.api_core import _feature_gating_helpers, _otel_helpers, gapic_v1
3939
from google.api_core import client_options as client_options_lib
4040
from google.api_core import exceptions as core_exceptions
4141
from google.api_core import retry as retries
@@ -746,19 +746,11 @@ def __init__(
746746
# Resolve interceptors for gRPC
747747
interceptors = None
748748
if transport_init is SecretManagerServiceGrpcTransport:
749-
is_tracing_enabled = _feature_gating_helpers.resolve_feature_flags(
750-
env_var="GOOGLE_CLOUD_PYTHON_TRACING_ENABLED",
751-
feature_key="tracer_provider",
752-
configuration=self._client_options,
749+
otel_interceptor = _otel_helpers.get_otel_grpc_interceptor(
750+
self._client_options
753751
)
754-
if is_tracing_enabled:
755-
try:
756-
import opentelemetry.instrumentation.grpc as otel_grpc # type: ignore[import-not-found]
757-
tracer_provider = getattr(self._client_options, "tracer_provider", None)
758-
interceptor = otel_grpc.client_interceptor(tracer_provider=tracer_provider)
759-
interceptors = [interceptor]
760-
except ImportError:
761-
pass
752+
if otel_interceptor:
753+
interceptors = [otel_interceptor]
762754

763755
# initialize with the provided callable or the passed in class
764756
transport_kwargs = {

packages/google-cloud-secret-manager/tests/unit/gapic/secretmanager_v1/test_secret_manager_service.py

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,14 @@
6161
from google.auth import credentials as ga_credentials
6262
from google.auth.exceptions import MutualTLSChannelError
6363
from google.cloud.location import locations_pb2
64-
from google.oauth2 import service_account
65-
6664
from google.cloud.secretmanager_v1.services.secret_manager_service import (
6765
SecretManagerServiceAsyncClient,
6866
SecretManagerServiceClient,
6967
pagers,
7068
transports,
7169
)
7270
from google.cloud.secretmanager_v1.types import resources, service
71+
from google.oauth2 import service_account
7372

7473
CRED_INFO_JSON = {
7574
"credential_source": "/path/to/file",
@@ -770,6 +769,49 @@ def test_secret_manager_service_client_client_options(
770769
)
771770

772771

772+
def test_secret_manager_service_client_otel_interceptor_injection():
773+
# Mock the helper to return a sentinel interceptor
774+
mock_interceptor = mock.Mock()
775+
776+
with mock.patch(
777+
"google.cloud.secretmanager_v1.services.secret_manager_service.client._otel_helpers.get_otel_grpc_interceptor"
778+
) as mock_get_interceptor:
779+
mock_get_interceptor.return_value = mock_interceptor
780+
781+
with mock.patch.object(
782+
transports.SecretManagerServiceGrpcTransport, "__init__"
783+
) as patched_transport_init:
784+
patched_transport_init.return_value = None
785+
786+
client = SecretManagerServiceClient(transport="grpc")
787+
788+
mock_get_interceptor.assert_called_once()
789+
790+
called_kwargs = patched_transport_init.call_args.kwargs
791+
assert "interceptors" in called_kwargs
792+
assert called_kwargs["interceptors"] == [mock_interceptor]
793+
794+
795+
def test_secret_manager_service_client_otel_interceptor_injection_disabled():
796+
# The helper does not return an interceptor
797+
with mock.patch(
798+
"google.cloud.secretmanager_v1.services.secret_manager_service.client._otel_helpers.get_otel_grpc_interceptor"
799+
) as mock_get_interceptor:
800+
mock_get_interceptor.return_value = None
801+
802+
with mock.patch.object(
803+
transports.SecretManagerServiceGrpcTransport, "__init__"
804+
) as patched_transport_init:
805+
patched_transport_init.return_value = None
806+
807+
client = SecretManagerServiceClient(transport="grpc")
808+
809+
mock_get_interceptor.assert_called_once()
810+
811+
called_kwargs = patched_transport_init.call_args.kwargs
812+
assert "interceptors" not in called_kwargs
813+
814+
773815
@pytest.mark.parametrize(
774816
"client_class,transport_class,transport_name,use_client_cert_env",
775817
[

0 commit comments

Comments
 (0)