Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-opentelemetry-api for
openSUSE:Factory checked in at 2026-01-06 17:41:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-opentelemetry-api (Old)
and /work/SRC/openSUSE:Factory/.python-opentelemetry-api.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-opentelemetry-api"
Tue Jan 6 17:41:08 2026 rev:21 rq:1325293 version:1.39.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-opentelemetry-api/python-opentelemetry-api.changes
2025-11-21 16:54:10.672038172 +0100
+++
/work/SRC/openSUSE:Factory/.python-opentelemetry-api.new.1928/python-opentelemetry-api.changes
2026-01-06 17:41:10.961268384 +0100
@@ -1,0 +2,20 @@
+Sun Dec 28 15:14:41 UTC 2025 - Dirk Müller <[email protected]>
+
+- update to 1.39.1:
+ * Silence events API warnings for internal users
+
+-------------------------------------------------------------------
+Sat Dec 13 11:31:06 UTC 2025 - Dirk Müller <[email protected]>
+
+- update to 1.39.0:
+ * `opentelemetry-api`: Convert objects of any type other than
+ AnyValue in attributes to string to be exportable
+ * docs: Added sqlcommenter example
+ * build: bump ruff to 0.14.1
+ * Add `opentelemetry-exporter-credential-provider-gcp` as an
+ optional dependency to `opentelemetry-exporter-otlp-proto-
+ grpc` and `opentelemetry-exporter-otlp-proto-http`
+ * semantic-conventions: Bump to 1.38.0
+ * Fix type checking for built-in metric exporters
+
+-------------------------------------------------------------------
Old:
----
opentelemetry_api-1.38.0.tar.gz
New:
----
opentelemetry_api-1.39.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-opentelemetry-api.spec ++++++
--- /var/tmp/diff_new_pack.zom7mU/_old 2026-01-06 17:41:11.949309093 +0100
+++ /var/tmp/diff_new_pack.zom7mU/_new 2026-01-06 17:41:11.953309258 +0100
@@ -27,7 +27,7 @@
%{?sle15_python_module_pythons}
Name: python-opentelemetry-api%{?psuffix}
-Version: 1.38.0
+Version: 1.39.1
Release: 0
Summary: OpenTelemetry Python API
License: Apache-2.0
@@ -51,7 +51,7 @@
%endif
%if %{with test}
BuildRequires: %{python_module opentelemetry-api = %{version}}
-BuildRequires: %{python_module opentelemetry-test-utils = 0.59b0}
+BuildRequires: %{python_module opentelemetry-test-utils = 0.60b0}
BuildRequires: %{python_module pytest}
%endif
%python_subpackages
++++++ opentelemetry_api-1.38.0.tar.gz -> opentelemetry_api-1.39.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/opentelemetry_api-1.38.0/PKG-INFO
new/opentelemetry_api-1.39.1/PKG-INFO
--- old/opentelemetry_api-1.38.0/PKG-INFO 2020-02-02 01:00:00.000000000
+0100
+++ new/opentelemetry_api-1.39.1/PKG-INFO 2020-02-02 01:00:00.000000000
+0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: opentelemetry-api
-Version: 1.38.0
+Version: 1.39.1
Summary: OpenTelemetry Python API
Project-URL: Homepage,
https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-api
Project-URL: Repository, https://github.com/open-telemetry/opentelemetry-python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/opentelemetry_api-1.38.0/src/opentelemetry/_events/__init__.py
new/opentelemetry_api-1.39.1/src/opentelemetry/_events/__init__.py
--- old/opentelemetry_api-1.38.0/src/opentelemetry/_events/__init__.py
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.39.1/src/opentelemetry/_events/__init__.py
2020-02-02 01:00:00.000000000 +0100
@@ -17,6 +17,8 @@
from os import environ
from typing import Optional, cast
+from typing_extensions import deprecated
+
from opentelemetry._logs import LogRecord
from opentelemetry._logs.severity import SeverityNumber
from opentelemetry.environment_variables import (
@@ -30,6 +32,10 @@
_logger = getLogger(__name__)
+@deprecated(
+ "You should use `LogRecord` with the `event_name` field set instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
class Event(LogRecord):
def __init__(
self,
@@ -59,6 +65,10 @@
self.name = name
+@deprecated(
+ "You should use `Logger` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
class EventLogger(ABC):
def __init__(
self,
@@ -77,11 +87,19 @@
"""Emits a :class:`Event` representing an event."""
+@deprecated(
+ "You should use `NoOpLogger` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
class NoOpEventLogger(EventLogger):
def emit(self, event: Event) -> None:
pass
+@deprecated(
+ "You should use `ProxyLogger` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
class ProxyEventLogger(EventLogger):
def __init__(
self,
@@ -118,6 +136,10 @@
self._event_logger.emit(event)
+@deprecated(
+ "You should use `LoggerProvider` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
class EventLoggerProvider(ABC):
@abstractmethod
def get_event_logger(
@@ -130,6 +152,10 @@
"""Returns an EventLoggerProvider for use."""
+@deprecated(
+ "You should use `NoOpLoggerProvider` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
class NoOpEventLoggerProvider(EventLoggerProvider):
def get_event_logger(
self,
@@ -143,6 +169,10 @@
)
+@deprecated(
+ "You should use `ProxyLoggerProvider` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
class ProxyEventLoggerProvider(EventLoggerProvider):
def get_event_logger(
self,
@@ -171,6 +201,10 @@
_PROXY_EVENT_LOGGER_PROVIDER = ProxyEventLoggerProvider()
+@deprecated(
+ "You should use `get_logger_provider` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
def get_event_logger_provider() -> EventLoggerProvider:
global _EVENT_LOGGER_PROVIDER # pylint:
disable=global-variable-not-assigned
if _EVENT_LOGGER_PROVIDER is None:
@@ -201,12 +235,20 @@
)
+@deprecated(
+ "You should use `set_logger_provider` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
def set_event_logger_provider(
event_logger_provider: EventLoggerProvider,
) -> None:
_set_event_logger_provider(event_logger_provider, log=True)
+@deprecated(
+ "You should use `get_logger` instead. "
+ "Deprecated since version 1.39.0 and will be removed in a future release."
+)
def get_event_logger(
name: str,
version: Optional[str] = None,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/opentelemetry_api-1.38.0/src/opentelemetry/attributes/__init__.py
new/opentelemetry_api-1.39.1/src/opentelemetry/attributes/__init__.py
--- old/opentelemetry_api-1.38.0/src/opentelemetry/attributes/__init__.py
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.39.1/src/opentelemetry/attributes/__init__.py
2020-02-02 01:00:00.000000000 +0100
@@ -118,7 +118,7 @@
return None
-def _clean_extended_attribute_value(
+def _clean_extended_attribute_value( # pylint: disable=too-many-branches
value: types.AnyValue, max_len: Optional[int]
) -> types.AnyValue:
# for primitive types just return the value and eventually shorten the
string length
@@ -180,11 +180,19 @@
# Freeze mutable sequences defensively
return tuple(cleaned_seq)
- raise TypeError(
- f"Invalid type {type(value).__name__} for attribute value. "
- f"Expected one of {[valid_type.__name__ for valid_type in
_VALID_ANY_VALUE_TYPES]} or a "
- "sequence of those types",
- )
+ # Some applications such as Django add values to log records whose types
fall outside the
+ # primitive types and `_VALID_ANY_VALUE_TYPES`, i.e., they are not of type
`AnyValue`.
+ # Rather than attempt to whitelist every possible instrumentation, we
stringify those values here
+ # so they can still be represented as attributes, falling back to the
original TypeError only if
+ # converting to string raises.
+ try:
+ return str(value)
+ except Exception:
+ raise TypeError(
+ f"Invalid type {type(value).__name__} for attribute value. "
+ f"Expected one of {[valid_type.__name__ for valid_type in
_VALID_ANY_VALUE_TYPES]} or a "
+ "sequence of those types",
+ )
def _clean_extended_attribute(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/opentelemetry_api-1.38.0/src/opentelemetry/util/_decorator.py
new/opentelemetry_api-1.39.1/src/opentelemetry/util/_decorator.py
--- old/opentelemetry_api-1.38.0/src/opentelemetry/util/_decorator.py
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.39.1/src/opentelemetry/util/_decorator.py
2020-02-02 01:00:00.000000000 +0100
@@ -12,9 +12,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import asyncio
import contextlib
import functools
+import inspect
from typing import TYPE_CHECKING, Callable, Generic, Iterator, TypeVar
V = TypeVar("V")
@@ -63,7 +63,7 @@
raise RuntimeError("generator didn't yield") from None
def __call__(self, func: V) -> V: # pyright: ignore
[reportIncompatibleMethodOverride]
- if asyncio.iscoroutinefunction(func):
+ if inspect.iscoroutinefunction(func):
@functools.wraps(func) # type: ignore
async def async_wrapper(*args: Pargs, **kwargs: Pkwargs) -> R: #
pyright: ignore [reportInvalidTypeVarUse]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/opentelemetry_api-1.38.0/src/opentelemetry/version/__init__.py
new/opentelemetry_api-1.39.1/src/opentelemetry/version/__init__.py
--- old/opentelemetry_api-1.38.0/src/opentelemetry/version/__init__.py
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.39.1/src/opentelemetry/version/__init__.py
2020-02-02 01:00:00.000000000 +0100
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "1.38.0"
+__version__ = "1.39.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/opentelemetry_api-1.38.0/tests/attributes/test_attributes.py
new/opentelemetry_api-1.39.1/tests/attributes/test_attributes.py
--- old/opentelemetry_api-1.38.0/tests/attributes/test_attributes.py
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.39.1/tests/attributes/test_attributes.py
2020-02-02 01:00:00.000000000 +0100
@@ -301,3 +301,22 @@
bdict["key"] = "value"
clean_extended_attribute_mock.assert_called_once()
+
+ def test_wsgi_request_conversion_to_string(self):
+ """Test that WSGI request objects are converted to strings when
_clean_extended_attribute is called."""
+
+ class DummyWSGIRequest:
+ def __str__(self):
+ return "<DummyWSGIRequest method=GET path=/example/>"
+
+ wsgi_request = DummyWSGIRequest()
+
+ cleaned_value = _clean_extended_attribute(
+ "request", wsgi_request, None
+ )
+
+ # Verify we get a string back from the cleaner
+ self.assertIsInstance(cleaned_value, str)
+ self.assertEqual(
+ "<DummyWSGIRequest method=GET path=/example/>", cleaned_value
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/opentelemetry_api-1.38.0/tests/propagators/test_propagators.py
new/opentelemetry_api-1.39.1/tests/propagators/test_propagators.py
--- old/opentelemetry_api-1.38.0/tests/propagators/test_propagators.py
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.39.1/tests/propagators/test_propagators.py
2020-02-02 01:00:00.000000000 +0100
@@ -45,7 +45,7 @@
)
# pylint: disable=import-outside-toplevel
- import opentelemetry.propagate
+ import opentelemetry.propagate # noqa: PLC0415
reload(opentelemetry.propagate)
@@ -66,7 +66,7 @@
)
# pylint: disable=import-outside-toplevel
- import opentelemetry.propagate
+ import opentelemetry.propagate # noqa: PLC0415
reload(opentelemetry.propagate)
@@ -89,7 +89,7 @@
)
# pylint: disable=import-outside-toplevel
- import opentelemetry.propagate
+ import opentelemetry.propagate # noqa: PLC0415
reload(opentelemetry.propagate)
@@ -141,7 +141,7 @@
)
# pylint: disable=import-outside-toplevel
- import opentelemetry.propagate
+ import opentelemetry.propagate # noqa: PLC0415
reload(opentelemetry.propagate)
@@ -151,7 +151,7 @@
def test_composite_propagators_error(self):
with self.assertRaises(ValueError) as cm:
# pylint: disable=import-outside-toplevel
- import opentelemetry.propagate
+ import opentelemetry.propagate # noqa: PLC0415
reload(opentelemetry.propagate)