Skip to content

Commit

Permalink
Set / Override enable open telemetry setting based on user input and
Browse files Browse the repository at this point in the history
Python version
  • Loading branch information
mukund-ananthu committed Sep 8, 2024
1 parent 28c3592 commit 8645211
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 8 deletions.
18 changes: 18 additions & 0 deletions google/cloud/pubsub_v1/subscriber/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

from __future__ import absolute_import

import sys
import os
import typing
from typing import cast, Any, Callable, Optional, Sequence, Union
Expand Down Expand Up @@ -93,6 +94,23 @@ def __init__(

self.subscriber_options = types.SubscriberOptions(*subscriber_options)

# Set / override Open Telemetry option.
self._open_telemetry_enabled = (
self.subscriber_options.enable_open_telemetry_tracing
)
# OpenTelemetry features used by the library are not supported in Python versions <= 3.7.
# Refer https://github.com/open-telemetry/opentelemetry-python/issues/3993#issuecomment-2211976389
if (
self.subscriber_options.enable_open_telemetry_tracing
and sys.version_info.major == 3
and sys.version_info.minor < 8
):
warnings.warn(
message="Open Telemetry for Python version 3.7 or lower is not supported. Disabling Open Telemetry tracing.",
category=RuntimeWarning,
)
self._open_telemetry_enabled = False

@classmethod
def from_service_account_file( # type: ignore[override]
cls, filename: str, **kwargs: Any
Expand Down
55 changes: 47 additions & 8 deletions tests/unit/pubsub_v1/subscriber/test_subscriber_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,19 +320,58 @@ async def test_sync_pull_warning_if_return_immediately_async(creds):


@pytest.mark.parametrize(
"enable_open_telemetry_tracing",
"enable_open_telemetry",
[
True,
False,
],
)
def test_subscriber_settings(creds, enable_open_telemetry_tracing):
def test_subscriber_settings(creds, enable_open_telemetry):
options = types.SubscriberOptions(
enable_open_telemetry_tracing=enable_open_telemetry_tracing
enable_open_telemetry_tracing=enable_open_telemetry
)
client = subscriber.Client(subscriber_options=options, credentials=creds)
if sys.version_info >= (3, 8) or enable_open_telemetry is False:
client = subscriber.Client(subscriber_options=options, credentials=creds)
assert (
client.subscriber_options.enable_open_telemetry_tracing
== enable_open_telemetry
)
else:
with pytest.warns(
RuntimeWarning,
match="Open Telemetry for Python version 3.7 or lower is not supported. Disabling Open Telemetry tracing.",
):
client = subscriber.Client(subscriber_options=options, credentials=creds)
assert client._open_telemetry_enabled is False

assert (
client.subscriber_options.enable_open_telemetry_tracing
== enable_open_telemetry_tracing
)

@pytest.mark.parametrize(
"enable_open_telemetry",
[
True,
False,
],
)
def test_open_telemetry_subscriber_options(creds, enable_open_telemetry):
if sys.version_info >= (3, 8) or enable_open_telemetry is False:
client = subscriber.Client(
subscriber_options=types.SubscriberOptions(
enable_open_telemetry_tracing=enable_open_telemetry
),
credentials=creds,
)
assert client._open_telemetry_enabled == enable_open_telemetry
else:
# Open Telemetry is not supported and hence disabled for Python
# versions 3.7 or below
with pytest.warns(
RuntimeWarning,
match="Open Telemetry for Python version 3.7 or lower is not supported. Disabling Open Telemetry tracing.",
):
client = subscriber.Client(
subscriber_options=types.SubscriberOptions(
enable_open_telemetry_tracing=enable_open_telemetry
),
credentials=creds,
)
assert client._open_telemetry_enabled is False

0 comments on commit 8645211

Please sign in to comment.