Skip to content

Commit 7465249

Browse files
authored
Expose basic Otel classes and funtions to be importable through redis.observability to match the examples in the readthedocs (#3996)
1 parent a72e3f0 commit 7465249

2 files changed

Lines changed: 110 additions & 0 deletions

File tree

redis/observability/__init__.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""
2+
OpenTelemetry observability module for redis-py.
3+
4+
This module provides APIs for collecting and exporting Redis metrics using OpenTelemetry.
5+
6+
Usage:
7+
from redis.observability import get_observability_instance, OTelConfig
8+
9+
otel = get_observability_instance()
10+
otel.init(OTelConfig())
11+
"""
12+
13+
from redis.observability.config import MetricGroup, OTelConfig, TelemetryOption
14+
from redis.observability.providers import (
15+
ObservabilityInstance,
16+
get_observability_instance,
17+
reset_observability_instance,
18+
)
19+
20+
__all__ = [
21+
"OTelConfig",
22+
"MetricGroup",
23+
"TelemetryOption",
24+
"ObservabilityInstance",
25+
"get_observability_instance",
26+
"reset_observability_instance",
27+
]
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
"""
2+
Unit tests for redis.observability public API exports.
3+
4+
These tests verify that all symbols exported from redis.observability
5+
are correctly re-exported and match the original implementations.
6+
"""
7+
8+
9+
class TestPublicAPIExports:
10+
"""Tests for public API exports from redis.observability."""
11+
12+
def test_otel_config_reexport(self):
13+
"""Test that OTelConfig is correctly re-exported."""
14+
from redis.observability import OTelConfig
15+
from redis.observability.config import OTelConfig as OriginalOTelConfig
16+
17+
assert OTelConfig is OriginalOTelConfig
18+
19+
def test_metric_group_reexport(self):
20+
"""Test that MetricGroup is correctly re-exported."""
21+
from redis.observability import MetricGroup
22+
from redis.observability.config import MetricGroup as OriginalMetricGroup
23+
24+
assert MetricGroup is OriginalMetricGroup
25+
26+
def test_telemetry_option_reexport(self):
27+
"""Test that TelemetryOption is correctly re-exported."""
28+
from redis.observability import TelemetryOption
29+
from redis.observability.config import (
30+
TelemetryOption as OriginalTelemetryOption,
31+
)
32+
33+
assert TelemetryOption is OriginalTelemetryOption
34+
35+
def test_observability_instance_reexport(self):
36+
"""Test that ObservabilityInstance is correctly re-exported."""
37+
from redis.observability import ObservabilityInstance
38+
from redis.observability.providers import (
39+
ObservabilityInstance as OriginalObservabilityInstance,
40+
)
41+
42+
assert ObservabilityInstance is OriginalObservabilityInstance
43+
44+
def test_get_observability_instance_reexport(self):
45+
"""Test that get_observability_instance is correctly re-exported."""
46+
from redis.observability import get_observability_instance
47+
from redis.observability.providers import (
48+
get_observability_instance as original_get_observability_instance,
49+
)
50+
51+
assert get_observability_instance is original_get_observability_instance
52+
53+
def test_reset_observability_instance_reexport(self):
54+
"""Test that reset_observability_instance is correctly re-exported."""
55+
from redis.observability import reset_observability_instance
56+
from redis.observability.providers import (
57+
reset_observability_instance as original_reset_observability_instance,
58+
)
59+
60+
assert reset_observability_instance is original_reset_observability_instance
61+
62+
def test_all_exports_defined(self):
63+
"""Test that __all__ contains all expected exports."""
64+
import redis.observability as obs
65+
66+
expected_exports = {
67+
"OTelConfig",
68+
"MetricGroup",
69+
"TelemetryOption",
70+
"ObservabilityInstance",
71+
"get_observability_instance",
72+
"reset_observability_instance",
73+
}
74+
75+
assert set(obs.__all__) == expected_exports
76+
77+
def test_all_exports_are_accessible(self):
78+
"""Test that all items in __all__ are actually accessible."""
79+
import redis.observability as obs
80+
81+
for name in obs.__all__:
82+
assert hasattr(obs, name), f"{name} is in __all__ but not accessible"
83+
assert getattr(obs, name) is not None, f"{name} is None"

0 commit comments

Comments
 (0)