Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-opentelemetry-instrumentation 
for openSUSE:Factory checked in at 2026-03-30 18:30:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-opentelemetry-instrumentation (Old)
 and      
/work/SRC/openSUSE:Factory/.python-opentelemetry-instrumentation.new.1999 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-opentelemetry-instrumentation"

Mon Mar 30 18:30:50 2026 rev:8 rq:1343637 version:0.61b0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-opentelemetry-instrumentation/python-opentelemetry-instrumentation.changes
        2026-01-06 17:43:57.480085459 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-opentelemetry-instrumentation.new.1999/python-opentelemetry-instrumentation.changes
      2026-03-30 18:33:51.193464572 +0200
@@ -1,0 +2,6 @@
+Mon Mar 23 22:11:11 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.61b0:
+  * Add Python 3.14 support
+
+-------------------------------------------------------------------

Old:
----
  opentelemetry_instrumentation-0.60b0.tar.gz

New:
----
  opentelemetry_instrumentation-0.61b0.tar.gz

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

Other differences:
------------------
++++++ python-opentelemetry-instrumentation.spec ++++++
--- /var/tmp/diff_new_pack.jPUZzT/_old  2026-03-30 18:33:51.861492501 +0200
+++ /var/tmp/diff_new_pack.jPUZzT/_new  2026-03-30 18:33:51.865492668 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-opentelemetry-instrumentation
-Version:        0.60b0
+Version:        0.61b0
 Release:        0
 Summary:        Instrumentation Tools & Auto Instrumentation for OpenTelemetry 
Python
 License:        Apache-2.0

++++++ opentelemetry_instrumentation-0.60b0.tar.gz -> 
opentelemetry_instrumentation-0.61b0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentelemetry_instrumentation-0.60b0/PKG-INFO 
new/opentelemetry_instrumentation-0.61b0/PKG-INFO
--- old/opentelemetry_instrumentation-0.60b0/PKG-INFO   2020-02-02 
01:00:00.000000000 +0100
+++ new/opentelemetry_instrumentation-0.61b0/PKG-INFO   2020-02-02 
01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: opentelemetry-instrumentation
-Version: 0.60b0
+Version: 0.61b0
 Summary: Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python
 Project-URL: Homepage, 
https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/opentelemetry-instrumentation
 Project-URL: Repository, 
https://github.com/open-telemetry/opentelemetry-python-contrib
@@ -17,9 +17,10 @@
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
 Requires-Python: >=3.9
 Requires-Dist: opentelemetry-api~=1.4
-Requires-Dist: opentelemetry-semantic-conventions==0.60b0
+Requires-Dist: opentelemetry-semantic-conventions==0.61b0
 Requires-Dist: packaging>=18.0
 Requires-Dist: wrapt<2.0.0,>=1.0.0
 Description-Content-Type: text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentelemetry_instrumentation-0.60b0/pyproject.toml 
new/opentelemetry_instrumentation-0.61b0/pyproject.toml
--- old/opentelemetry_instrumentation-0.60b0/pyproject.toml     2020-02-02 
01:00:00.000000000 +0100
+++ new/opentelemetry_instrumentation-0.61b0/pyproject.toml     2020-02-02 
01:00:00.000000000 +0100
@@ -23,10 +23,11 @@
   "Programming Language :: Python :: 3.11",
   "Programming Language :: Python :: 3.12",
   "Programming Language :: Python :: 3.13",
+  "Programming Language :: Python :: 3.14",
 ]
 dependencies = [
   "opentelemetry-api ~= 1.4",
-  "opentelemetry-semantic-conventions == 0.60b0",
+  "opentelemetry-semantic-conventions == 0.61b0",
   "wrapt >= 1.0.0, < 2.0.0",
   "packaging >= 18.0",
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation-0.60b0/src/opentelemetry/instrumentation/_semconv.py
 
new/opentelemetry_instrumentation-0.61b0/src/opentelemetry/instrumentation/_semconv.py
--- 
old/opentelemetry_instrumentation-0.60b0/src/opentelemetry/instrumentation/_semconv.py
      2020-02-02 01:00:00.000000000 +0100
+++ 
new/opentelemetry_instrumentation-0.61b0/src/opentelemetry/instrumentation/_semconv.py
      2020-02-02 01:00:00.000000000 +0100
@@ -12,11 +12,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from __future__ import annotations
+
 import os
 import threading
 from enum import Enum
+from typing import Container, Mapping, MutableMapping
 
 from opentelemetry.instrumentation.utils import http_status_to_status_code
+from opentelemetry.semconv._incubating.attributes.db_attributes import (
+    DB_NAME,
+    DB_STATEMENT,
+    DB_SYSTEM,
+    DB_USER,
+)
 from opentelemetry.semconv._incubating.attributes.http_attributes import (
     HTTP_FLAVOR,
     HTTP_HOST,
@@ -39,6 +48,11 @@
     CLIENT_ADDRESS,
     CLIENT_PORT,
 )
+from opentelemetry.semconv.attributes.db_attributes import (
+    DB_NAMESPACE,
+    DB_QUERY_TEXT,
+    DB_SYSTEM_NAME,
+)
 from opentelemetry.semconv.attributes.error_attributes import ERROR_TYPE
 from opentelemetry.semconv.attributes.http_attributes import (
     HTTP_REQUEST_METHOD,
@@ -63,7 +77,9 @@
     USER_AGENT_ORIGINAL,
 )
 from opentelemetry.semconv.schemas import Schemas
+from opentelemetry.trace import Span
 from opentelemetry.trace.status import Status, StatusCode
+from opentelemetry.util.types import AttributeValue
 
 # Values defined in milliseconds
 HTTP_DURATION_HISTOGRAM_BUCKETS_OLD = (
@@ -259,11 +275,11 @@
 
 
 def _filter_semconv_duration_attrs(
-    attrs,
-    old_attrs,
-    new_attrs,
-    sem_conv_opt_in_mode=_StabilityMode.DEFAULT,
-):
+    attrs: Mapping[str, AttributeValue],
+    old_attrs: Container[AttributeValue],
+    new_attrs: Container[AttributeValue],
+    sem_conv_opt_in_mode: _StabilityMode = _StabilityMode.DEFAULT,
+) -> dict[str, AttributeValue]:
     filtered_attrs = {}
     # duration is two different metrics depending on sem_conv_opt_in_mode, so 
no DUP attributes
     allowed_attributes = (
@@ -276,11 +292,11 @@
 
 
 def _filter_semconv_active_request_count_attr(
-    attrs,
-    old_attrs,
-    new_attrs,
-    sem_conv_opt_in_mode=_StabilityMode.DEFAULT,
-):
+    attrs: Mapping[str, AttributeValue],
+    old_attrs: Container[AttributeValue],
+    new_attrs: Container[AttributeValue],
+    sem_conv_opt_in_mode: _StabilityMode = _StabilityMode.DEFAULT,
+) -> dict[str, AttributeValue]:
     filtered_attrs = {}
     if _report_old(sem_conv_opt_in_mode):
         for key, val in attrs.items():
@@ -293,12 +309,20 @@
     return filtered_attrs
 
 
-def set_string_attribute(result, key, value):
+def set_string_attribute(
+    result: MutableMapping[str, AttributeValue],
+    key: str,
+    value: AttributeValue,
+) -> None:
     if value:
         result[key] = value
 
 
-def set_int_attribute(result, key, value):
+def set_int_attribute(
+    result: MutableMapping[str, AttributeValue],
+    key: str,
+    value: AttributeValue,
+) -> None:
     if value:
         try:
             result[key] = int(value)
@@ -306,7 +330,12 @@
             return
 
 
-def _set_http_method(result, original, normalized, sem_conv_opt_in_mode):
+def _set_http_method(
+    result: MutableMapping[str, AttributeValue],
+    original: str,
+    normalized: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     original = original.strip()
     normalized = normalized.strip()
     # See 
https://github.com/open-telemetry/semantic-conventions/blob/main/docs/http/http-spans.md#common-attributes
@@ -320,35 +349,55 @@
         set_string_attribute(result, HTTP_REQUEST_METHOD, normalized)
 
 
-def _set_http_status_code(result, code, sem_conv_opt_in_mode):
+def _set_http_status_code(
+    result: MutableMapping[str, AttributeValue],
+    code: str | int,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_int_attribute(result, HTTP_STATUS_CODE, code)
     if _report_new(sem_conv_opt_in_mode):
         set_int_attribute(result, HTTP_RESPONSE_STATUS_CODE, code)
 
 
-def _set_http_url(result, url, sem_conv_opt_in_mode):
+def _set_http_url(
+    result: MutableMapping[str, AttributeValue],
+    url: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, HTTP_URL, url)
     if _report_new(sem_conv_opt_in_mode):
         set_string_attribute(result, URL_FULL, url)
 
 
-def _set_http_scheme(result, scheme, sem_conv_opt_in_mode):
+def _set_http_scheme(
+    result: MutableMapping[str, AttributeValue],
+    scheme: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, HTTP_SCHEME, scheme)
     if _report_new(sem_conv_opt_in_mode):
         set_string_attribute(result, URL_SCHEME, scheme)
 
 
-def _set_http_flavor_version(result, version, sem_conv_opt_in_mode):
+def _set_http_flavor_version(
+    result: MutableMapping[str, AttributeValue],
+    version: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, HTTP_FLAVOR, version)
     if _report_new(sem_conv_opt_in_mode):
         set_string_attribute(result, NETWORK_PROTOCOL_VERSION, version)
 
 
-def _set_http_user_agent(result, user_agent, sem_conv_opt_in_mode):
+def _set_http_user_agent(
+    result: MutableMapping[str, AttributeValue],
+    user_agent: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, HTTP_USER_AGENT, user_agent)
     if _report_new(sem_conv_opt_in_mode):
@@ -358,28 +407,44 @@
 # Client
 
 
-def _set_http_host_client(result, host, sem_conv_opt_in_mode):
+def _set_http_host_client(
+    result: MutableMapping[str, AttributeValue],
+    host: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, HTTP_HOST, host)
     if _report_new(sem_conv_opt_in_mode):
         set_string_attribute(result, SERVER_ADDRESS, host)
 
 
-def _set_http_net_peer_name_client(result, peer_name, sem_conv_opt_in_mode):
+def _set_http_net_peer_name_client(
+    result: MutableMapping[str, AttributeValue],
+    peer_name: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, NET_PEER_NAME, peer_name)
     if _report_new(sem_conv_opt_in_mode):
         set_string_attribute(result, SERVER_ADDRESS, peer_name)
 
 
-def _set_http_peer_port_client(result, port, sem_conv_opt_in_mode):
+def _set_http_peer_port_client(
+    result: MutableMapping[str, AttributeValue],
+    port: str | int,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_int_attribute(result, NET_PEER_PORT, port)
     if _report_new(sem_conv_opt_in_mode):
         set_int_attribute(result, SERVER_PORT, port)
 
 
-def _set_http_network_protocol_version(result, version, sem_conv_opt_in_mode):
+def _set_http_network_protocol_version(
+    result: MutableMapping[str, AttributeValue],
+    version: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, HTTP_FLAVOR, version)
     if _report_new(sem_conv_opt_in_mode):
@@ -389,21 +454,35 @@
 # Server
 
 
-def _set_http_net_host(result, host, sem_conv_opt_in_mode):
+def _set_http_net_host(
+    result: MutableMapping[str, AttributeValue],
+    host: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, NET_HOST_NAME, host)
     if _report_new(sem_conv_opt_in_mode):
         set_string_attribute(result, SERVER_ADDRESS, host)
 
 
-def _set_http_net_host_port(result, port, sem_conv_opt_in_mode):
+def _set_http_net_host_port(
+    result: MutableMapping[str, AttributeValue],
+    port: str | int,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_int_attribute(result, NET_HOST_PORT, port)
     if _report_new(sem_conv_opt_in_mode):
         set_int_attribute(result, SERVER_PORT, port)
 
 
-def _set_http_target(result, target, path, query, sem_conv_opt_in_mode):
+def _set_http_target(
+    result: MutableMapping[str, AttributeValue],
+    target: str,
+    path: str | None,
+    query: str | None,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, HTTP_TARGET, target)
     if _report_new(sem_conv_opt_in_mode):
@@ -413,7 +492,11 @@
             set_string_attribute(result, URL_QUERY, query)
 
 
-def _set_http_host_server(result, host, sem_conv_opt_in_mode):
+def _set_http_host_server(
+    result: MutableMapping[str, AttributeValue],
+    host: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, HTTP_HOST, host)
     if _report_new(sem_conv_opt_in_mode):
@@ -426,7 +509,11 @@
 # net.sock.peer.addr -> client.socket.address for server spans (TODO) AND 
client.address if missing
 # 
https://github.com/open-telemetry/semantic-conventions/blob/v1.21.0/CHANGELOG.md#v1210-2023-07-13
 # 
https://github.com/open-telemetry/semantic-conventions/blob/main/docs/non-normative/http-migration.md#common-attributes-across-http-client-and-server-spans
-def _set_http_peer_ip_server(result, ip, sem_conv_opt_in_mode):
+def _set_http_peer_ip_server(
+    result: MutableMapping[str, AttributeValue],
+    ip: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, NET_PEER_IP, ip)
     if _report_new(sem_conv_opt_in_mode):
@@ -435,28 +522,85 @@
             set_string_attribute(result, CLIENT_ADDRESS, ip)
 
 
-def _set_http_peer_port_server(result, port, sem_conv_opt_in_mode):
+def _set_http_peer_port_server(
+    result: MutableMapping[str, AttributeValue],
+    port: str | int,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_int_attribute(result, NET_PEER_PORT, port)
     if _report_new(sem_conv_opt_in_mode):
         set_int_attribute(result, CLIENT_PORT, port)
 
 
-def _set_http_net_peer_name_server(result, name, sem_conv_opt_in_mode):
+def _set_http_net_peer_name_server(
+    result: MutableMapping[str, AttributeValue],
+    name: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
     if _report_old(sem_conv_opt_in_mode):
         set_string_attribute(result, NET_PEER_NAME, name)
     if _report_new(sem_conv_opt_in_mode):
         set_string_attribute(result, CLIENT_ADDRESS, name)
 
 
+# Database
+
+
+def _set_db_system(
+    result: MutableMapping[str, AttributeValue],
+    system: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
+    if _report_old(sem_conv_opt_in_mode):
+        set_string_attribute(result, DB_SYSTEM, system)
+    if _report_new(sem_conv_opt_in_mode):
+        set_string_attribute(result, DB_SYSTEM_NAME, system)
+
+
+def _set_db_name(
+    result: MutableMapping[str, AttributeValue],
+    name: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
+    if _report_old(sem_conv_opt_in_mode):
+        set_string_attribute(result, DB_NAME, name)
+    if _report_new(sem_conv_opt_in_mode):
+        set_string_attribute(result, DB_NAMESPACE, name)
+
+
+def _set_db_statement(
+    result: MutableMapping[str, AttributeValue],
+    statement: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
+    if _report_old(sem_conv_opt_in_mode):
+        set_string_attribute(result, DB_STATEMENT, statement)
+    if _report_new(sem_conv_opt_in_mode):
+        set_string_attribute(result, DB_QUERY_TEXT, statement)
+
+
+def _set_db_user(
+    result: MutableMapping[str, AttributeValue],
+    user: str,
+    sem_conv_opt_in_mode: _StabilityMode,
+) -> None:
+    if _report_old(sem_conv_opt_in_mode):
+        set_string_attribute(result, DB_USER, user)
+    # No new attribute - db.user was removed with no replacement
+
+
+# General
+
+
 def _set_status(
-    span,
-    metrics_attributes: dict,
+    span: Span,
+    metrics_attributes: MutableMapping[str, AttributeValue],
     status_code: int,
     status_code_str: str,
     server_span: bool = True,
     sem_conv_opt_in_mode: _StabilityMode = _StabilityMode.DEFAULT,
-):
+) -> None:
     if status_code < 0:
         if _report_new(sem_conv_opt_in_mode):
             metrics_attributes[ERROR_TYPE] = status_code_str
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation-0.60b0/src/opentelemetry/instrumentation/bootstrap_gen.py
 
new/opentelemetry_instrumentation-0.61b0/src/opentelemetry/instrumentation/bootstrap_gen.py
--- 
old/opentelemetry_instrumentation-0.60b0/src/opentelemetry/instrumentation/bootstrap_gen.py
 2020-02-02 01:00:00.000000000 +0100
+++ 
new/opentelemetry_instrumentation-0.61b0/src/opentelemetry/instrumentation/bootstrap_gen.py
 2020-02-02 01:00:00.000000000 +0100
@@ -26,199 +26,199 @@
     },
     {
         "library": "aio_pika >= 7.2.0, < 10.0.0",
-        "instrumentation": "opentelemetry-instrumentation-aio-pika==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-aio-pika==0.61b0",
     },
     {
         "library": "aiohttp ~= 3.0",
-        "instrumentation": 
"opentelemetry-instrumentation-aiohttp-client==0.60b0",
+        "instrumentation": 
"opentelemetry-instrumentation-aiohttp-client==0.61b0",
     },
     {
         "library": "aiohttp ~= 3.0",
-        "instrumentation": 
"opentelemetry-instrumentation-aiohttp-server==0.60b0",
+        "instrumentation": 
"opentelemetry-instrumentation-aiohttp-server==0.61b0",
     },
     {
         "library": "aiokafka >= 0.8, < 1.0",
-        "instrumentation": "opentelemetry-instrumentation-aiokafka==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-aiokafka==0.61b0",
     },
     {
         "library": "aiopg >= 0.13.0, < 2.0.0",
-        "instrumentation": "opentelemetry-instrumentation-aiopg==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-aiopg==0.61b0",
     },
     {
         "library": "asgiref ~= 3.0",
-        "instrumentation": "opentelemetry-instrumentation-asgi==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-asgi==0.61b0",
     },
     {
         "library": "asyncclick ~= 8.0",
-        "instrumentation": "opentelemetry-instrumentation-asyncclick==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-asyncclick==0.61b0",
     },
     {
         "library": "asyncpg >= 0.12.0",
-        "instrumentation": "opentelemetry-instrumentation-asyncpg==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-asyncpg==0.61b0",
     },
     {
         "library": "boto~=2.0",
-        "instrumentation": "opentelemetry-instrumentation-boto==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-boto==0.61b0",
     },
     {
         "library": "boto3 ~= 1.0",
-        "instrumentation": "opentelemetry-instrumentation-boto3sqs==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-boto3sqs==0.61b0",
     },
     {
         "library": "botocore ~= 1.0",
-        "instrumentation": "opentelemetry-instrumentation-botocore==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-botocore==0.61b0",
     },
     {
         "library": "cassandra-driver ~= 3.25",
-        "instrumentation": "opentelemetry-instrumentation-cassandra==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-cassandra==0.61b0",
     },
     {
         "library": "scylla-driver ~= 3.25",
-        "instrumentation": "opentelemetry-instrumentation-cassandra==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-cassandra==0.61b0",
     },
     {
         "library": "celery >= 4.0, < 6.0",
-        "instrumentation": "opentelemetry-instrumentation-celery==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-celery==0.61b0",
     },
     {
         "library": "click >= 8.1.3, < 9.0.0",
-        "instrumentation": "opentelemetry-instrumentation-click==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-click==0.61b0",
     },
     {
-        "library": "confluent-kafka >= 1.8.2, <= 2.11.0",
-        "instrumentation": 
"opentelemetry-instrumentation-confluent-kafka==0.60b0",
+        "library": "confluent-kafka >= 1.8.2, <= 2.13.0",
+        "instrumentation": 
"opentelemetry-instrumentation-confluent-kafka==0.61b0",
     },
     {
-        "library": "django >= 1.10",
-        "instrumentation": "opentelemetry-instrumentation-django==0.60b0",
+        "library": "django >= 2.0",
+        "instrumentation": "opentelemetry-instrumentation-django==0.61b0",
     },
     {
         "library": "elasticsearch >= 6.0",
-        "instrumentation": 
"opentelemetry-instrumentation-elasticsearch==0.60b0",
+        "instrumentation": 
"opentelemetry-instrumentation-elasticsearch==0.61b0",
     },
     {
         "library": "falcon >= 1.4.1, < 5.0.0",
-        "instrumentation": "opentelemetry-instrumentation-falcon==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-falcon==0.61b0",
     },
     {
         "library": "fastapi ~= 0.92",
-        "instrumentation": "opentelemetry-instrumentation-fastapi==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-fastapi==0.61b0",
     },
     {
         "library": "flask >= 1.0",
-        "instrumentation": "opentelemetry-instrumentation-flask==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-flask==0.61b0",
     },
     {
         "library": "grpcio >= 1.42.0",
-        "instrumentation": "opentelemetry-instrumentation-grpc==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-grpc==0.61b0",
     },
     {
         "library": "httpx >= 0.18.0",
-        "instrumentation": "opentelemetry-instrumentation-httpx==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-httpx==0.61b0",
     },
     {
         "library": "jinja2 >= 2.7, < 4.0",
-        "instrumentation": "opentelemetry-instrumentation-jinja2==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-jinja2==0.61b0",
     },
     {
         "library": "kafka-python >= 2.0, < 3.0",
-        "instrumentation": 
"opentelemetry-instrumentation-kafka-python==0.60b0",
+        "instrumentation": 
"opentelemetry-instrumentation-kafka-python==0.61b0",
     },
     {
         "library": "kafka-python-ng >= 2.0, < 3.0",
-        "instrumentation": 
"opentelemetry-instrumentation-kafka-python==0.60b0",
+        "instrumentation": 
"opentelemetry-instrumentation-kafka-python==0.61b0",
     },
     {
         "library": "mysql-connector-python >= 8.0, < 10.0",
-        "instrumentation": "opentelemetry-instrumentation-mysql==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-mysql==0.61b0",
     },
     {
         "library": "mysqlclient < 3",
-        "instrumentation": "opentelemetry-instrumentation-mysqlclient==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-mysqlclient==0.61b0",
     },
     {
         "library": "pika >= 0.12.0",
-        "instrumentation": "opentelemetry-instrumentation-pika==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-pika==0.61b0",
     },
     {
         "library": "psycopg >= 3.1.0",
-        "instrumentation": "opentelemetry-instrumentation-psycopg==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-psycopg==0.61b0",
     },
     {
         "library": "psycopg2 >= 2.7.3.1",
-        "instrumentation": "opentelemetry-instrumentation-psycopg2==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-psycopg2==0.61b0",
     },
     {
         "library": "psycopg2-binary >= 2.7.3.1",
-        "instrumentation": "opentelemetry-instrumentation-psycopg2==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-psycopg2==0.61b0",
     },
     {
         "library": "pymemcache >= 1.3.5, < 5",
-        "instrumentation": "opentelemetry-instrumentation-pymemcache==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-pymemcache==0.61b0",
     },
     {
         "library": "pymongo >= 3.1, < 5.0",
-        "instrumentation": "opentelemetry-instrumentation-pymongo==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-pymongo==0.61b0",
     },
     {
         "library": "pymssql >= 2.1.5, < 3",
-        "instrumentation": "opentelemetry-instrumentation-pymssql==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-pymssql==0.61b0",
     },
     {
         "library": "PyMySQL < 2",
-        "instrumentation": "opentelemetry-instrumentation-pymysql==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-pymysql==0.61b0",
     },
     {
         "library": "pyramid >= 1.7",
-        "instrumentation": "opentelemetry-instrumentation-pyramid==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-pyramid==0.61b0",
     },
     {
         "library": "redis >= 2.6",
-        "instrumentation": "opentelemetry-instrumentation-redis==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-redis==0.61b0",
     },
     {
         "library": "remoulade >= 0.50",
-        "instrumentation": "opentelemetry-instrumentation-remoulade==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-remoulade==0.61b0",
     },
     {
         "library": "requests ~= 2.0",
-        "instrumentation": "opentelemetry-instrumentation-requests==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-requests==0.61b0",
     },
     {
         "library": "sqlalchemy >= 1.0.0, < 2.1.0",
-        "instrumentation": "opentelemetry-instrumentation-sqlalchemy==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-sqlalchemy==0.61b0",
     },
     {
         "library": "starlette >= 0.13",
-        "instrumentation": "opentelemetry-instrumentation-starlette==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-starlette==0.61b0",
     },
     {
         "library": "psutil >= 5",
-        "instrumentation": 
"opentelemetry-instrumentation-system-metrics==0.60b0",
+        "instrumentation": 
"opentelemetry-instrumentation-system-metrics==0.61b0",
     },
     {
         "library": "tornado >= 5.1.1",
-        "instrumentation": "opentelemetry-instrumentation-tornado==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-tornado==0.61b0",
     },
     {
         "library": "tortoise-orm >= 0.17.0",
-        "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.61b0",
     },
     {
         "library": "pydantic >= 1.10.2",
-        "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.61b0",
     },
     {
         "library": "urllib3 >= 1.0.0, < 3.0.0",
-        "instrumentation": "opentelemetry-instrumentation-urllib3==0.60b0",
+        "instrumentation": "opentelemetry-instrumentation-urllib3==0.61b0",
     },
 ]
 default_instrumentations = [
-    "opentelemetry-instrumentation-asyncio==0.60b0",
-    "opentelemetry-instrumentation-dbapi==0.60b0",
-    "opentelemetry-instrumentation-logging==0.60b0",
-    "opentelemetry-instrumentation-sqlite3==0.60b0",
-    "opentelemetry-instrumentation-threading==0.60b0",
-    "opentelemetry-instrumentation-urllib==0.60b0",
-    "opentelemetry-instrumentation-wsgi==0.60b0",
+    "opentelemetry-instrumentation-asyncio==0.61b0",
+    "opentelemetry-instrumentation-dbapi==0.61b0",
+    "opentelemetry-instrumentation-logging==0.61b0",
+    "opentelemetry-instrumentation-sqlite3==0.61b0",
+    "opentelemetry-instrumentation-threading==0.61b0",
+    "opentelemetry-instrumentation-urllib==0.61b0",
+    "opentelemetry-instrumentation-wsgi==0.61b0",
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation-0.60b0/src/opentelemetry/instrumentation/version.py
 
new/opentelemetry_instrumentation-0.61b0/src/opentelemetry/instrumentation/version.py
--- 
old/opentelemetry_instrumentation-0.60b0/src/opentelemetry/instrumentation/version.py
       2020-02-02 01:00:00.000000000 +0100
+++ 
new/opentelemetry_instrumentation-0.61b0/src/opentelemetry/instrumentation/version.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__ = "0.60b0"
+__version__ = "0.61b0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation-0.60b0/tests/test_semconv.py 
new/opentelemetry_instrumentation-0.61b0/tests/test_semconv.py
--- old/opentelemetry_instrumentation-0.60b0/tests/test_semconv.py      
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_instrumentation-0.61b0/tests/test_semconv.py      
2020-02-02 01:00:00.000000000 +0100
@@ -20,9 +20,24 @@
     OTEL_SEMCONV_STABILITY_OPT_IN,
     _OpenTelemetrySemanticConventionStability,
     _OpenTelemetryStabilitySignalType,
+    _set_db_name,
+    _set_db_statement,
+    _set_db_system,
+    _set_db_user,
     _set_status,
     _StabilityMode,
 )
+from opentelemetry.semconv._incubating.attributes.db_attributes import (
+    DB_NAME,
+    DB_STATEMENT,
+    DB_SYSTEM,
+    DB_USER,
+)
+from opentelemetry.semconv.attributes.db_attributes import (
+    DB_NAMESPACE,
+    DB_QUERY_TEXT,
+    DB_SYSTEM_NAME,
+)
 from opentelemetry.trace.status import StatusCode
 
 
@@ -277,3 +292,154 @@
         # Verify status code set for metrics independent of tracing decision
         self.assertIn("http.status_code", metrics_attributes)
         self.assertIn("http.response.status_code", metrics_attributes)
+
+
+class TestOpenTelemetrySemConvStabilityDatabase(TestCase):
+    def test_db_system_default(self):
+        result = {}
+        _set_db_system(
+            result, "postgresql", sem_conv_opt_in_mode=_StabilityMode.DEFAULT
+        )
+        self.assertIn(DB_SYSTEM, result)
+        self.assertEqual(result[DB_SYSTEM], "postgresql")
+        self.assertNotIn(DB_SYSTEM_NAME, result)
+
+    def test_db_system_database_stable(self):
+        result = {}
+        _set_db_system(
+            result, "postgresql", sem_conv_opt_in_mode=_StabilityMode.DATABASE
+        )
+        self.assertNotIn(DB_SYSTEM, result)
+        self.assertIn(DB_SYSTEM_NAME, result)
+        self.assertEqual(result[DB_SYSTEM_NAME], "postgresql")
+
+    def test_db_system_database_dup(self):
+        result = {}
+        _set_db_system(
+            result,
+            "postgresql",
+            sem_conv_opt_in_mode=_StabilityMode.DATABASE_DUP,
+        )
+        self.assertIn(DB_SYSTEM, result)
+        self.assertEqual(result[DB_SYSTEM], "postgresql")
+        self.assertIn(DB_SYSTEM_NAME, result)
+        self.assertEqual(result[DB_SYSTEM_NAME], "postgresql")
+
+    def test_db_system_none_value(self):
+        result = {}
+        _set_db_system(
+            result, None, sem_conv_opt_in_mode=_StabilityMode.DATABASE_DUP
+        )
+        self.assertNotIn(DB_SYSTEM, result)
+        self.assertNotIn(DB_SYSTEM_NAME, result)
+
+    def test_db_name_default(self):
+        result = {}
+        _set_db_name(
+            result, "my_database", sem_conv_opt_in_mode=_StabilityMode.DEFAULT
+        )
+        self.assertIn(DB_NAME, result)
+        self.assertEqual(result[DB_NAME], "my_database")
+        self.assertNotIn(DB_NAMESPACE, result)
+
+    def test_db_name_database_stable(self):
+        result = {}
+        _set_db_name(
+            result, "my_database", sem_conv_opt_in_mode=_StabilityMode.DATABASE
+        )
+        self.assertNotIn(DB_NAME, result)
+        self.assertIn(DB_NAMESPACE, result)
+        self.assertEqual(result[DB_NAMESPACE], "my_database")
+
+    def test_db_name_database_dup(self):
+        result = {}
+        _set_db_name(
+            result,
+            "my_database",
+            sem_conv_opt_in_mode=_StabilityMode.DATABASE_DUP,
+        )
+        self.assertIn(DB_NAME, result)
+        self.assertEqual(result[DB_NAME], "my_database")
+        self.assertIn(DB_NAMESPACE, result)
+        self.assertEqual(result[DB_NAMESPACE], "my_database")
+
+    def test_db_name_none_value(self):
+        result = {}
+        _set_db_name(
+            result, None, sem_conv_opt_in_mode=_StabilityMode.DATABASE_DUP
+        )
+        self.assertNotIn(DB_NAME, result)
+        self.assertNotIn(DB_NAMESPACE, result)
+
+    def test_db_statement_default(self):
+        result = {}
+        _set_db_statement(
+            result,
+            "SELECT * FROM users",
+            sem_conv_opt_in_mode=_StabilityMode.DEFAULT,
+        )
+        self.assertIn(DB_STATEMENT, result)
+        self.assertEqual(result[DB_STATEMENT], "SELECT * FROM users")
+        self.assertNotIn(DB_QUERY_TEXT, result)
+
+    def test_db_statement_database_stable(self):
+        result = {}
+        _set_db_statement(
+            result,
+            "SELECT * FROM users",
+            sem_conv_opt_in_mode=_StabilityMode.DATABASE,
+        )
+        self.assertNotIn(DB_STATEMENT, result)
+        self.assertIn(DB_QUERY_TEXT, result)
+        self.assertEqual(result[DB_QUERY_TEXT], "SELECT * FROM users")
+
+    def test_db_statement_database_dup(self):
+        result = {}
+        _set_db_statement(
+            result,
+            "SELECT * FROM users",
+            sem_conv_opt_in_mode=_StabilityMode.DATABASE_DUP,
+        )
+        self.assertIn(DB_STATEMENT, result)
+        self.assertEqual(result[DB_STATEMENT], "SELECT * FROM users")
+        self.assertIn(DB_QUERY_TEXT, result)
+        self.assertEqual(result[DB_QUERY_TEXT], "SELECT * FROM users")
+
+    def test_db_statement_none_value(self):
+        result = {}
+        _set_db_statement(
+            result, None, sem_conv_opt_in_mode=_StabilityMode.DEFAULT
+        )
+        self.assertNotIn(DB_STATEMENT, result)
+        self.assertNotIn(DB_QUERY_TEXT, result)
+
+    def test_db_user_default(self):
+        result = {}
+        _set_db_user(
+            result, "admin", sem_conv_opt_in_mode=_StabilityMode.DEFAULT
+        )
+        self.assertIn(DB_USER, result)
+        self.assertEqual(result[DB_USER], "admin")
+
+    def test_db_user_database_stable(self):
+        result = {}
+        _set_db_user(
+            result, "admin", sem_conv_opt_in_mode=_StabilityMode.DATABASE
+        )
+        # No new attribute - db.user was removed with no replacement
+        self.assertNotIn(DB_USER, result)
+
+    def test_db_user_database_dup(self):
+        result = {}
+        _set_db_user(
+            result,
+            "admin",
+            sem_conv_opt_in_mode=_StabilityMode.DATABASE_DUP,
+        )
+        self.assertIn(DB_USER, result)
+        self.assertEqual(result[DB_USER], "admin")
+
+    def test_db_user_none_value(self):
+        result = {}
+        _set_db_user(result, None, sem_conv_opt_in_mode=_StabilityMode.DEFAULT)
+        self.assertNotIn(DB_USER, result)

Reply via email to