Skip to content

Commit 053503a

Browse files
fix(config): scope deflate compression to OTLP HTTP
1 parent b62da5c commit 053503a

File tree

4 files changed

+37
-10
lines changed

4 files changed

+37
-10
lines changed

opentelemetry-sdk/src/opentelemetry/sdk/_configuration/_common.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,25 @@ def _parse_headers(
5252

5353

5454
def _map_compression(
55-
value: Optional[str], compression_enum: type
55+
value: Optional[str],
56+
compression_enum: type,
57+
*,
58+
allow_deflate: bool = False,
5659
) -> Optional[object]:
5760
"""Map a compression string to the given Compression enum value."""
5861
if value is None or value.lower() == "none":
5962
return None
6063
if value.lower() == "gzip":
6164
return compression_enum.Gzip # type: ignore[attr-defined]
62-
if value.lower() == "deflate" and hasattr(compression_enum, "Deflate"):
65+
if (
66+
value.lower() == "deflate"
67+
and allow_deflate
68+
and hasattr(compression_enum, "Deflate")
69+
):
6370
return compression_enum.Deflate # type: ignore[attr-defined]
6471

6572
supported_values = ["'gzip'", "'none'"]
66-
if hasattr(compression_enum, "Deflate"):
73+
if allow_deflate and hasattr(compression_enum, "Deflate"):
6774
supported_values.insert(1, "'deflate'")
6875

6976
raise ConfigurationError(

opentelemetry-sdk/src/opentelemetry/sdk/_configuration/_meter_provider.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,9 @@ def _create_otlp_http_metric_exporter(
286286
"Install it with: pip install opentelemetry-exporter-otlp-proto-http"
287287
) from exc
288288

289-
compression = _map_compression(config.compression, Compression)
289+
compression = _map_compression(
290+
config.compression, Compression, allow_deflate=True
291+
)
290292
headers = _parse_headers(config.headers, config.headers_list)
291293
timeout = (config.timeout / 1000.0) if config.timeout is not None else None
292294
preferred_temporality = _map_temporality(config.temporality_preference)

opentelemetry-sdk/src/opentelemetry/sdk/_configuration/_tracer_provider.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ def _create_otlp_http_span_exporter(
9595
"Install it with: pip install opentelemetry-exporter-otlp-proto-http"
9696
) from exc
9797

98-
compression = _map_compression(config.compression, Compression)
98+
compression = _map_compression(
99+
config.compression, Compression, allow_deflate=True
100+
)
99101
headers = _parse_headers(config.headers, config.headers_list)
100102
timeout = (config.timeout / 1000.0) if config.timeout is not None else None
101103

opentelemetry-sdk/tests/_configuration/test_common.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,29 @@ def test_gzip_maps_to_gzip(self):
108108
_map_compression("gzip", _CompressionWithDeflate), "gzip"
109109
)
110110

111-
def test_deflate_maps_when_supported(self):
111+
def test_deflate_maps_when_enabled(self):
112112
self.assertEqual(
113-
_map_compression("deflate", _CompressionWithDeflate),
113+
_map_compression(
114+
"deflate", _CompressionWithDeflate, allow_deflate=True
115+
),
114116
"deflate",
115117
)
116118

117-
def test_deflate_raises_when_unsupported(self):
119+
def test_deflate_raises_by_default(self):
118120
with self.assertRaises(ConfigurationError) as ctx:
119-
_map_compression("deflate", _CompressionWithoutDeflate)
121+
_map_compression("deflate", _CompressionWithDeflate)
122+
123+
self.assertEqual(
124+
str(ctx.exception),
125+
"Unsupported compression value 'deflate'. Supported values: "
126+
"'gzip', 'none'.",
127+
)
128+
129+
def test_deflate_raises_when_http_enum_lacks_support(self):
130+
with self.assertRaises(ConfigurationError) as ctx:
131+
_map_compression(
132+
"deflate", _CompressionWithoutDeflate, allow_deflate=True
133+
)
120134

121135
self.assertEqual(
122136
str(ctx.exception),
@@ -126,7 +140,9 @@ def test_deflate_raises_when_unsupported(self):
126140

127141
def test_http_error_message_includes_deflate(self):
128142
with self.assertRaises(ConfigurationError) as ctx:
129-
_map_compression("brotli", _CompressionWithDeflate)
143+
_map_compression(
144+
"brotli", _CompressionWithDeflate, allow_deflate=True
145+
)
130146

131147
self.assertEqual(
132148
str(ctx.exception),

0 commit comments

Comments
 (0)