3939from opentelemetry .instrumentation .utils import suppress_http_instrumentation
4040from opentelemetry .propagate import get_global_textmap , set_global_textmap
4141from opentelemetry .sdk import resources
42+ from opentelemetry .semconv ._incubating .attributes .http_attributes import (
43+ HTTP_FLAVOR ,
44+ HTTP_HOST ,
45+ HTTP_METHOD ,
46+ HTTP_SCHEME ,
47+ HTTP_STATUS_CODE ,
48+ HTTP_URL ,
49+ )
50+ from opentelemetry .semconv ._incubating .attributes .net_attributes import (
51+ NET_PEER_NAME ,
52+ NET_PEER_PORT ,
53+ )
4254from opentelemetry .semconv .attributes .error_attributes import ERROR_TYPE
4355from opentelemetry .semconv .attributes .http_attributes import (
4456 HTTP_REQUEST_METHOD ,
5567 SERVER_PORT ,
5668)
5769from opentelemetry .semconv .attributes .url_attributes import URL_FULL
58- from opentelemetry .semconv .trace import SpanAttributes
5970from opentelemetry .test .mock_textmap import MockTextMapPropagator
6071from opentelemetry .test .test_base import TestBase
6172from opentelemetry .trace import StatusCode
7687
7788
7889HTTP_RESPONSE_BODY = "http.response.body"
90+ SCHEMA_URL = "https://opentelemetry.io/schemas/1.21.0"
7991
8092
8193def _is_url_tuple (request : "RequestInfo" ):
@@ -216,9 +228,9 @@ def test_basic(self):
216228 self .assertEqual (
217229 dict (span .attributes ),
218230 {
219- SpanAttributes . HTTP_METHOD : "GET" ,
220- SpanAttributes . HTTP_URL : self .URL ,
221- SpanAttributes . HTTP_STATUS_CODE : 200 ,
231+ HTTP_METHOD : "GET" ,
232+ HTTP_URL : self .URL ,
233+ HTTP_STATUS_CODE : 200 ,
222234 },
223235 )
224236
@@ -237,9 +249,9 @@ def test_basic_metrics(self):
237249 self .assertEqual (
238250 dict (duration_data_point .attributes ),
239251 {
240- SpanAttributes . HTTP_STATUS_CODE : 200 ,
241- SpanAttributes . HTTP_METHOD : "GET" ,
242- SpanAttributes . HTTP_SCHEME : "http" ,
252+ HTTP_STATUS_CODE : 200 ,
253+ HTTP_METHOD : "GET" ,
254+ HTTP_SCHEME : "http" ,
243255 },
244256 )
245257 self .assertEqual (duration_data_point .count , 1 )
@@ -263,9 +275,9 @@ def test_nonstandard_http_method(self):
263275 self .assertEqual (
264276 dict (span .attributes ),
265277 {
266- SpanAttributes . HTTP_METHOD : "_OTHER" ,
267- SpanAttributes . HTTP_URL : self .URL ,
268- SpanAttributes . HTTP_STATUS_CODE : 405 ,
278+ HTTP_METHOD : "_OTHER" ,
279+ HTTP_URL : self .URL ,
280+ HTTP_STATUS_CODE : 405 ,
269281 },
270282 )
271283
@@ -282,9 +294,9 @@ def test_nonstandard_http_method(self):
282294 self .assertEqual (
283295 dict (duration_data_point .attributes ),
284296 {
285- SpanAttributes . HTTP_STATUS_CODE : 405 ,
286- SpanAttributes . HTTP_METHOD : "_OTHER" ,
287- SpanAttributes . HTTP_SCHEME : "http" ,
297+ HTTP_STATUS_CODE : 405 ,
298+ HTTP_METHOD : "_OTHER" ,
299+ HTTP_SCHEME : "http" ,
288300 },
289301 )
290302
@@ -354,7 +366,7 @@ def test_basic_new_semconv(self):
354366
355367 self .assertEqual (
356368 span .instrumentation_scope .schema_url ,
357- SpanAttributes . SCHEMA_URL ,
369+ SCHEMA_URL ,
358370 )
359371 self .assertEqual (
360372 dict (span .attributes ),
@@ -404,23 +416,23 @@ def test_basic_both_semconv(self):
404416
405417 self .assertEqual (
406418 span .instrumentation_scope .schema_url ,
407- SpanAttributes . SCHEMA_URL ,
419+ SCHEMA_URL ,
408420 )
409421
410422 self .assertEqual (
411423 dict (span .attributes ),
412424 {
413- SpanAttributes . HTTP_METHOD : "GET" ,
425+ HTTP_METHOD : "GET" ,
414426 HTTP_REQUEST_METHOD : "GET" ,
415- SpanAttributes . HTTP_URL : url ,
427+ HTTP_URL : url ,
416428 URL_FULL : url ,
417- SpanAttributes . HTTP_HOST : "mock" ,
429+ HTTP_HOST : "mock" ,
418430 SERVER_ADDRESS : "mock" ,
419431 NETWORK_PEER_ADDRESS : "mock" ,
420- SpanAttributes . NET_PEER_PORT : 8080 ,
421- SpanAttributes . HTTP_STATUS_CODE : 200 ,
432+ NET_PEER_PORT : 8080 ,
433+ HTTP_STATUS_CODE : 200 ,
422434 HTTP_RESPONSE_STATUS_CODE : 200 ,
423- SpanAttributes . HTTP_FLAVOR : "1.1" ,
435+ HTTP_FLAVOR : "1.1" ,
424436 NETWORK_PROTOCOL_VERSION : "1.1" ,
425437 SERVER_PORT : 8080 ,
426438 NETWORK_PEER_PORT : 8080 ,
@@ -440,13 +452,13 @@ def test_basic_both_semconv(self):
440452 self .assertEqual (
441453 dict (metrics [0 ].data .data_points [0 ].attributes ),
442454 {
443- SpanAttributes . HTTP_FLAVOR : "1.1" ,
444- SpanAttributes . HTTP_HOST : "mock" ,
445- SpanAttributes . HTTP_METHOD : "GET" ,
446- SpanAttributes . HTTP_SCHEME : "http" ,
447- SpanAttributes . NET_PEER_NAME : "mock" ,
448- SpanAttributes . NET_PEER_PORT : 8080 ,
449- SpanAttributes . HTTP_STATUS_CODE : 200 ,
455+ HTTP_FLAVOR : "1.1" ,
456+ HTTP_HOST : "mock" ,
457+ HTTP_METHOD : "GET" ,
458+ HTTP_SCHEME : "http" ,
459+ NET_PEER_NAME : "mock" ,
460+ NET_PEER_PORT : 8080 ,
461+ HTTP_STATUS_CODE : 200 ,
450462 },
451463 )
452464 self .assertEqual (metrics [0 ].name , "http.client.duration" )
@@ -477,9 +489,7 @@ def test_not_foundbasic(self):
477489
478490 self .assertEqual (result .status_code , 404 )
479491 span = self .assert_span ()
480- self .assertEqual (
481- span .attributes .get (SpanAttributes .HTTP_STATUS_CODE ), 404
482- )
492+ self .assertEqual (span .attributes .get (HTTP_STATUS_CODE ), 404 )
483493 self .assertIs (
484494 span .status .status_code ,
485495 trace .StatusCode .ERROR ,
@@ -489,9 +499,7 @@ def test_not_foundbasic(self):
489499 self .assertEqual (len (metrics ), 1 )
490500 duration_data_point = metrics [0 ].data .data_points [0 ]
491501 self .assertEqual (
492- duration_data_point .attributes .get (
493- SpanAttributes .HTTP_STATUS_CODE
494- ),
502+ duration_data_point .attributes .get (HTTP_STATUS_CODE ),
495503 404 ,
496504 )
497505
@@ -535,9 +543,7 @@ def test_not_foundbasic_both_semconv(self):
535543
536544 self .assertEqual (result .status_code , 404 )
537545 span = self .assert_span ()
538- self .assertEqual (
539- span .attributes .get (SpanAttributes .HTTP_STATUS_CODE ), 404
540- )
546+ self .assertEqual (span .attributes .get (HTTP_STATUS_CODE ), 404 )
541547 self .assertEqual (
542548 span .attributes .get (HTTP_RESPONSE_STATUS_CODE ), 404
543549 )
@@ -554,7 +560,7 @@ def test_not_foundbasic_both_semconv(self):
554560 self .assertEqual (
555561 metrics [0 ]
556562 .data .data_points [0 ]
557- .attributes .get (SpanAttributes . HTTP_STATUS_CODE ),
563+ .attributes .get (HTTP_STATUS_CODE ),
558564 404 ,
559565 )
560566 self .assertEqual (
@@ -612,9 +618,9 @@ def test_requests_500_error(self):
612618 self .assertEqual (
613619 dict (span .attributes ),
614620 {
615- SpanAttributes . HTTP_METHOD : "GET" ,
616- SpanAttributes . HTTP_URL : self .URL ,
617- SpanAttributes . HTTP_STATUS_CODE : 500 ,
621+ HTTP_METHOD : "GET" ,
622+ HTTP_URL : self .URL ,
623+ HTTP_STATUS_CODE : 500 ,
618624 },
619625 )
620626 self .assertEqual (span .status .status_code , StatusCode .ERROR )
@@ -689,14 +695,14 @@ def test_requests_timeout_exception_both_semconv(self):
689695 self .assertEqual (
690696 dict (span .attributes ),
691697 {
692- SpanAttributes . HTTP_METHOD : "GET" ,
698+ HTTP_METHOD : "GET" ,
693699 HTTP_REQUEST_METHOD : "GET" ,
694- SpanAttributes . HTTP_URL : url ,
700+ HTTP_URL : url ,
695701 URL_FULL : url ,
696- SpanAttributes . HTTP_HOST : "mock" ,
702+ HTTP_HOST : "mock" ,
697703 SERVER_ADDRESS : "mock" ,
698704 NETWORK_PEER_ADDRESS : "mock" ,
699- SpanAttributes . NET_PEER_PORT : 8080 ,
705+ NET_PEER_PORT : 8080 ,
700706 SERVER_PORT : 8080 ,
701707 NETWORK_PEER_PORT : 8080 ,
702708 ERROR_TYPE : "TimeoutException" ,
@@ -722,10 +728,8 @@ def test_invalid_url(self):
722728 span = self .assert_span ()
723729
724730 self .assertEqual (span .name , "POST" )
725- self .assertEqual (
726- span .attributes [SpanAttributes .HTTP_METHOD ], "POST"
727- )
728- self .assertEqual (span .attributes [SpanAttributes .HTTP_URL ], url )
731+ self .assertEqual (span .attributes [HTTP_METHOD ], "POST" )
732+ self .assertEqual (span .attributes [HTTP_URL ], url )
729733 self .assertEqual (span .status .status_code , StatusCode .ERROR )
730734
731735 def test_if_headers_equals_none (self ):
@@ -823,9 +827,9 @@ def test_metrics_have_response_attributes_with_disabled_tracing(
823827 self ._run_disabled_tracing_metrics_attributes_test (
824828 url = self .URL ,
825829 expected_attributes = {
826- SpanAttributes . HTTP_STATUS_CODE : 200 ,
827- SpanAttributes . HTTP_METHOD : "GET" ,
828- SpanAttributes . HTTP_SCHEME : "http" ,
830+ HTTP_STATUS_CODE : 200 ,
831+ HTTP_METHOD : "GET" ,
832+ HTTP_SCHEME : "http" ,
829833 },
830834 )
831835
@@ -857,9 +861,9 @@ def test_response_hook(self):
857861 self .assertEqual (
858862 dict (span .attributes ),
859863 {
860- SpanAttributes . HTTP_METHOD : "GET" ,
861- SpanAttributes . HTTP_URL : self .URL ,
862- SpanAttributes . HTTP_STATUS_CODE : 200 ,
864+ HTTP_METHOD : "GET" ,
865+ HTTP_URL : self .URL ,
866+ HTTP_STATUS_CODE : 200 ,
863867 HTTP_RESPONSE_BODY : "Hello!" ,
864868 },
865869 )
@@ -939,12 +943,8 @@ def test_client_mounts_with_instrumented_transport(self):
939943 self .perform_request (self .URL , client = client1 )
940944 self .perform_request (https_url , client = client2 )
941945 spans = self .assert_span (num_spans = 2 )
942- self .assertEqual (
943- spans [0 ].attributes [SpanAttributes .HTTP_URL ], self .URL
944- )
945- self .assertEqual (
946- spans [1 ].attributes [SpanAttributes .HTTP_URL ], https_url
947- )
946+ self .assertEqual (spans [0 ].attributes [HTTP_URL ], self .URL )
947+ self .assertEqual (spans [1 ].attributes [HTTP_URL ], https_url )
948948
949949 @mock .patch .dict ("os.environ" , {"NO_PROXY" : "" }, clear = True )
950950 class BaseInstrumentorTest (BaseTest , metaclass = abc .ABCMeta ):
@@ -1036,9 +1036,9 @@ def test_response_hook(self):
10361036 self .assertEqual (
10371037 dict (span .attributes ),
10381038 {
1039- SpanAttributes . HTTP_METHOD : "GET" ,
1040- SpanAttributes . HTTP_URL : self .URL ,
1041- SpanAttributes . HTTP_STATUS_CODE : 200 ,
1039+ HTTP_METHOD : "GET" ,
1040+ HTTP_URL : self .URL ,
1041+ HTTP_STATUS_CODE : 200 ,
10421042 HTTP_RESPONSE_BODY : "Hello!" ,
10431043 },
10441044 )
@@ -1057,9 +1057,9 @@ def test_response_hook_sync_async_kwargs(self):
10571057 self .assertEqual (
10581058 dict (span .attributes ),
10591059 {
1060- SpanAttributes . HTTP_METHOD : "GET" ,
1061- SpanAttributes . HTTP_URL : self .URL ,
1062- SpanAttributes . HTTP_STATUS_CODE : 200 ,
1060+ HTTP_METHOD : "GET" ,
1061+ HTTP_URL : self .URL ,
1062+ HTTP_STATUS_CODE : 200 ,
10631063 HTTP_RESPONSE_BODY : "Hello!" ,
10641064 },
10651065 )
@@ -1162,7 +1162,7 @@ def test_instrumentation_without_client(self):
11621162 with self .subTest (idx = idx , res = res ):
11631163 self .assertEqual (res .text , "Hello!" )
11641164 self .assertEqual (
1165- spans [idx ].attributes [SpanAttributes . HTTP_URL ],
1165+ spans [idx ].attributes [HTTP_URL ],
11661166 self .URL ,
11671167 )
11681168
@@ -1360,12 +1360,12 @@ def test_remove_sensitive_params(self):
13601360 self .perform_request (new_url )
13611361 span = self .assert_span ()
13621362
1363- actual_url = span .attributes [SpanAttributes . HTTP_URL ]
1363+ actual_url = span .attributes [HTTP_URL ]
13641364
13651365 if "@" in actual_url :
13661366 # If credentials are present, they must be redacted
13671367 self .assertEqual (
1368- span .attributes [SpanAttributes . HTTP_URL ],
1368+ span .attributes [HTTP_URL ],
13691369 "http://REDACTED:REDACTED@mock/status/200?sig=REDACTED" ,
13701370 )
13711371 else :
@@ -1446,11 +1446,11 @@ def test_remove_sensitive_params(self):
14461446 self .perform_request (new_url )
14471447 span = self .assert_span ()
14481448
1449- actual_url = span .attributes [SpanAttributes . HTTP_URL ]
1449+ actual_url = span .attributes [HTTP_URL ]
14501450
14511451 if "@" in actual_url :
14521452 self .assertEqual (
1453- span .attributes [SpanAttributes . HTTP_URL ],
1453+ span .attributes [HTTP_URL ],
14541454 "http://REDACTED:REDACTED@mock/status/200?Signature=REDACTED" ,
14551455 )
14561456 else :
@@ -1563,9 +1563,9 @@ def test_async_response_hook_does_nothing_if_not_coroutine(self):
15631563 self .assertEqual (
15641564 dict (span .attributes ),
15651565 {
1566- SpanAttributes . HTTP_METHOD : "GET" ,
1567- SpanAttributes . HTTP_URL : self .URL ,
1568- SpanAttributes . HTTP_STATUS_CODE : 200 ,
1566+ HTTP_METHOD : "GET" ,
1567+ HTTP_URL : self .URL ,
1568+ HTTP_STATUS_CODE : 200 ,
15691569 },
15701570 )
15711571
0 commit comments