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-04-14 17:48:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-opentelemetry-api (Old)
 and      /work/SRC/openSUSE:Factory/.python-opentelemetry-api.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-opentelemetry-api"

Tue Apr 14 17:48:27 2026 rev:23 rq:1346294 version:1.41.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-opentelemetry-api/python-opentelemetry-api.changes
        2026-03-30 18:31:11.610806423 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-opentelemetry-api.new.21863/python-opentelemetry-api.changes
     2026-04-14 17:48:41.292454030 +0200
@@ -1,0 +2,83 @@
+Sun Apr 12 16:22:06 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 1.41.0:
+  * `opentelemetry-sdk`: Add `host` resource detector support to
+    declarative file configuration via
+    `detection_development.detectors[].host`
+  * `opentelemetry-sdk`: Add `container` resource detector
+    support to declarative file configuration via
+    `detection_development.detectors[].container`, using entry
+    point loading of the `opentelemetry-resource-detector-
+    containerid` contrib package
+  * `opentelemetry-sdk`: Add
+    `create_tracer_provider`/`configure_tracer_provider` to
+    declarative file configuration, enabling TracerProvider
+    instantiation from config files without reading env vars
+  * Enabled the flake8-tidy-import plugins rules for the ruff
+    linter. These rules throw warnings for relative imports in
+    the modules.
+  * `opentelemetry-sdk`: Fix `AttributeError` in
+    `ExplicitBucketHistogramAggregation` when applied to non-
+    Histogram instruments without explicit boundaries
+  * Fix `BatchLogRecordProcessor` default `schedule_delay_millis`
+    from 5000ms to 1000ms to comply with the OTel specification.
+    Note: logs may be exported 5x more frequently by default
+    (e.g. for users who don't explicitly set the
+    `OTEL_BLRP_SCHEDULE_DELAY` env var).
+  * `opentelemetry-sdk`: Add `process` resource detector support
+    to declarative file configuration via
+    `detection_development.detectors[].process`
+  * `opentelemetry-sdk`: Add shared `_parse_headers` helper for
+    declarative config OTLP exporters
+  * `opentelemetry-api`: Replace a broad exception in attribute
+    cleaning tests to satisfy pylint in the `lint-opentelemetry-
+    api` CI job
+  * `opentelemetry-sdk`: Add
+    `create_meter_provider`/`configure_meter_provider` to
+    declarative file configuration, enabling MeterProvider
+    instantiation from config files without reading env vars
+  * `opentelemetry-sdk`: Add `create_resource` and
+    `create_propagator`/`configure_propagator` to declarative
+    file configuration, enabling Resource and propagator
+    instantiation from config files without reading env vars
+  * `opentelemetry-sdk`: Map Python `CRITICAL` log level to OTel
+    `FATAL` severity text per the specification
+  * `opentelemetry-sdk`: Add file configuration support with
+    YAML/JSON loading, environment variable substitution, and
+    schema validation against the vendored OTel config JSON
+    schema
+  * Fix intermittent CI failures in `getting-started` and
+    `tracecontext` jobs caused by GitHub git CDN SHA propagation
+    lag by installing contrib packages from the already-checked-
+    out local copy instead of a second git clone
+  * `opentelemetry-sdk`: fix type annotations on `MetricReader`
+    and related types
+  * `opentelemetry-sdk`: implement log creation metric
+  * `opentelemetry-sdk`: implement metric reader metrics
+  * `opentelemetry-sdk`: implement processor metrics
+  * `opentelemetry-sdk`: upgrade vendored OTel configuration
+    schema from v1.0.0-rc.3 to v1.0.0
+  * improve check-links ci job
+  * Resolve some Pyright type errors in Span/ReadableSpan and
+    utility stubs
+  * `opentelemetry-exporter-prometheus`: Fix metric name prefix
+  * `opentelemetry-api`, `opentelemetry-sdk`: Add deepcopy
+    support for `BoundedAttributes` and `BoundedList`
+  * `opentelemetry-proto-json`, `opentelemetry-codegen-json`:
+    Implement custom protoc plugin to generate OTLP JSON class
+    definitions
+  * Add configurable `max_export_batch_size` to OTLP HTTP metrics
+    exporter
+  * `opentelemetry-sdk`: Implement experimental Meter
+    configurator
+  * `opentelemetry-exporter-otlp-proto-http`: use consistent
+    protobuf for export request
+  * `opentelemetry-sdk`: cache TracerConfig into the tracer, this
+    changes an internal interface. Only one Tracer with the same
+    instrumentation scope will be created
+  * Redo OTLPMetricExporter unit tests of `max_export_batch_size`
+    to use real `export`
+  * `opentelemetry-sdk`: Implement experimental Logger
+    configurator
+
+-------------------------------------------------------------------

Old:
----
  opentelemetry_api-1.40.0.tar.gz

New:
----
  opentelemetry_api-1.41.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-opentelemetry-api.spec ++++++
--- /var/tmp/diff_new_pack.xi70Jv/_old  2026-04-14 17:48:42.084486768 +0200
+++ /var/tmp/diff_new_pack.xi70Jv/_new  2026-04-14 17:48:42.088486934 +0200
@@ -27,31 +27,25 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-opentelemetry-api%{?psuffix}
-Version:        1.40.0
+Version:        1.41.0
 Release:        0
 Summary:        OpenTelemetry Python API
 License:        Apache-2.0
 URL:            
https://github.com/open-telemetry/opentelemetry-python/tree/master/opentelemetry-api
 Source:         
https://files.pythonhosted.org/packages/source/o/opentelemetry-api/opentelemetry_api-%{version}.tar.gz
-BuildRequires:  %{python_module Deprecated}
 BuildRequires:  %{python_module hatchling}
-BuildRequires:  %{python_module importlib-metadata}
+BuildRequires:  %{python_module importlib-metadata >= 6.0}
 BuildRequires:  %{python_module pip}
+BuildRequires:  %{python_module typing-extensions >= 4.5.0}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-# Note: If python3-aiocontextvars is not available, the error message will
-# be confusing: https://github.com/openSUSE/obs-build/issues/685
-BuildRequires:  (python3-aiocontextvars if python3-base < 3.7)
 BuildArch:      noarch
-Requires:       python-Deprecated
-Requires:       python-importlib-metadata
-%if %{python_version_nodots} < 37
-Requires:       python-aiocontextvars
-%endif
+Requires:       python-importlib-metadata >= 6.0
+Requires:       python-typing-extensions >= 4.5.0
 %if %{with test}
 BuildRequires:  %{python_module opentelemetry-api = %{version}}
-BuildRequires:  %{python_module opentelemetry-test-utils = 0.61b0}
+BuildRequires:  %{python_module opentelemetry-test-utils = 0.62b0}
 BuildRequires:  %{python_module pytest}
 %endif
 %python_subpackages

++++++ opentelemetry_api-1.40.0.tar.gz -> opentelemetry_api-1.41.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentelemetry_api-1.40.0/PKG-INFO 
new/opentelemetry_api-1.41.0/PKG-INFO
--- old/opentelemetry_api-1.40.0/PKG-INFO       2020-02-02 01:00:00.000000000 
+0100
+++ new/opentelemetry_api-1.41.0/PKG-INFO       2020-02-02 01:00:00.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: opentelemetry-api
-Version: 1.40.0
+Version: 1.41.0
 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.40.0/src/opentelemetry/_logs/_internal/__init__.py 
new/opentelemetry_api-1.41.0/src/opentelemetry/_logs/_internal/__init__.py
--- old/opentelemetry_api-1.40.0/src/opentelemetry/_logs/_internal/__init__.py  
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.41.0/src/opentelemetry/_logs/_internal/__init__.py  
2020-02-02 01:00:00.000000000 +0100
@@ -89,7 +89,7 @@
         observed_timestamp: Optional[int] = None,
         trace_id: Optional[int] = None,
         span_id: Optional[int] = None,
-        trace_flags: Optional["TraceFlags"] = None,
+        trace_flags: Optional[TraceFlags] = None,
         severity_text: Optional[str] = None,
         severity_number: Optional[SeverityNumber] = None,
         body: AnyValue = None,
@@ -104,7 +104,7 @@
         context: Optional[Context] = None,
         trace_id: Optional[int] = None,
         span_id: Optional[int] = None,
-        trace_flags: Optional["TraceFlags"] = None,
+        trace_flags: Optional[TraceFlags] = None,
         severity_text: Optional[str] = None,
         severity_number: Optional[SeverityNumber] = None,
         body: AnyValue = None,
@@ -430,7 +430,7 @@
     logger_provider: Optional[LoggerProvider] = None,
     schema_url: Optional[str] = None,
     attributes: Optional[_ExtendedAttributes] = None,
-) -> "Logger":
+) -> Logger:
     """Returns a `Logger` for use within a python process.
 
     This function is a convenience wrapper for
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_api-1.40.0/src/opentelemetry/attributes/__init__.py 
new/opentelemetry_api-1.41.0/src/opentelemetry/attributes/__init__.py
--- old/opentelemetry_api-1.40.0/src/opentelemetry/attributes/__init__.py       
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.41.0/src/opentelemetry/attributes/__init__.py       
2020-02-02 01:00:00.000000000 +0100
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import copy
 import logging
 import threading
 from collections import OrderedDict
@@ -36,6 +37,13 @@
 )
 
 
+# TODO: Remove this workaround and revert to the simpler implementation
+# once Python 3.9 support is dropped (planned around May 2026).
+# This exists only to avoid issues caused by deprecated behavior in 3.9.
+def _type_name(t):
+    return getattr(t, "__name__", getattr(t, "_name", repr(t)))
+
+
 _logger = logging.getLogger(__name__)
 
 
@@ -190,7 +198,7 @@
     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 "
+            f"Expected one of {[_type_name(valid_type) for valid_type in 
_VALID_ANY_VALUE_TYPES]} or a "
             "sequence of those types",
         )
 
@@ -318,5 +326,20 @@
     def __len__(self) -> int:
         return len(self._dict)
 
+    def __deepcopy__(self, memo: dict) -> "BoundedAttributes":
+        copy_ = BoundedAttributes(
+            maxlen=self.maxlen,
+            immutable=self._immutable,
+            max_value_len=self.max_value_len,
+            extended_attributes=self._extended_attributes,
+        )
+        memo[id(self)] = copy_
+        with self._lock:
+            # Assign _dict directly to avoid re-cleaning already clean values
+            # and to bypass the immutability guard in __setitem__
+            copy_._dict = copy.deepcopy(self._dict, memo)
+            copy_.dropped = self.dropped
+        return copy_
+
     def copy(self):  # type: ignore
         return self._dict.copy()  # type: ignore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_api-1.40.0/src/opentelemetry/context/__init__.py 
new/opentelemetry_api-1.41.0/src/opentelemetry/context/__init__.py
--- old/opentelemetry_api-1.40.0/src/opentelemetry/context/__init__.py  
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.41.0/src/opentelemetry/context/__init__.py  
2020-02-02 01:00:00.000000000 +0100
@@ -82,7 +82,7 @@
     return keyname + "-" + str(uuid4())
 
 
-def get_value(key: str, context: typing.Optional[Context] = None) -> "object":
+def get_value(key: str, context: typing.Optional[Context] = None) -> object:
     """To access the local state of a concern, the RuntimeContext API
     provides a function which takes a context and a key as input,
     and returns a value.
@@ -98,7 +98,7 @@
 
 
 def set_value(
-    key: str, value: "object", context: typing.Optional[Context] = None
+    key: str, value: object, context: typing.Optional[Context] = None
 ) -> Context:
     """To record the local state of a cross-cutting concern, the
     RuntimeContext API provides a function which takes a context, a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_api-1.40.0/src/opentelemetry/version/__init__.py 
new/opentelemetry_api-1.41.0/src/opentelemetry/version/__init__.py
--- old/opentelemetry_api-1.40.0/src/opentelemetry/version/__init__.py  
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.41.0/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.40.0"
+__version__ = "1.41.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_api-1.40.0/tests/attributes/test_attributes.py 
new/opentelemetry_api-1.41.0/tests/attributes/test_attributes.py
--- old/opentelemetry_api-1.40.0/tests/attributes/test_attributes.py    
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_api-1.41.0/tests/attributes/test_attributes.py    
2020-02-02 01:00:00.000000000 +0100
@@ -14,13 +14,16 @@
 
 # type: ignore
 
+import copy
 import unittest
+import unittest.mock
 from typing import MutableSequence
 
 from opentelemetry.attributes import (
     BoundedAttributes,
     _clean_attribute,
     _clean_extended_attribute,
+    _clean_extended_attribute_value,
 )
 
 
@@ -320,3 +323,38 @@
         self.assertEqual(
             "<DummyWSGIRequest method=GET path=/example/>", cleaned_value
         )
+
+    def test_invalid_anyvalue_type_raises_typeerror(self):
+        class BadStr:
+            def __str__(self):
+                raise RuntimeError("boom")
+
+        with self.assertRaises(TypeError):
+            _clean_extended_attribute_value(BadStr(), None)
+
+    def test_deepcopy(self):
+        bdict = BoundedAttributes(4, self.base, immutable=False)
+        bdict.dropped = 10
+        bdict_copy = copy.deepcopy(bdict)
+
+        for key in bdict_copy:
+            self.assertEqual(bdict_copy[key], bdict[key])
+
+        self.assertEqual(bdict_copy.dropped, bdict.dropped)
+        self.assertEqual(bdict_copy.maxlen, bdict.maxlen)
+        self.assertEqual(bdict_copy.max_value_len, bdict.max_value_len)
+
+        bdict_copy["name"] = "Bob"
+        self.assertNotEqual(bdict_copy["name"], bdict["name"])
+
+        bdict["age"] = 99
+        self.assertNotEqual(bdict["age"], bdict_copy["age"])
+
+    def test_deepcopy_preserves_immutability(self):
+        bdict = BoundedAttributes(
+            maxlen=4, attributes=self.base, immutable=True
+        )
+        bdict_copy = copy.deepcopy(bdict)
+
+        with self.assertRaises(TypeError):
+            bdict_copy["invalid"] = "invalid"

Reply via email to