Skip to content
Open
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
1 change: 1 addition & 0 deletions .changelog/5328.changed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
`opentelemetry-api`: normalize empty environment propagation names to `_` in `EnvironmentSetter` and `EnvironmentGetter`
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@


def _normalize_key(key: str) -> str:
if not key:
return "_"
result = re.sub(r"[^A-Za-z0-9_]", "_", key).upper()
if result and result[0].isdigit():
result = "_" + result
Expand Down Expand Up @@ -95,7 +97,7 @@ def set(

Args:
carrier: Dictionary to store environment variables
key: The key to set (will be converted to uppercase)
key: The key to set (normalized)
value: The value to set
"""
carrier[_normalize_key(key)] = value
16 changes: 15 additions & 1 deletion opentelemetry-api/tests/propagators/test__envcarrier.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def test_already_valid(self):
self.assertEqual(_normalize_key("ALREADY_VALID"), "ALREADY_VALID")

def test_empty_string(self):
self.assertEqual(_normalize_key(""), "")
self.assertEqual(_normalize_key(""), "_")


class TestIsNormalizedKey(unittest.TestCase):
Expand Down Expand Up @@ -94,6 +94,13 @@ def test_get_empty_value(self):
result = getter.get({}, "empty_key")
self.assertEqual(result, [""])

def test_get_empty_key_maps_to_underscore(self):
"""Test empty key lookup uses the normalized underscore name."""
with patch.dict(os.environ, {"_": "underscore_value"}, clear=True):
getter = EnvironmentGetter()
result = getter.get({}, "")
self.assertEqual(result, ["underscore_value"])

def test_get_with_special_characters(self):
"""Test environment variables with special characters."""
with patch.dict(
Expand Down Expand Up @@ -234,6 +241,13 @@ def test_set_empty_value(self):
setter.set(carrier, "empty_key", "")
self.assertEqual(carrier, {"EMPTY_KEY": ""})

def test_set_empty_key_maps_to_underscore(self):
"""Test setting an empty key uses the normalized underscore name."""
setter = EnvironmentSetter()
carrier = {}
setter.set(carrier, "", "value")
self.assertEqual(carrier, {"_": "value"})

def test_does_not_modify_os_environ(self):
"""Test that setter does not modify os.environ."""
setter = EnvironmentSetter()
Expand Down
Loading