Skip to content

Commit 638988c

Browse files
authored
Add url decode for OTEL_RESOUCE_ATTRIBUTES (#3046)
1 parent 8a0ce15 commit 638988c

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## Unreleased
99

10+
- Add url decode values from OTEL_RESOURCE_ATTRIBUTES
11+
([#3046](https://github.com/open-telemetry/opentelemetry-python/pull/3046))
1012
- Fixed circular dependency issue with custom samplers
1113
([#3026](https://github.com/open-telemetry/opentelemetry-python/pull/3026))
1214
- Add missing entry points for OTLP/HTTP exporter

opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import sys
6363
import typing
6464
from json import dumps
65+
from urllib import parse
6566

6667
import pkg_resources
6768

@@ -289,7 +290,8 @@ def detect(self) -> "Resource":
289290
exc,
290291
)
291292
continue
292-
env_resource_map[key.strip()] = value.strip()
293+
value_url_decoded = parse.unquote(value.strip())
294+
env_resource_map[key.strip()] = value_url_decoded
293295

294296
service_name = os.environ.get(OTEL_SERVICE_NAME)
295297
if service_name:

opentelemetry-sdk/tests/resources/test_resources.py

+20
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import uuid
2020
from logging import ERROR
2121
from unittest import mock
22+
from urllib import parse
2223

2324
from opentelemetry.sdk import resources
2425

@@ -492,6 +493,25 @@ def test_invalid_key_value_pairs(self):
492493
resources.Resource({"k": "v", "k2": "v2", "foo": "bar=baz"}),
493494
)
494495

496+
def test_multiple_with_url_decode(self):
497+
detector = resources.OTELResourceDetector()
498+
os.environ[
499+
resources.OTEL_RESOURCE_ATTRIBUTES
500+
] = "key=value%20test%0A, key2=value+%202"
501+
self.assertEqual(
502+
detector.detect(),
503+
resources.Resource({"key": "value test\n", "key2": "value+ 2"}),
504+
)
505+
self.assertEqual(
506+
detector.detect(),
507+
resources.Resource(
508+
{
509+
"key": parse.unquote("value%20test%0A"),
510+
"key2": parse.unquote("value+%202"),
511+
}
512+
),
513+
)
514+
495515
@mock.patch.dict(
496516
os.environ,
497517
{resources.OTEL_SERVICE_NAME: "test-srv-name"},

0 commit comments

Comments
 (0)