Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
([#4508](https://github.com/open-telemetry/opentelemetry-python/pull/4508))
- Fix serialization of extended attributes for logs signal
([#4342](https://github.com/open-telemetry/opentelemetry-python/pull/4342))
- Handle OTEL_PROPAGATORS contains None
([#4143](https://github.com/open-telemetry/opentelemetry-python/pull/4553))
- docs: updated and added to the metrics and log examples
([#4559](https://github.com/open-telemetry/opentelemetry-python/pull/4559))

Expand Down
21 changes: 14 additions & 7 deletions opentelemetry-api/src/opentelemetry/propagate/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def example_route():

from logging import getLogger
from os import environ
from typing import Optional
from typing import List, Optional

from opentelemetry.context.context import Context
from opentelemetry.environment_variables import OTEL_PROPAGATORS
Expand Down Expand Up @@ -121,7 +121,7 @@ def inject(
get_global_textmap().inject(carrier, context=context, setter=setter)


propagators = []
propagators: List[textmap.TextMapPropagator] = []

# Single use variable here to hack black and make lint pass
environ_propagators = environ.get(
Expand All @@ -132,12 +132,17 @@ def inject(

for propagator in environ_propagators.split(","):
propagator = propagator.strip()

if propagator.lower() == "none":
logger.debug(
"OTEL_PROPAGATORS environment variable contains none, removing all propagators"
)
propagators = []
break
try:
propagators.append( # type: ignore
propagators.append(
next( # type: ignore
iter( # type: ignore
entry_points( # type: ignore
entry_points( # type: ignore[misc]
group="opentelemetry_propagator",
name=propagator,
)
Expand All @@ -153,7 +158,9 @@ def inject(
raise


_HTTP_TEXT_FORMAT = composite.CompositePropagator(propagators) # type: ignore
_HTTP_TEXT_FORMAT: textmap.TextMapPropagator = composite.CompositePropagator(
propagators
)


def get_global_textmap() -> textmap.TextMapPropagator:
Expand All @@ -164,4 +171,4 @@ def set_global_textmap(
http_text_format: textmap.TextMapPropagator,
) -> None:
global _HTTP_TEXT_FORMAT # pylint:disable=global-statement
_HTTP_TEXT_FORMAT = http_text_format # type: ignore
_HTTP_TEXT_FORMAT = http_text_format
44 changes: 44 additions & 0 deletions opentelemetry-api/tests/propagators/test_propagators.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,50 @@ def test_propagators(propagators):

reload(opentelemetry.propagate)

@patch.dict(environ, {OTEL_PROPAGATORS: "None"})
@patch("opentelemetry.propagators.composite.CompositePropagator")
def test_none_propogators(self, mock_compositehttppropagator):
def test_propagators(propagators):
propagators = {propagator.__class__ for propagator in propagators}

self.assertEqual(len(propagators), 0)
self.assertEqual(
propagators,
set(),
)

mock_compositehttppropagator.configure_mock(
**{"side_effect": test_propagators}
)

# pylint: disable=import-outside-toplevel
import opentelemetry.propagate

reload(opentelemetry.propagate)

@patch.dict(environ, {OTEL_PROPAGATORS: "tracecontext, None"})
@patch("opentelemetry.propagators.composite.CompositePropagator")
def test_multiple_propogators_with_none(
self, mock_compositehttppropagator
):
def test_propagators(propagators):
propagators = {propagator.__class__ for propagator in propagators}

self.assertEqual(len(propagators), 0)
self.assertEqual(
propagators,
set(),
)

mock_compositehttppropagator.configure_mock(
**{"side_effect": test_propagators}
)

# pylint: disable=import-outside-toplevel
import opentelemetry.propagate

reload(opentelemetry.propagate)

@patch.dict(environ, {OTEL_PROPAGATORS: "a, b, c "})
@patch("opentelemetry.propagators.composite.CompositePropagator")
@patch("opentelemetry.util._importlib_metadata.entry_points")
Expand Down
Loading