From e42c9ead9a498c03ef4c86860818acdd05423c25 Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Wed, 15 Apr 2026 12:00:56 +0200 Subject: [PATCH 1/7] opentelemetry-sdk: fix some typing warnings These variables are check for None at runtime so we can assume that later they are not Optional anymore. --- .../opentelemetry/sdk/metrics/_internal/aggregation.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py index 46c30f9049..44dbba7fc8 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py @@ -29,6 +29,7 @@ Sequence, Type, TypeVar, + cast, ) from opentelemetry.metrics import ( @@ -968,6 +969,14 @@ def collect( if scale is None and self._previous_scale is not None: scale = self._previous_scale + # here self._previous_value_negative and self._previous_value_positive are not Optional anymore + self._previous_value_negative = cast( + Buckets, self._previous_value_negative + ) + self._previous_value_positive = cast( + Buckets, self._previous_value_positive + ) + min_scale = min(self._previous_scale, scale) low_positive, high_positive = ( From 026fab35951e615621a4ae3d8c4a6d7bc9e3c556 Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Wed, 15 Apr 2026 12:23:07 +0200 Subject: [PATCH 2/7] opentelemetry-sdk: add missing types for exponential histograms mapping --- .../exponential_histogram/mapping/__init__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/mapping/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/mapping/__init__.py index 387b1d1444..18b0d1dd97 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/mapping/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/mapping/__init__.py @@ -13,6 +13,10 @@ # limitations under the License. from abc import ABC, abstractmethod +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from threading import Lock class Mapping(ABC): @@ -20,6 +24,12 @@ class Mapping(ABC): Parent class for `LogarithmMapping` and `ExponentialMapping`. """ + _mappings: dict[int, "Mapping"] + _mappings_lock: Lock + + _min_scale = int + _max_scale = int + # pylint: disable=no-member def __new__(cls, scale: int): with cls._mappings_lock: From 28b690dd7ac73ea57c9a89284d2e1adc6bc74fa5 Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Wed, 15 Apr 2026 12:24:02 +0200 Subject: [PATCH 3/7] opentelemetry-sdk: silence typing warnings in buckets Honestly no idea what's going on here. --- .../sdk/metrics/_internal/exponential_histogram/buckets.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/buckets.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/buckets.py index e8a9332608..d4401428be 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/buckets.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/buckets.py @@ -182,9 +182,9 @@ def copy_empty(self) -> "Buckets": # pylint: disable=protected-access # pylint: disable=attribute-defined-outside-init # pylint: disable=invalid-name - copy._Buckets__index_base = self._Buckets__index_base - copy._Buckets__index_start = self._Buckets__index_start - copy._Buckets__index_end = self._Buckets__index_end + copy._Buckets__index_base = self._Buckets__index_base # type: ignore[reportArgumentType] + copy._Buckets__index_start = self._Buckets__index_start # type: ignore[reportArgumentType] + copy._Buckets__index_end = self._Buckets__index_end # type: ignore[reportArgumentType] copy._counts = [0 for _ in self._counts] return copy From e138ad1cff396ffedc9ac48acc3cad01faf405bb Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Wed, 15 Apr 2026 12:26:08 +0200 Subject: [PATCH 4/7] pyproject: exponential_histogram dir is now clean for typechecking --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b9bcd3453a..797bb08d8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -133,7 +133,6 @@ exclude = [ "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/_view_instrument_match.py", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exemplar/exemplar_reservoir.py", - "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/instrument.py", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/measurement_consumer.py", From 5fcf273ad34fb1f191f15aaa16ae4a0648b818f6 Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Wed, 15 Apr 2026 13:49:28 +0200 Subject: [PATCH 5/7] opentelemetry-sdk: fix typing warnings in _view_instrument_match --- .../sdk/metrics/_internal/_view_instrument_match.py | 12 +++++++++--- pyproject.toml | 1 - 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/_view_instrument_match.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/_view_instrument_match.py index 96a77fa6b1..6b5c799166 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/_view_instrument_match.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/_view_instrument_match.py @@ -16,7 +16,7 @@ from logging import getLogger from threading import Lock from time import time_ns -from typing import Dict, List, Optional, Sequence +from typing import Dict, List, Optional, Sequence, cast from opentelemetry.metrics import Instrument from opentelemetry.sdk.metrics._internal.aggregation import ( @@ -76,10 +76,16 @@ def conflicts(self, other: "_ViewInstrumentMatch") -> bool: # type since they are functionally equivalent. and self._aggregation.__class__ == other._aggregation.__class__ ) + if not result: + return result + if isinstance(self._aggregation, _SumAggregation): + # if result is True the two aggregation are of the same type + self._aggregation = cast(_SumAggregation, self._aggregation) + other._aggregation = cast(_SumAggregation, other._aggregation) + result = ( - result - and self._aggregation._instrument_is_monotonic + self._aggregation._instrument_is_monotonic == other._aggregation._instrument_is_monotonic and self._aggregation._instrument_aggregation_temporality == other._aggregation._instrument_aggregation_temporality diff --git a/pyproject.toml b/pyproject.toml index 797bb08d8c..b0d89f84ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -130,7 +130,6 @@ exclude = [ "opentelemetry-sdk/tests", "opentelemetry-sdk/src/opentelemetry/sdk/_events", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/__init__.py", - "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/_view_instrument_match.py", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exemplar/exemplar_reservoir.py", "opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/", From 416686b500ef5f9c2501236792c71b26041e7eb8 Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Wed, 15 Apr 2026 13:53:55 +0200 Subject: [PATCH 6/7] opentelemetry-sdk: fix path of type --- .../opentelemetry/sdk/metrics/_internal/measurement_consumer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/measurement_consumer.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/measurement_consumer.py index 302f82d992..4109e12956 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/measurement_consumer.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/measurement_consumer.py @@ -58,7 +58,7 @@ def collect( class SynchronousMeasurementConsumer(MeasurementConsumer): def __init__( self, - sdk_config: "opentelemetry.sdk.metrics._internal.SdkConfiguration", + sdk_config: "opentelemetry.sdk.metrics._internal.sdk_configuration.SdkConfiguration", ) -> None: self._lock = Lock() self._sdk_config = sdk_config From 496ddf38d5b9b8ea34108078b6f28a7589cc619a Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Thu, 16 Apr 2026 10:05:02 +0200 Subject: [PATCH 7/7] Fixup --- .../_internal/exponential_histogram/mapping/__init__.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/mapping/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/mapping/__init__.py index 18b0d1dd97..efb5e1ccfe 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/mapping/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/exponential_histogram/mapping/__init__.py @@ -13,10 +13,7 @@ # limitations under the License. from abc import ABC, abstractmethod -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from threading import Lock +from threading import Lock class Mapping(ABC):