Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package 
python-opentelemetry-instrumentation-asgi for openSUSE:Factory checked in at 
2026-09-30 16:23:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-opentelemetry-instrumentation-asgi 
(Old)
 and      
/work/SRC/openSUSE:Factory/.python-opentelemetry-instrumentation-asgi.new.1465845
 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-opentelemetry-instrumentation-asgi"

Wed Sep 30 16:23:45 2026 rev:13 rq:1381477 version:0.66b0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-opentelemetry-instrumentation-asgi/python-opentelemetry-instrumentation-asgi.changes
      2026-07-21 22:58:05.520991963 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-opentelemetry-instrumentation-asgi.new.1465845/python-opentelemetry-instrumentation-asgi.changes
 2026-09-30 16:24:33.147103867 +0200
@@ -1,0 +2,110 @@
+Tue Sep 29 10:21:06 UTC 2026 - Nico Krapp <[email protected]>
+
+- Update to 0.66b0
+  * ### Added
+  * opentelemetry-instrumentation-psycopg2, opentelemetry-
+    instrumentation-psycopg: Add sqlcommenter support for
+    instrument_connection (#4267)
+  * opentelemetry-instrumentation-fastapi: Document
+    auto-instrumentation setup and HTTP/WebSocket trace propagation
+    opentelemetry-instrumentation: Include the instrumentation
+    README in API docs (#4555)
+  * opentelemetry-instrumentation-botocore: capture Bedrock prompt
+    cache token usage for converse and converse_stream API (#4615)
+  * opentelemetry-instrumentation-fastapi: advertise inline type
+    annotations (#4685)
+  * opentelemetry-instrumentation-kafka-python: Update kafka python
+    instrumentation to support kafka-python>=3 (#4786)
+  * opentelemetry-instrumentation-mysql: add semantic convention
+    stability opt-in mode tests (#4810)
+  * opentelemetry-instrumentation-aiopg: Add DB client operation
+    duration and returned rows metrics. (#4826)
+  * opentelemetry-instrumentation-httpx: support strict typing
+  * opentelemetry-instrumentation-mysqlclient: add semantic
+    convention stability opt-in mode tests (#4834)
+  * opentelemetry-instrumentation-pymysql: add semantic convention
+    stability opt-in mode tests (#4835)
+  * opentelemetry-instrumentation-sqlite3: add semantic convention
+    stability opt-in mode tests (#4836)
+  * opentelemetry-instrumentation-psycopg: add semantic convention
+    stability opt-in mode tests (#4838)
+  * infra: add validation for changelog file format (#4856)
+  * opentelemetry-instrumentation-aio-pika: bump maximum admissible
+    aio-pika version to 11.0.0 (#4998)
+  * ### Changed
+  * opentelemetry-instrumentation: clarify dependency conflict
+    messages, in logs and in DependencyConflictError, and promote
+    auto-instrumentation version conflict logs to error level
+  * ### Removed
+  * opentelemetry-instrumentation-kafka-python: drop support for
+    the deprecated kafka-python-ng fork now that kafka-python is
+    actively maintained again (#4839)
+  * opentelemetry-instrumentation-kafka-python: remove unused
+    KafkaPropertiesExtractor.extract_send_key and
+    KafkaPropertiesExtractor.extract_send_value helpers (#4858)
+  * opentelemetry-instrumentation-anthropic, opentelemetry-
+    instrumentation-claude-agent-sdk, opentelemetry-
+    instrumentation-langchain, opentelemetry-instrumentation-
+    weaviate: removed from this repository; these instrumentations
+    now live in and are maintained from the opentelemetry-python-
+    genai repository (#4903)
+  * ### Fixed
+  * opentelemetry-instrumentation-aws-lambda: support ALB
+    multiValueHeaders (#4605)
+  * opentelemetry-instrumentation-redis: extract ClusterPipeline
+    commands from _execution_strategy in redis-py 6+ so pipeline
+    span attributes include the queued commands instead of being
+    empty (#4728)
+  * opentelemetry-instrumentation-aiopg: fix connection metadata
+    for manual instrumentation (#4821)
+  * opentelemetry-instrumentation-redis: treat explicit db=None as
+    database index 0 (#4828)
+  * opentelemetry-instrumentation-aws-lambda: use the correct camel
+    case when accessing the SQS message attributes (#4831)
+  * opentelemetry-instrumentation-botocore: Restore PyPy test
+    coverage. (#4841)
+  * opentelemetry-instrumentation-botocore: don't emit error status
+    on 3xx ClientError responses (#4851)
+  * opentelemetry-instrumentation-kafka-python: record the actual
+    messaging.kafka.partition read back from the producer send()
+    future, instead of a pre-computed estimate that did not match
+    the delivered partition for randomly-partitioned messages
+  * opentelemetry-instrumentation-logging: Promote otel.event.name
+    to LogRecord.event_name in _translate (#4864)
+  * opentelemetry-instrumentation-grpc: respect suppressed
+    instrumentation in server interceptors (#4870)
+  * opentelemetry-instrumentation-logging: Import code_attributes
+    from stable semconv package (#4873)
+  * opentelemetry-instrumentation-asyncio: fix to_thread
+    instrumentation so spans and duration metrics measure the
+    actual function execution instead of ending immediately,
+    repeated calls of the same function are all recorded instead of
+    only the first one, and failures are recorded with the same
+    state values (exception, timeout, cancelled) as the coroutine
+    and future paths; the AsyncioInstrumentor.trace_to_thread
+    method is renamed to AsyncioInstrumentor.wrap_to_thread_func to
+    reflect that it now returns a wrapper (#4901)
+  * opentelemetry-instrumentation-logging: fix documented name of
+    the code attributes env var to OTEL_PYTHON_LOG_CODE_ATTRIBUTES
+  * opentelemetry-instrumentation-psycopg: avoid IndexError in
+    get_operation_name for comment-only or whitespace-only Composed
+    statements (#4936)
+  * opentelemetry-instrumentation-psycopg2: avoid IndexError in
+    get_operation_name for comment-only or whitespace-only
+    statements (#4942)
+  * opentelemetry-instrumentation-sqlalchemy: avoid IndexError in
+    _operation_name for comment-only or whitespace-only statements
+  * opentelemetry-instrumentation-mysql: support mysql-connector-
+    python 26.7.0 and later (#4951)
+  * opentelemetry-util-http: stop _parse_url_query raising on
+    unparsable urls (#4965)
+  * opentelemetry-instrumentation-asyncio: fix metric name and
+    future example in module docs (#5083)
+  * opentelemetry-instrumentation-pymemcache: honor instrumentation
+    suppression (#5086)
+  * opentelemetry-instrumentation-asyncpg: honor instrumentation
+    suppression (#5087)
+  * opentelemetry-propagator-ot-trace: cap ot-baggage-* entries on
+    extract and inject (#5098)
+
+-------------------------------------------------------------------

Old:
----
  opentelemetry_instrumentation_asgi-0.64b0.tar.gz

New:
----
  opentelemetry_instrumentation_asgi-0.66b0.tar.gz

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

Other differences:
------------------
++++++ python-opentelemetry-instrumentation-asgi.spec ++++++
--- /var/tmp/diff_new_pack.z2aom5/_old  2026-09-30 16:24:33.714127477 +0200
+++ /var/tmp/diff_new_pack.z2aom5/_new  2026-09-30 16:24:33.715127519 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-opentelemetry-instrumentation-asgi%{?psuffix}
-Version:        0.64b0
+Version:        0.66b0
 Release:        0
 Summary:        ASGI instrumentation for OpenTelemetry
 License:        Apache-2.0

++++++ opentelemetry_instrumentation_asgi-0.64b0.tar.gz -> 
opentelemetry_instrumentation_asgi-0.66b0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentelemetry_instrumentation_asgi-0.64b0/PKG-INFO 
new/opentelemetry_instrumentation_asgi-0.66b0/PKG-INFO
--- old/opentelemetry_instrumentation_asgi-0.64b0/PKG-INFO      2020-02-02 
01:00:00.000000000 +0100
+++ new/opentelemetry_instrumentation_asgi-0.66b0/PKG-INFO      2020-02-02 
01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.4
+Metadata-Version: 2.5
 Name: opentelemetry-instrumentation-asgi
-Version: 0.64b0
+Version: 0.66b0
 Summary: ASGI instrumentation for OpenTelemetry
 Project-URL: Homepage, 
https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation/opentelemetry-instrumentation-asgi
 Project-URL: Repository, 
https://github.com/open-telemetry/opentelemetry-python-contrib
@@ -20,9 +20,9 @@
 Requires-Python: >=3.10
 Requires-Dist: asgiref~=3.0
 Requires-Dist: opentelemetry-api~=1.12
-Requires-Dist: opentelemetry-instrumentation==0.64b0
-Requires-Dist: opentelemetry-semantic-conventions==0.64b0
-Requires-Dist: opentelemetry-util-http==0.64b0
+Requires-Dist: opentelemetry-instrumentation==0.66b0
+Requires-Dist: opentelemetry-semantic-conventions==0.66b0
+Requires-Dist: opentelemetry-util-http==0.66b0
 Provides-Extra: instruments
 Requires-Dist: asgiref~=3.0; extra == 'instruments'
 Description-Content-Type: text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation_asgi-0.64b0/pyproject.toml 
new/opentelemetry_instrumentation_asgi-0.66b0/pyproject.toml
--- old/opentelemetry_instrumentation_asgi-0.64b0/pyproject.toml        
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_instrumentation_asgi-0.66b0/pyproject.toml        
2020-02-02 01:00:00.000000000 +0100
@@ -27,9 +27,9 @@
 dependencies = [
   "asgiref ~= 3.0",
   "opentelemetry-api ~= 1.12",
-  "opentelemetry-instrumentation == 0.64b0",
-  "opentelemetry-semantic-conventions == 0.64b0",
-  "opentelemetry-util-http == 0.64b0",
+  "opentelemetry-instrumentation == 0.66b0",
+  "opentelemetry-semantic-conventions == 0.66b0",
+  "opentelemetry-util-http == 0.66b0",
 ]
 
 [project.optional-dependencies]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation_asgi-0.64b0/src/opentelemetry/instrumentation/asgi/__init__.py
 
new/opentelemetry_instrumentation_asgi-0.66b0/src/opentelemetry/instrumentation/asgi/__init__.py
--- 
old/opentelemetry_instrumentation_asgi-0.64b0/src/opentelemetry/instrumentation/asgi/__init__.py
    2020-02-02 01:00:00.000000000 +0100
+++ 
new/opentelemetry_instrumentation_asgi-0.66b0/src/opentelemetry/instrumentation/asgi/__init__.py
    2020-02-02 01:00:00.000000000 +0100
@@ -17,10 +17,12 @@
     app = Quart(__name__)
     app.asgi_app = OpenTelemetryMiddleware(app.asgi_app)
 
+
     @app.route("/")
     async def hello():
         return "Hello!"
 
+
     if __name__ == "__main__":
         app.run(debug=True)
 
@@ -36,7 +38,7 @@
     from django.core.asgi import get_asgi_application
     from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
 
-    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'asgi_example.settings')
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "asgi_example.settings")
 
     application = get_asgi_application()
     application = OpenTelemetryMiddleware(application)
@@ -75,33 +77,47 @@
     from asgiref.typing import Scope, ASGIReceiveEvent, ASGISendEvent
     from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
 
+
     async def application(scope: Scope, receive: ASGIReceiveEvent, send: 
ASGISendEvent):
-        await send({
-            'type': 'http.response.start',
-            'status': 200,
-            'headers': [
-                [b'content-type', b'text/plain'],
-            ],
-        })
-
-        await send({
-            'type': 'http.response.body',
-            'body': b'Hello, world!',
-        })
+        await send(
+            {
+                "type": "http.response.start",
+                "status": 200,
+                "headers": [
+                    [b"content-type", b"text/plain"],
+                ],
+            }
+        )
+
+        await send(
+            {
+                "type": "http.response.body",
+                "body": b"Hello, world!",
+            }
+        )
+
 
     def server_request_hook(span: Span, scope: Scope):
         if span and span.is_recording():
             span.set_attribute("custom_user_attribute_from_request_hook", 
"some-value")
 
+
     def client_request_hook(span: Span, scope: Scope, message: dict[str, Any]):
         if span and span.is_recording():
             
span.set_attribute("custom_user_attribute_from_client_request_hook", 
"some-value")
 
+
     def client_response_hook(span: Span, scope: Scope, message: dict[str, 
Any]):
         if span and span.is_recording():
             span.set_attribute("custom_user_attribute_from_response_hook", 
"some-value")
 
-    OpenTelemetryMiddleware(application, 
server_request_hook=server_request_hook, 
client_request_hook=client_request_hook, 
client_response_hook=client_response_hook)
+
+    OpenTelemetryMiddleware(
+        application,
+        server_request_hook=server_request_hook,
+        client_request_hook=client_request_hook,
+        client_response_hook=client_response_hook,
+    )
 
 Capture HTTP request and response headers
 *****************************************
@@ -202,9 +218,10 @@
 import typing
 import urllib
 from collections import defaultdict
+from collections.abc import Awaitable, Callable
 from functools import wraps
 from timeit import default_timer
-from typing import Any, Awaitable, Callable, DefaultDict, Tuple
+from typing import Any
 
 from asgiref.compatibility import guarantee_single_callable
 
@@ -240,7 +257,7 @@
     ClientResponseHook,
     ServerRequestHook,
 )
-from opentelemetry.instrumentation.asgi.version import __version__  # noqa
+from opentelemetry.instrumentation.asgi.version import __version__
 from opentelemetry.instrumentation.propagators import (
     get_global_response_propagator,
 )
@@ -286,9 +303,7 @@
 
 
 class ASGIGetter(Getter[dict]):
-    def get(
-        self, carrier: dict, key: str
-    ) -> typing.Optional[typing.List[str]]:
+    def get(self, carrier: dict, key: str) -> list[str] | None:
         """Getter implementation to retrieve a HTTP header value from the ASGI
         scope.
 
@@ -306,15 +321,13 @@
         # ASGI header keys are in lower case
         key = key.lower()
         decoded = [
-            _decode_header_item(_value)
-            for (_key, _value) in headers
-            if _decode_header_item(_key).lower() == key
+            _decode_header_item(_value) for (_key, _value) in headers if 
_decode_header_item(_key).lower() == key
         ]
         if not decoded:
             return None
         return decoded
 
-    def keys(self, carrier: dict) -> typing.List[str]:
+    def keys(self, carrier: dict) -> list[str]:
         headers = carrier.get("headers") or []
         return [_decode_header_item(_key) for (_key, _value) in headers]
 
@@ -345,9 +358,7 @@
 
 
 # pylint: disable=too-many-branches
-def collect_request_attributes(
-    scope, sem_conv_opt_in_mode=_StabilityMode.DEFAULT
-):
+def collect_request_attributes(scope, 
sem_conv_opt_in_mode=_StabilityMode.DEFAULT):
     """Collects HTTP request attributes from the ASGI scope and returns a
     dictionary to be used as span creation attributes."""
     server_host, port, http_url = get_host_port_url_tuple(scope)
@@ -370,9 +381,7 @@
         _set_http_flavor_version(result, flavor, sem_conv_opt_in_mode)
     path = scope.get("path")
     if path:
-        _set_http_target(
-            result, path, path, query_string, sem_conv_opt_in_mode
-        )
+        _set_http_target(result, path, path, query_string, 
sem_conv_opt_in_mode)
     if http_url:
         if _report_old(sem_conv_opt_in_mode):
             _set_http_url(
@@ -398,9 +407,7 @@
         user_agent_raw = http_user_agent[0]
         user_agent_value = normalize_user_agent(user_agent_raw)
         if user_agent_value:
-            _set_http_user_agent(
-                result, user_agent_value, sem_conv_opt_in_mode
-            )
+            _set_http_user_agent(result, user_agent_value, 
sem_conv_opt_in_mode)
 
         # Check for synthetic user agent type
         synthetic_type = detect_synthetic_user_agent(user_agent_value)
@@ -408,12 +415,8 @@
             result[USER_AGENT_SYNTHETIC_TYPE] = synthetic_type
 
     if "client" in scope and scope["client"] is not None:
-        _set_http_peer_ip_server(
-            result, scope.get("client")[0], sem_conv_opt_in_mode
-        )
-        _set_http_peer_port_server(
-            result, scope.get("client")[1], sem_conv_opt_in_mode
-        )
+        _set_http_peer_ip_server(result, scope.get("client")[0], 
sem_conv_opt_in_mode)
+        _set_http_peer_port_server(result, scope.get("client")[1], 
sem_conv_opt_in_mode)
 
     # remove None values
     result = {k: v for k, v in result.items() if v is not None}
@@ -433,14 +436,12 @@
     Refer to semantic conventions:
      - 
https://github.com/open-telemetry/semantic-conventions/blob/main/docs/http/http-spans.md#http-server-span
     """
-    headers: DefaultDict[str, list[str]] = defaultdict(list)
+    headers: defaultdict[str, list[str]] = defaultdict(list)
     raw_headers = scope_or_response_message.get("headers")
     if raw_headers:
         for key, value in raw_headers:
             # Decode headers before processing.
-            headers[_decode_header_item(key)].append(
-                _decode_header_item(value)
-            )
+            
headers[_decode_header_item(key)].append(_decode_header_item(value))
 
     return sanitize.sanitize_header_values(
         headers,
@@ -503,7 +504,7 @@
     )
 
 
-def get_default_span_details(scope: dict) -> Tuple[str, dict]:
+def get_default_span_details(scope: dict) -> tuple[str, dict]:
     """
     Default span name is the HTTP method and URL path, or just the method.
     https://github.com/open-telemetry/opentelemetry-specification/pull/3165
@@ -526,8 +527,8 @@
 
 
 def _collect_target_attribute(
-    scope: typing.Dict[str, typing.Any],
-) -> typing.Optional[str]:
+    scope: dict[str, typing.Any],
+) -> str | None:
     """
     Returns the target path as defined by the Semantic Conventions.
 
@@ -643,9 +644,7 @@
             )
         self.server_response_body_size_histogram = None
         if _report_new(sem_conv_opt_in_mode):
-            self.server_response_body_size_histogram = (
-                create_http_server_response_body_size(self.meter)
-            )
+            self.server_response_body_size_histogram = 
create_http_server_response_body_size(self.meter)
         self.server_request_size_histogram = None
         if _report_old(sem_conv_opt_in_mode):
             self.server_request_size_histogram = self.meter.create_histogram(
@@ -655,18 +654,12 @@
             )
         self.server_request_body_size_histogram = None
         if _report_new(sem_conv_opt_in_mode):
-            self.server_request_body_size_histogram = (
-                create_http_server_request_body_size(self.meter)
-            )
-        self.active_requests_counter = create_http_server_active_requests(
-            self.meter
-        )
+            self.server_request_body_size_histogram = 
create_http_server_request_body_size(self.meter)
+        self.active_requests_counter = 
create_http_server_active_requests(self.meter)
         if isinstance(excluded_urls, str):
             excluded_urls = parse_excluded_urls(excluded_urls)
         self.excluded_urls = excluded_urls
-        self.default_span_details = (
-            default_span_details or get_default_span_details
-        )
+        self.default_span_details = default_span_details or 
get_default_span_details
 
         def failsafe(func):
             if func is None:
@@ -690,37 +683,21 @@
         # Environment variables as constructor parameters
         self.http_capture_headers_server_request = (
             http_capture_headers_server_request
-            or (
-                get_custom_headers(
-                    OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST
-                )
-            )
+            or 
(get_custom_headers(OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST))
             or None
         )
         self.http_capture_headers_server_response = (
             http_capture_headers_server_response
-            or (
-                get_custom_headers(
-                    OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE
-                )
-            )
+            or 
(get_custom_headers(OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE))
             or None
         )
         self.http_capture_headers_sanitize_fields = SanitizeValue(
             http_capture_headers_sanitize_fields
-            or (
-                get_custom_headers(
-                    OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS
-                )
-            )
+            or 
(get_custom_headers(OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS))
             or []
         )
-        self.exclude_receive_span = (
-            "receive" in exclude_spans if exclude_spans else False
-        )
-        self.exclude_send_span = (
-            "send" in exclude_spans if exclude_spans else False
-        )
+        self.exclude_receive_span = "receive" in exclude_spans if 
exclude_spans else False
+        self.exclude_send_span = "send" in exclude_spans if exclude_spans else 
False
 
     # pylint: disable=too-many-statements
     async def __call__(
@@ -749,9 +726,7 @@
 
         span_name, additional_attributes = self.default_span_details(scope)
 
-        attributes = collect_request_attributes(
-            scope, self._sem_conv_opt_in_mode
-        )
+        attributes = collect_request_attributes(scope, 
self._sem_conv_opt_in_mode)
         attributes.update(additional_attributes)
         span, token = _start_internal_or_server_span(
             tracer=self.tracer,
@@ -791,9 +766,7 @@
                 if callable(self.server_request_hook):
                     self.server_request_hook(current_span, scope)
 
-                otel_receive = self._get_otel_receive(
-                    span_name, scope, receive
-                )
+                otel_receive = self._get_otel_receive(span_name, scope, 
receive)
 
                 otel_send = self._get_otel_send(
                     current_span,
@@ -817,14 +790,10 @@
                         self._sem_conv_opt_in_mode,
                     )
                 duration_s = default_timer() - start
-                duration_attrs_old = _parse_duration_attrs(
-                    attributes, _StabilityMode.DEFAULT
-                )
+                duration_attrs_old = _parse_duration_attrs(attributes, 
_StabilityMode.DEFAULT)
                 if target:
                     duration_attrs_old[HTTP_TARGET] = target
-                duration_attrs_new = _parse_duration_attrs(
-                    attributes, _StabilityMode.HTTP
-                )
+                duration_attrs_new = _parse_duration_attrs(attributes, 
_StabilityMode.HTTP)
                 span_ctx = set_span_in_context(span)
                 if self.duration_histogram_old:
                     self.duration_histogram_old.record(
@@ -838,9 +807,7 @@
                         duration_attrs_new,
                         context=span_ctx,
                     )
-                self.active_requests_counter.add(
-                    -1, active_requests_count_attrs
-                )
+                self.active_requests_counter.add(-1, 
active_requests_count_attrs)
                 if self.content_length_header:
                     if self.server_response_size_histogram:
                         self.server_response_size_histogram.record(
@@ -900,9 +867,7 @@
                             None,
                             self._sem_conv_opt_in_mode,
                         )
-                    receive_span.set_attribute(
-                        "asgi.event.type", message["type"]
-                    )
+                    receive_span.set_attribute("asgi.event.type", 
message["type"])
             return message
 
         return otel_receive
@@ -917,9 +882,7 @@
         expecting_trailers,
     ):
         """Set send span attributes and status code."""
-        with self.tracer.start_as_current_span(
-            " ".join((server_span_name, scope["type"], "send"))
-        ) as send_span:
+        with self.tracer.start_as_current_span(" ".join((server_span_name, 
scope["type"], "send"))) as send_span:
             if callable(self.client_response_hook):
                 self.client_response_hook(send_span, scope, message)
 
@@ -937,15 +900,9 @@
                 )
         return expecting_trailers
 
-    def _set_server_span(
-        self, server_span, message, status_code, duration_attrs
-    ):
+    def _set_server_span(self, server_span, message, status_code, 
duration_attrs):
         """Set server span attributes and status code."""
-        if (
-            server_span.is_recording()
-            and server_span.kind == trace.SpanKind.SERVER
-            and "headers" in message
-        ):
+        if server_span.is_recording() and server_span.kind == 
trace.SpanKind.SERVER and "headers" in message:
             custom_response_attributes = (
                 collect_custom_headers_attributes(
                     message,
@@ -997,17 +954,13 @@
                     expecting_trailers,
                 )
 
-            self._set_server_span(
-                server_span, message, status_code, duration_attrs
-            )
+            self._set_server_span(server_span, message, status_code, 
duration_attrs)
 
             propagator = get_global_response_propagator()
             if propagator:
                 propagator.inject(
                     message,
-                    context=set_span_in_context(
-                        server_span, trace.context_api.Context()
-                    ),
+                    context=set_span_in_context(server_span, 
trace.context_api.Context()),
                     setter=asgi_setter,
                 )
 
@@ -1035,9 +988,7 @@
         return otel_send
 
 
-def _parse_duration_attrs(
-    req_attrs, sem_conv_opt_in_mode=_StabilityMode.DEFAULT
-):
+def _parse_duration_attrs(req_attrs, 
sem_conv_opt_in_mode=_StabilityMode.DEFAULT):
     return _filter_semconv_duration_attrs(
         req_attrs,
         _server_duration_attrs_old,
@@ -1046,9 +997,7 @@
     )
 
 
-def _parse_active_request_count_attrs(
-    req_attrs, sem_conv_opt_in_mode=_StabilityMode.DEFAULT
-):
+def _parse_active_request_count_attrs(req_attrs, 
sem_conv_opt_in_mode=_StabilityMode.DEFAULT):
     return _filter_semconv_active_request_count_attr(
         req_attrs,
         _server_active_requests_count_attrs_old,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation_asgi-0.64b0/src/opentelemetry/instrumentation/asgi/types.py
 
new/opentelemetry_instrumentation_asgi-0.66b0/src/opentelemetry/instrumentation/asgi/types.py
--- 
old/opentelemetry_instrumentation_asgi-0.64b0/src/opentelemetry/instrumentation/asgi/types.py
       2020-02-02 01:00:00.000000000 +0100
+++ 
new/opentelemetry_instrumentation_asgi-0.66b0/src/opentelemetry/instrumentation/asgi/types.py
       2020-02-02 01:00:00.000000000 +0100
@@ -1,14 +1,15 @@
 # Copyright The OpenTelemetry Authors
 # SPDX-License-Identifier: Apache-2.0
 
-from typing import Any, Callable, Dict, Optional
+from collections.abc import Callable
+from typing import Any
 
 from opentelemetry.trace import Span
 
-_Scope = Dict[str, Any]
-_Message = Dict[str, Any]
+_Scope = dict[str, Any]
+_Message = dict[str, Any]
 
-ServerRequestHook = Optional[Callable[[Span, _Scope], None]]
+ServerRequestHook = Callable[[Span, _Scope], None] | None
 """
 Incoming request callback type.
 
@@ -17,7 +18,7 @@
     - ASGI scope as a mapping
 """
 
-ClientRequestHook = Optional[Callable[[Span, _Scope, _Message], None]]
+ClientRequestHook = Callable[[Span, _Scope, _Message], None] | None
 """
 Receive callback type.
 
@@ -27,7 +28,7 @@
     - ASGI event as a mapping
 """
 
-ClientResponseHook = Optional[Callable[[Span, _Scope, _Message], None]]
+ClientResponseHook = Callable[[Span, _Scope, _Message], None] | None
 """
 Send callback type.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation_asgi-0.64b0/src/opentelemetry/instrumentation/asgi/version.py
 
new/opentelemetry_instrumentation_asgi-0.66b0/src/opentelemetry/instrumentation/asgi/version.py
--- 
old/opentelemetry_instrumentation_asgi-0.64b0/src/opentelemetry/instrumentation/asgi/version.py
     2020-02-02 01:00:00.000000000 +0100
+++ 
new/opentelemetry_instrumentation_asgi-0.66b0/src/opentelemetry/instrumentation/asgi/version.py
     2020-02-02 01:00:00.000000000 +0100
@@ -1,4 +1,4 @@
 # Copyright The OpenTelemetry Authors
 # SPDX-License-Identifier: Apache-2.0
 
-__version__ = "0.64b0"
+__version__ = "0.66b0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation_asgi-0.64b0/tests/test_asgi_custom_headers.py 
new/opentelemetry_instrumentation_asgi-0.66b0/tests/test_asgi_custom_headers.py
--- 
old/opentelemetry_instrumentation_asgi-0.64b0/tests/test_asgi_custom_headers.py 
    2020-02-02 01:00:00.000000000 +0100
+++ 
new/opentelemetry_instrumentation_asgi-0.66b0/tests/test_asgi_custom_headers.py 
    2020-02-02 01:00:00.000000000 +0100
@@ -142,16 +142,10 @@
         await self.get_all_output()
         span_list = self.exporter.get_finished_spans()
         expected = {
-            "http.request.header.custom_test_header_1": (
-                "test-header-value-1",
-            ),
-            "http.request.header.custom_test_header_2": (
-                "test-header-value-2",
-            ),
+            "http.request.header.custom_test_header_1": 
("test-header-value-1",),
+            "http.request.header.custom_test_header_2": 
("test-header-value-2",),
             "http.request.header.regex_test_header_1": ("Regex Test Value 1",),
-            "http.request.header.regex_test_header_2": (
-                "RegexTestValue2,RegexTestValue3",
-            ),
+            "http.request.header.regex_test_header_2": 
("RegexTestValue2,RegexTestValue3",),
             "http.request.header.non_utf8_header": ("Moto Z²",),
             "http.request.header.moto_z²_non_utf8_header_key": ("Moto Z²",),
             "http.request.header.my_secret_header": ("[REDACTED]",),
@@ -191,14 +185,10 @@
         await self.get_all_output()
         span_list = self.exporter.get_finished_spans()
         expected = {
-            "http.request.header.custom_test_header_1": (
-                "test-header-value-1",
-            ),
+            "http.request.header.custom_test_header_1": 
("test-header-value-1",),
         }
         not_expected = {
-            "http.request.header.custom_test_header_2": (
-                "test-header-value-2",
-            ),
+            "http.request.header.custom_test_header_2": 
("test-header-value-2",),
         }
         for span in span_list:
             if span.kind == SpanKind.SERVER:
@@ -217,18 +207,10 @@
         await self.get_all_output()
         span_list = self.exporter.get_finished_spans()
         expected = {
-            "http.response.header.custom_test_header_1": (
-                "test-header-value-1",
-            ),
-            "http.response.header.custom_test_header_2": (
-                "test-header-value-2",
-            ),
-            "http.response.header.my_custom_regex_header_1": (
-                "my-custom-regex-value-1,my-custom-regex-value-2",
-            ),
-            "http.response.header.my_custom_regex_header_2": (
-                "my-custom-regex-value-3,my-custom-regex-value-4",
-            ),
+            "http.response.header.custom_test_header_1": 
("test-header-value-1",),
+            "http.response.header.custom_test_header_2": 
("test-header-value-2",),
+            "http.response.header.my_custom_regex_header_1": 
("my-custom-regex-value-1,my-custom-regex-value-2",),
+            "http.response.header.my_custom_regex_header_2": 
("my-custom-regex-value-3,my-custom-regex-value-4",),
             "http.response.header.my_secret_header": ("[REDACTED]",),
             "http.response.header.non_utf8_header": ("Moto Z²",),
             "http.response.header.moto_z²_non_utf8_header_key": ("Moto Z²",),
@@ -267,9 +249,7 @@
         await self.get_all_output()
         span_list = self.exporter.get_finished_spans()
         not_expected = {
-            "http.response.header.custom_test_header_3": (
-                "test-header-value-3",
-            ),
+            "http.response.header.custom_test_header_3": 
("test-header-value-3",),
         }
         for span in span_list:
             if span.kind == SpanKind.SERVER:
@@ -301,16 +281,10 @@
         await self.get_all_output()
         span_list = self.exporter.get_finished_spans()
         expected = {
-            "http.request.header.custom_test_header_1": (
-                "test-header-value-1",
-            ),
-            "http.request.header.custom_test_header_2": (
-                "test-header-value-2",
-            ),
+            "http.request.header.custom_test_header_1": 
("test-header-value-1",),
+            "http.request.header.custom_test_header_2": 
("test-header-value-2",),
             "http.request.header.regex_test_header_1": ("Regex Test Value 1",),
-            "http.request.header.regex_test_header_2": (
-                "RegexTestValue2,RegexTestValue3",
-            ),
+            "http.request.header.regex_test_header_2": 
("RegexTestValue2,RegexTestValue3",),
             "http.request.header.my_secret_header": ("[REDACTED]",),
         }
         for span in span_list:
@@ -341,9 +315,7 @@
         await self.get_all_output()
         span_list = self.exporter.get_finished_spans()
         not_expected = {
-            "http.request.header.custom_test_header_3": (
-                "test-header-value-3",
-            ),
+            "http.request.header.custom_test_header_3": 
("test-header-value-3",),
         }
         for span in span_list:
             if span.kind == SpanKind.SERVER:
@@ -373,18 +345,10 @@
         await self.get_all_output()
         span_list = self.exporter.get_finished_spans()
         expected = {
-            "http.response.header.custom_test_header_1": (
-                "test-header-value-1",
-            ),
-            "http.response.header.custom_test_header_2": (
-                "test-header-value-2",
-            ),
-            "http.response.header.my_custom_regex_header_1": (
-                "my-custom-regex-value-1,my-custom-regex-value-2",
-            ),
-            "http.response.header.my_custom_regex_header_2": (
-                "my-custom-regex-value-3,my-custom-regex-value-4",
-            ),
+            "http.response.header.custom_test_header_1": 
("test-header-value-1",),
+            "http.response.header.custom_test_header_2": 
("test-header-value-2",),
+            "http.response.header.my_custom_regex_header_1": 
("my-custom-regex-value-1,my-custom-regex-value-2",),
+            "http.response.header.my_custom_regex_header_2": 
("my-custom-regex-value-3,my-custom-regex-value-4",),
             "http.response.header.my_secret_header": ("[REDACTED]",),
         }
         for span in span_list:
@@ -416,9 +380,7 @@
         await self.get_all_output()
         span_list = self.exporter.get_finished_spans()
         not_expected = {
-            "http.response.header.custom_test_header_3": (
-                "test-header-value-3",
-            ),
+            "http.response.header.custom_test_header_3": 
("test-header-value-3",),
         }
         for span in span_list:
             if span.kind == SpanKind.SERVER:
@@ -443,27 +405,15 @@
         super().setUp()
 
     def tearDown(self):
-        os.environ.pop(
-            OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS, None
-        )
-        os.environ.pop(
-            OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST, None
-        )
-        os.environ.pop(
-            OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE, None
-        )
+        
os.environ.pop(OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS, None)
+        
os.environ.pop(OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST, None)
+        
os.environ.pop(OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE, None)
         super().tearDown()
 
 
 class TestCustomHeadersConstructor(TestCustomHeaders):
     constructor_params = {
-        "http_capture_headers_sanitize_fields": 
SANITIZE_FIELDS_TEST_VALUE.split(
-            ","
-        ),
-        "http_capture_headers_server_request": SERVER_REQUEST_TEST_VALUE.split(
-            ","
-        ),
-        "http_capture_headers_server_response": 
SERVER_RESPONSE_TEST_VALUE.split(
-            ","
-        ),
+        "http_capture_headers_sanitize_fields": 
SANITIZE_FIELDS_TEST_VALUE.split(","),
+        "http_capture_headers_server_request": 
SERVER_REQUEST_TEST_VALUE.split(","),
+        "http_capture_headers_server_response": 
SERVER_RESPONSE_TEST_VALUE.split(","),
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentelemetry_instrumentation_asgi-0.64b0/tests/test_asgi_middleware.py 
new/opentelemetry_instrumentation_asgi-0.66b0/tests/test_asgi_middleware.py
--- old/opentelemetry_instrumentation_asgi-0.64b0/tests/test_asgi_middleware.py 
2020-02-02 01:00:00.000000000 +0100
+++ new/opentelemetry_instrumentation_asgi-0.66b0/tests/test_asgi_middleware.py 
2020-02-02 01:00:00.000000000 +0100
@@ -112,9 +112,7 @@
 
 _recommended_attrs_both = _recommended_attrs_old.copy()
 _recommended_attrs_both.update(_recommended_attrs_new)
-_recommended_attrs_both["http.server.active_requests"].extend(
-    _server_active_requests_count_attrs_old
-)
+_recommended_attrs_both["http.server.active_requests"].extend(_server_active_requests_count_attrs_old)
 
 _SIMULATED_BACKGROUND_TASK_EXECUTION_TIME_S = 0.01
 
@@ -177,18 +175,10 @@
                 ],
             }
         )
-        await send(
-            {"type": "http.response.body", "body": b"*", "more_body": True}
-        )
-        await send(
-            {"type": "http.response.body", "body": b"*", "more_body": True}
-        )
-        await send(
-            {"type": "http.response.body", "body": b"*", "more_body": True}
-        )
-        await send(
-            {"type": "http.response.body", "body": b"*", "more_body": False}
-        )
+        await send({"type": "http.response.body", "body": b"*", "more_body": 
True})
+        await send({"type": "http.response.body", "body": b"*", "more_body": 
True})
+        await send({"type": "http.response.body", "body": b"*", "more_body": 
True})
+        await send({"type": "http.response.body", "body": b"*", "more_body": 
False})
 
 
 async def background_execution_asgi(scope, receive, send):
@@ -214,6 +204,8 @@
                 "body": b"*",
             }
         )
+        # Record when the background task starts; the server span must already 
be ended by now.
+        scope["background_task_start_ns"] = time.time_ns()
         time.sleep(_SIMULATED_BACKGROUND_TASK_EXECUTION_TIME_S)
 
 
@@ -235,12 +227,8 @@
                 "trailers": True,
             }
         )
-        await send(
-            {"type": "http.response.body", "body": b"*", "more_body": True}
-        )
-        await send(
-            {"type": "http.response.body", "body": b"*", "more_body": False}
-        )
+        await send({"type": "http.response.body", "body": b"*", "more_body": 
True})
+        await send({"type": "http.response.body", "body": b"*", "more_body": 
False})
         await send(
             {
                 "type": "http.response.trailers",
@@ -259,6 +247,8 @@
                 "more_trailers": False,
             }
         )
+        # Record when the background task starts; the server span must already 
be ended by now.
+        scope["background_task_start_ns"] = time.time_ns()
         time.sleep(_SIMULATED_BACKGROUND_TASK_EXECUTION_TIME_S)
 
 
@@ -333,9 +323,7 @@
         return sub
 
     # Helper to assert exemplars presence across specified histogram metric 
names.
-    def _assert_exemplars_present(
-        self, metric_names: set[str], context: str = ""
-    ):
+    def _assert_exemplars_present(self, metric_names: set[str], context: str = 
""):
         metrics = self.get_sorted_metrics(SCOPE)
 
         found = {name: 0 for name in metric_names}
@@ -378,12 +366,9 @@
         # Ensure modifiers is a list
         modifiers = modifiers or []
         # Check for expected outputs
+        self.assertTrue(outputs, "ASGI application produced no response 
messages")
         response_start = outputs[0]
-        response_final_body = [
-            output
-            for output in outputs
-            if output["type"] == "http.response.body"
-        ][-1]
+        response_final_body = [output for output in outputs if output["type"] 
== "http.response.body"][-1]
 
         self.assertEqual(response_start["type"], "http.response.start")
         self.assertEqual(response_final_body["type"], "http.response.body")
@@ -409,6 +394,7 @@
 
         # Check spans
         span_list = self.get_finished_spans()
+
         expected_old = [
             {
                 "name": "GET / http receive",
@@ -582,9 +568,7 @@
         mock_span = mock.Mock()
         mock_span.is_recording.return_value = False
         mock_tracer.start_as_current_span.return_value = mock_span
-        mock_tracer.start_as_current_span.return_value.__enter__ = mock.Mock(
-            return_value=mock_span
-        )
+        mock_tracer.start_as_current_span.return_value.__enter__ = 
mock.Mock(return_value=mock_span)
         mock_tracer.start_as_current_span.return_value.__exit__ = mock_span
         with mock.patch("opentelemetry.trace.get_tracer") as tracer:
             tracer.return_value = mock_tracer
@@ -637,10 +621,9 @@
         span_list = self.get_finished_spans()
         server_span = span_list[-1]
         assert server_span.kind == SpanKind.SERVER
-        span_duration_nanos = server_span.end_time - server_span.start_time
         self.assertLessEqual(
-            span_duration_nanos,
-            _SIMULATED_BACKGROUND_TASK_EXECUTION_TIME_S * 10**9,
+            server_span.end_time,
+            self.scope["background_task_start_ns"],
         )
 
     async def test_exclude_internal_spans(self):
@@ -655,9 +638,7 @@
         ]
         for exclude_spans, excluded_spans in cases:
             self.memory_exporter.clear()
-            app = otel_asgi.OpenTelemetryMiddleware(
-                simple_asgi, exclude_spans=exclude_spans
-            )
+            app = otel_asgi.OpenTelemetryMiddleware(simple_asgi, 
exclude_spans=exclude_spans)
             self.seed_app(app)
             await self.send_default_request()
             await self.get_all_output()
@@ -670,9 +651,7 @@
     async def test_trailers(self):
         """Test that trailers are emitted as expected and that the server span 
is ended
         BEFORE the background task is finished."""
-        app = otel_asgi.OpenTelemetryMiddleware(
-            background_execution_trailers_asgi
-        )
+        app = 
otel_asgi.OpenTelemetryMiddleware(background_execution_trailers_asgi)
         self.seed_app(app)
         await self.send_default_request()
         outputs = await self.get_all_output()
@@ -696,10 +675,9 @@
         span_list = self.get_finished_spans()
         server_span = span_list[-1]
         assert server_span.kind == SpanKind.SERVER
-        span_duration_nanos = server_span.end_time - server_span.start_time
         self.assertLessEqual(
-            span_duration_nanos,
-            _SIMULATED_BACKGROUND_TASK_EXECUTION_TIME_S * 10**9,
+            server_span.end_time,
+            self.scope["background_task_start_ns"],
         )
 
     async def test_override_span_name(self):
@@ -714,14 +692,10 @@
                 if entry["kind"] == trace_api.SpanKind.SERVER:
                     entry["name"] = span_name
                 else:
-                    entry["name"] = " ".join(
-                        [span_name] + entry["name"].split(" ")[2:]
-                    )
+                    entry["name"] = " ".join([span_name] + 
entry["name"].split(" ")[2:])
             return expected
 
-        app = otel_asgi.OpenTelemetryMiddleware(
-            simple_asgi, default_span_details=get_predefined_span_details
-        )
+        app = otel_asgi.OpenTelemetryMiddleware(simple_asgi, 
default_span_details=get_predefined_span_details)
         self.seed_app(app)
         await self.send_default_request()
         outputs = await self.get_all_output()
@@ -732,21 +706,15 @@
         result = TestBase.create_tracer_provider(resource=resource)
         tracer_provider, exporter = result
 
-        app = otel_asgi.OpenTelemetryMiddleware(
-            simple_asgi, tracer_provider=tracer_provider
-        )
+        app = otel_asgi.OpenTelemetryMiddleware(simple_asgi, 
tracer_provider=tracer_provider)
         self.seed_app(app)
         await self.send_default_request()
         span_list = exporter.get_finished_spans()
         for span in span_list:
-            self.assertEqual(
-                span.resource.attributes["service-test-key"], "value"
-            )
+            self.assertEqual(span.resource.attributes["service-test-key"], 
"value")
 
     async def test_no_op_tracer_provider_otel_asgi(self):
-        app = otel_asgi.OpenTelemetryMiddleware(
-            simple_asgi, tracer_provider=trace_api.NoOpTracerProvider()
-        )
+        app = otel_asgi.OpenTelemetryMiddleware(simple_asgi, 
tracer_provider=trace_api.NoOpTracerProvider())
         self.seed_app(app)
         await self.send_default_request()
 
@@ -878,9 +846,7 @@
         user_agent = b"test-agent"
 
         def update_expected_user_agent(expected):
-            expected[3]["attributes"].update(
-                {HTTP_USER_AGENT: user_agent.decode("utf8")}
-            )
+            expected[3]["attributes"].update({HTTP_USER_AGENT: 
user_agent.decode("utf8")})
             return expected
 
         self.scope["headers"].append([b"user-agent", user_agent])
@@ -895,9 +861,7 @@
         user_agent = b"test-agent"
 
         def update_expected_user_agent(expected):
-            expected[3]["attributes"].update(
-                {USER_AGENT_ORIGINAL: user_agent.decode("utf8")}
-            )
+            expected[3]["attributes"].update({USER_AGENT_ORIGINAL: 
user_agent.decode("utf8")})
             return expected
 
         self.scope["headers"].append([b"user-agent", user_agent])
@@ -929,6 +893,7 @@
         app = otel_asgi.OpenTelemetryMiddleware(simple_asgi)
         self.seed_app(app)
         await self.send_default_request()
+        await self.communicator.wait()
         outputs = await self.get_all_output()
         self.validate_outputs(
             outputs,
@@ -952,9 +917,7 @@
                 # Clear headers first
                 self.scope["headers"] = []
 
-                def update_expected_synthetic_bot(
-                    expected, ua: bytes = user_agent
-                ):
+                def update_expected_synthetic_bot(expected, ua: bytes = 
user_agent):
                     expected[3]["attributes"].update(
                         {
                             HTTP_USER_AGENT: ua.decode("utf8"),
@@ -968,9 +931,7 @@
                 self.seed_app(app)
                 await self.send_default_request()
                 outputs = await self.get_all_output()
-                self.validate_outputs(
-                    outputs, modifiers=[update_expected_synthetic_bot]
-                )
+                self.validate_outputs(outputs, 
modifiers=[update_expected_synthetic_bot])
 
     async def test_user_agent_synthetic_test_detection(self):
         """Test that test user agents are detected as synthetic with type 
'test'"""
@@ -986,9 +947,7 @@
                 # Clear headers first
                 self.scope["headers"] = []
 
-                def update_expected_synthetic_test(
-                    expected, ua: bytes = user_agent
-                ):
+                def update_expected_synthetic_test(expected, ua: bytes = 
user_agent):
                     expected[3]["attributes"].update(
                         {
                             HTTP_USER_AGENT: ua.decode("utf8"),
@@ -1002,9 +961,7 @@
                 self.seed_app(app)
                 await self.send_default_request()
                 outputs = await self.get_all_output()
-                self.validate_outputs(
-                    outputs, modifiers=[update_expected_synthetic_test]
-                )
+                self.validate_outputs(outputs, 
modifiers=[update_expected_synthetic_test])
 
     async def test_user_agent_non_synthetic(self):
         """Test that normal user agents are not marked as synthetic"""
@@ -1021,9 +978,7 @@
                 # Clear headers first
                 self.scope["headers"] = []
 
-                def update_expected_non_synthetic(
-                    expected, ua: bytes = user_agent
-                ):
+                def update_expected_non_synthetic(expected, ua: bytes = 
user_agent):
                     # Should only have the user agent, not synthetic type
                     expected[3]["attributes"].update(
                         {
@@ -1037,9 +992,7 @@
                 self.seed_app(app)
                 await self.send_default_request()
                 outputs = await self.get_all_output()
-                self.validate_outputs(
-                    outputs, modifiers=[update_expected_non_synthetic]
-                )
+                self.validate_outputs(outputs, 
modifiers=[update_expected_non_synthetic])
 
     async def test_user_agent_synthetic_new_semconv(self):
         """Test synthetic user agent detection with new semantic conventions"""
@@ -1411,9 +1364,7 @@
         self.seed_app(app)
         await self.send_default_request()
         outputs = await self.get_all_output()
-        self.validate_outputs(
-            outputs, modifiers=[update_expected_hook_results]
-        )
+        self.validate_outputs(outputs, 
modifiers=[update_expected_hook_results])
 
     async def test_hook_exceptions(self):
         def exception_event(msg):
@@ -1445,9 +1396,7 @@
         self.seed_app(app)
         await self.send_default_request()
         outputs = await self.get_all_output()
-        self.validate_outputs(
-            outputs, modifiers=[update_expected_hook_results]
-        )
+        self.validate_outputs(outputs, 
modifiers=[update_expected_hook_results])
 
     async def test_asgi_metrics(self):
         app = otel_asgi.OpenTelemetryMiddleware(simple_asgi)
@@ -1555,9 +1504,7 @@
             self.seed_app(app)
             await self.send_default_request()
             await self.get_all_output()
-        self._assert_exemplars_present(
-            {"http.server.duration"}, context="old semconv"
-        )
+        self._assert_exemplars_present({"http.server.duration"}, context="old 
semconv")
 
     async def test_asgi_metrics_exemplars_expected_new_semconv(self):
         """Failing test placeholder asserting exemplars should be present for 
request duration histogram (new semconv)."""
@@ -1566,9 +1513,7 @@
             self.seed_app(app)
             await self.send_default_request()
             await self.get_all_output()
-        self._assert_exemplars_present(
-            {"http.server.request.duration"}, context="new semconv"
-        )
+        self._assert_exemplars_present({"http.server.request.duration"}, 
context="new semconv")
 
     async def test_asgi_metrics_exemplars_expected_both_semconv(self):
         """Failing test placeholder asserting exemplars should be present for 
both duration histograms when both semconv modes enabled."""
@@ -1631,9 +1576,7 @@
         mock_span = mock.Mock()
         mock_span.is_recording.return_value = False
         mock_tracer.start_as_current_span.return_value = mock_span
-        mock_tracer.start_as_current_span.return_value.__enter__ = mock.Mock(
-            return_value=mock_span
-        )
+        mock_tracer.start_as_current_span.return_value.__enter__ = 
mock.Mock(return_value=mock_span)
         mock_tracer.start_as_current_span.return_value.__exit__ = mock_span
         with mock.patch("opentelemetry.trace.get_tracer") as tracer:
             tracer.return_value = mock_tracer
@@ -1668,9 +1611,7 @@
                         )
                         self.assertEqual(point.count, 1)
                         if metric.name == "http.server.duration":
-                            self.assertAlmostEqual(
-                                duration, point.sum, delta=15
-                            )
+                            self.assertAlmostEqual(duration, point.sum, 
delta=15)
                         elif metric.name == "http.server.response.size":
                             self.assertEqual(1024, point.sum)
                         elif metric.name == "http.server.request.size":
@@ -1854,9 +1795,7 @@
 
     async def test_excluded_urls(self):
         self.scope["path"] = "/test_excluded_urls"
-        app = otel_asgi.OpenTelemetryMiddleware(
-            simple_asgi, excluded_urls="test_excluded_urls"
-        )
+        app = otel_asgi.OpenTelemetryMiddleware(simple_asgi, 
excluded_urls="test_excluded_urls")
         self.seed_app(app)
         await self.send_default_request()
         await self.get_all_output()
@@ -1865,9 +1804,7 @@
 
     async def test_no_excluded_urls(self):
         self.scope["path"] = "/test_excluded_urls"
-        app = otel_asgi.OpenTelemetryMiddleware(
-            simple_asgi, excluded_urls="test_excluded_urls"
-        )
+        app = otel_asgi.OpenTelemetryMiddleware(simple_asgi, 
excluded_urls="test_excluded_urls")
         self.seed_app(app)
         self.scope["path"] = "/test_no_excluded_urls"
         await self.send_default_request()
@@ -2104,15 +2041,11 @@
     ):
         tracer_provider, exporter = TestBase.create_tracer_provider()
         tracer = tracer_provider.get_tracer(__name__)
-        app = otel_asgi.OpenTelemetryMiddleware(
-            simple_asgi, tracer_provider=tracer_provider
-        )
+        app = otel_asgi.OpenTelemetryMiddleware(simple_asgi, 
tracer_provider=tracer_provider)
 
         # Wrapping the otel intercepted app with server span
         async def wrapped_app(scope, receive, send):
-            with tracer.start_as_current_span(
-                "test", kind=SpanKind.SERVER
-            ) as _:
+            with tracer.start_as_current_span("test", kind=SpanKind.SERVER) as 
_:
                 await app(scope, receive, send)
 
         self.seed_app(wrapped_app)
@@ -2129,9 +2062,7 @@
         self.assertEqual(SpanKind.SERVER, span_list[4].kind)
 
         # internal span should be child of the test span we have provided
-        self.assertEqual(
-            span_list[4].context.span_id, span_list[3].parent.span_id
-        )
+        self.assertEqual(span_list[4].context.span_id, 
span_list[3].parent.span_id)
 
 
 class TestAsgiApplicationRaisingError(AsyncAsgiTestBase):
@@ -2155,10 +2086,7 @@
         except ValueError as exc_info:
             self.assertEqual(exc_info.args[0], "whatever")
         except Exception as exc_info:  # pylint: disable=W0703
-            self.fail(
-                "expecting ValueError('whatever'), received instead: "
-                + str(exc_info)
-            )
+            self.fail("expecting ValueError('whatever'), received instead: " + 
str(exc_info))
         else:
             self.fail("expecting ValueError('whatever')")
 

Reply via email to