2727 _HTTPStabilityMode ,
2828 _OpenTelemetrySemanticConventionStability ,
2929)
30- from opentelemetry .instrumentation .urllib3 import URLLib3Instrumentor
30+ from opentelemetry .instrumentation .urllib3 import (
31+ RequestInfo ,
32+ URLLib3Instrumentor ,
33+ )
3134from opentelemetry .instrumentation .utils import (
3235 suppress_http_instrumentation ,
3336 suppress_instrumentation ,
4245from opentelemetry .semconv .trace import SpanAttributes
4346from opentelemetry .test .mock_textmap import MockTextMapPropagator
4447from opentelemetry .test .test_base import TestBase
48+ from opentelemetry .trace import Span
4549from opentelemetry .util .http import get_excluded_urls
4650
4751# pylint: disable=too-many-public-methods
@@ -521,10 +525,10 @@ def test_credential_removal(self):
521525 self .assert_success_span (response , self .HTTP_URL )
522526
523527 def test_hooks (self ):
524- def request_hook (span , request , body , headers ):
528+ def request_hook (span , pool , request_info ):
525529 span .update_name ("name set from hook" )
526530
527- def response_hook (span , request , response ):
531+ def response_hook (span , pool , response ):
528532 span .set_attribute ("response_hook_attr" , "value" )
529533
530534 URLLib3Instrumentor ().uninstrument ()
@@ -541,11 +545,17 @@ def response_hook(span, request, response):
541545 self .assertEqual (span .attributes ["response_hook_attr" ], "value" )
542546
543547 def test_request_hook_params (self ):
544- def request_hook (span , request , headers , body ):
548+ def request_hook (
549+ span : Span ,
550+ _pool : urllib3 .connectionpool .ConnectionPool ,
551+ request_info : RequestInfo ,
552+ ) -> None :
553+ span .set_attribute ("request_hook_method" , request_info .method )
554+ span .set_attribute ("request_hook_url" , request_info .url )
545555 span .set_attribute (
546- "request_hook_headers" , json .dumps (dict (headers ))
556+ "request_hook_headers" , json .dumps (dict (request_info . headers ))
547557 )
548- span .set_attribute ("request_hook_body" , body )
558+ span .set_attribute ("request_hook_body" , request_info . body )
549559
550560 URLLib3Instrumentor ().uninstrument ()
551561 URLLib3Instrumentor ().instrument (
@@ -564,6 +574,10 @@ def request_hook(span, request, headers, body):
564574
565575 span = self .assert_span ()
566576
577+ self .assertEqual (span .attributes ["request_hook_method" ], "POST" )
578+ self .assertEqual (
579+ span .attributes ["request_hook_url" ], "http://mock/status/200"
580+ )
567581 self .assertIn ("request_hook_headers" , span .attributes )
568582 self .assertEqual (
569583 span .attributes ["request_hook_headers" ], json .dumps (headers )
@@ -572,8 +586,12 @@ def request_hook(span, request, headers, body):
572586 self .assertEqual (span .attributes ["request_hook_body" ], body )
573587
574588 def test_request_positional_body (self ):
575- def request_hook (span , request , headers , body ):
576- span .set_attribute ("request_hook_body" , body )
589+ def request_hook (
590+ span : Span ,
591+ _pool : urllib3 .connectionpool .ConnectionPool ,
592+ request_info : RequestInfo ,
593+ ) -> None :
594+ span .set_attribute ("request_hook_body" , request_info .body )
577595
578596 URLLib3Instrumentor ().uninstrument ()
579597 URLLib3Instrumentor ().instrument (
0 commit comments