Skip to content

Commit da96f65

Browse files
committed
fix: error raised for env checks in LogLimits and SpanLimits
Current implementation raises a value error trying to create the error message. Updated error message format to use positional instead of named params. Added test cases to validate the correct errors are raised.
1 parent 39767ae commit da96f65

File tree

5 files changed

+63
-2
lines changed

5 files changed

+63
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2626
([#4448](https://github.com/open-telemetry/opentelemetry-python/pull/4448))
2727
- Make `trace_api.use_span()` record `BaseException` as well as `Exception`
2828
([#4406](https://github.com/open-telemetry/opentelemetry-python/pull/4406))
29+
- Fix env var error message for TraceLimits/SpanLimits
30+
([#4458](https://github.com/open-telemetry/opentelemetry-python/pull/4458))
2931

3032
## Version 1.30.0/0.51b0 (2025-02-03)
3133

opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def _from_env_if_absent(
134134
if value == cls.UNSET:
135135
return None
136136

137-
err_msg = "{0} must be a non-negative integer but got {}"
137+
err_msg = "{} must be a non-negative integer but got {}"
138138

139139
# if no value is provided for the limit, try to load it from env
140140
if value is None:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ def _from_env_if_absent(
692692
if value == cls.UNSET:
693693
return None
694694

695-
err_msg = "{0} must be a non-negative integer but got {}"
695+
err_msg = "{} must be a non-negative integer but got {}"
696696

697697
# if no value is provided for the limit, try to load it from env
698698
if value is None:

opentelemetry-sdk/tests/logs/test_log_limits.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,16 @@
1313
# limitations under the License.
1414

1515
import unittest
16+
from unittest.mock import patch
1617

1718
from opentelemetry.sdk._logs import LogLimits
1819
from opentelemetry.sdk._logs._internal import (
1920
_DEFAULT_OTEL_ATTRIBUTE_COUNT_LIMIT,
2021
)
22+
from opentelemetry.sdk.environment_variables import (
23+
OTEL_ATTRIBUTE_COUNT_LIMIT,
24+
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
25+
)
2126

2227

2328
class TestLogLimits(unittest.TestCase):
@@ -38,3 +43,28 @@ def test_log_limits_max_attribute_length(self):
3843
limits = LogLimits(max_attribute_length=1)
3944

4045
self.assertEqual(expected, limits.max_attribute_length)
46+
47+
def test_invalid_env_vars_raise(self):
48+
env_keys = [
49+
OTEL_ATTRIBUTE_COUNT_LIMIT,
50+
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
51+
]
52+
53+
env_vals = ["bad", "-1"]
54+
test_cases = {k: v for k in env_keys for v in env_vals}
55+
56+
for k, v in test_cases.items():
57+
with self.subTest(env_var=k, value=v):
58+
with self.assertRaises(ValueError) as error, patch.dict(
59+
"os.environ", {k: v}
60+
):
61+
LogLimits()
62+
63+
expected_msg = (
64+
f"{k} must be a non-negative integer but got {v}"
65+
)
66+
self.assertEqual(
67+
expected_msg,
68+
str(error.exception),
69+
f"Unexpected error message for {k}={v}",
70+
)

opentelemetry-sdk/tests/trace/test_trace.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2007,6 +2007,35 @@ def _test_span_no_limits(self, tracer):
20072007
for attr_val in root.attributes.values():
20082008
self.assertEqual(attr_val, self.long_val)
20092009

2010+
def test_invalid_env_vars_raise(self):
2011+
env_keys = [
2012+
OTEL_SPAN_EVENT_COUNT_LIMIT,
2013+
OTEL_SPAN_LINK_COUNT_LIMIT,
2014+
OTEL_ATTRIBUTE_COUNT_LIMIT,
2015+
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
2016+
OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT,
2017+
OTEL_LINK_ATTRIBUTE_COUNT_LIMIT,
2018+
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
2019+
]
2020+
env_vals = ["bad", "-1"]
2021+
test_cases = {k: v for k in env_keys for v in env_vals}
2022+
2023+
for k, v in test_cases.items():
2024+
with self.subTest(env_var=k, value=v):
2025+
with self.assertRaises(ValueError) as error, patch.dict(
2026+
"os.environ", {k: v}
2027+
):
2028+
trace.SpanLimits()
2029+
2030+
expected_msg = (
2031+
f"{k} must be a non-negative integer but got {v}"
2032+
)
2033+
self.assertEqual(
2034+
expected_msg,
2035+
str(error.exception),
2036+
f"Unexpected error message for {k}={v}",
2037+
)
2038+
20102039

20112040
class TestTraceFlags(unittest.TestCase):
20122041
def test_constant_default(self):

0 commit comments

Comments
 (0)