From e9c793df9a3f138edbeff2693bf2267406885dec Mon Sep 17 00:00:00 2001 From: sroda Date: Mon, 21 Nov 2022 15:25:23 +0200 Subject: [PATCH 1/2] Add uri decode for OTEL_RESOUCE_ATTRIBUTES --- CHANGELOG.md | 2 ++ .../src/opentelemetry/sdk/resources/__init__.py | 4 +++- opentelemetry-sdk/tests/resources/test_resources.py | 10 ++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 339cdb62460..1897d3d735c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- Add url decode values from OTEL_RESOURCE_ATTRIBUTES + ([#3046](https://github.com/open-telemetry/opentelemetry-python/pull/3046)) - Add missing entry points for OTLP/HTTP exporter ([#3027](https://github.com/open-telemetry/opentelemetry-python/pull/3027)) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index 3088dbc5bbf..56707415e5b 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -62,6 +62,7 @@ import sys import typing from json import dumps +from urllib import parse import pkg_resources @@ -289,7 +290,8 @@ def detect(self) -> "Resource": exc, ) continue - env_resource_map[key.strip()] = value.strip() + value_url_decoded = parse.unquote(value.strip()) + env_resource_map[key.strip()] = value_url_decoded service_name = os.environ.get(OTEL_SERVICE_NAME) if service_name: diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index 2d584981e62..19499fe240a 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -492,6 +492,16 @@ def test_invalid_key_value_pairs(self): resources.Resource({"k": "v", "k2": "v2", "foo": "bar=baz"}), ) + def test_multiple_with_url_decode(self): + detector = resources.OTELResourceDetector() + os.environ[ + resources.OTEL_RESOURCE_ATTRIBUTES + ] = "key=value%20test%0A, key2=value+%202" + self.assertEqual( + detector.detect(), + resources.Resource({"key": "value test\n", "key2": "value+ 2"}), + ) + @mock.patch.dict( os.environ, {resources.OTEL_SERVICE_NAME: "test-srv-name"}, From 15dfa4756ae661f8f717d9cf37e347f0eef21f4e Mon Sep 17 00:00:00 2001 From: sroda Date: Mon, 28 Nov 2022 18:57:20 +0200 Subject: [PATCH 2/2] Fixed after CR --- opentelemetry-sdk/tests/resources/test_resources.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index 19499fe240a..c9649f685ad 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -19,6 +19,7 @@ import uuid from logging import ERROR from unittest import mock +from urllib import parse from opentelemetry.sdk import resources @@ -501,6 +502,15 @@ def test_multiple_with_url_decode(self): detector.detect(), resources.Resource({"key": "value test\n", "key2": "value+ 2"}), ) + self.assertEqual( + detector.detect(), + resources.Resource( + { + "key": parse.unquote("value%20test%0A"), + "key2": parse.unquote("value+%202"), + } + ), + ) @mock.patch.dict( os.environ,