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"