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)
 

Reply via email to