Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
4 changes: 2 additions & 2 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
([#4553](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 Expand Up @@ -1531,8 +1533,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
Serialize tuple type values by coercing them into a string, since Jaeger does not
support tuple types.
([#865](https://github.com/open-telemetry/opentelemetry-python/pull/865))
- Validate span attribute types in SDK
([#678](https://github.com/open-telemetry/opentelemetry-python/pull/678))
- Specify to_json indent from arguments
([#718](https://github.com/open-telemetry/opentelemetry-python/pull/718))
- Span.resource will now default to an empty resource
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