diff --git a/opentelemetry-api/src/opentelemetry/propagate/__init__.py b/opentelemetry-api/src/opentelemetry/propagate/__init__.py index afe406fb593..472dcac58ab 100644 --- a/opentelemetry-api/src/opentelemetry/propagate/__init__.py +++ b/opentelemetry-api/src/opentelemetry/propagate/__init__.py @@ -132,7 +132,12 @@ 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 next( # type: ignore diff --git a/opentelemetry-api/tests/propagators/test_propagators.py b/opentelemetry-api/tests/propagators/test_propagators.py index f0554ad2812..db2e329467c 100644 --- a/opentelemetry-api/tests/propagators/test_propagators.py +++ b/opentelemetry-api/tests/propagators/test_propagators.py @@ -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")