@@ -58,9 +58,7 @@ def test_set_attributes_from_context(self):
5858 span .attributes .get (SpanAttributes .MESSAGING_DESTINATION ), "celery"
5959 )
6060
61- self .assertEqual (
62- span .attributes ["celery.delivery_info" ], str ({"eager" : True })
63- )
61+ self .assertEqual (span .attributes ["celery.delivery_info.eager" ], True )
6462 self .assertEqual (span .attributes .get ("celery.eta" ), "soon" )
6563 self .assertEqual (span .attributes .get ("celery.expires" ), "later" )
6664 self .assertEqual (span .attributes .get ("celery.hostname" ), "localhost" )
@@ -72,6 +70,59 @@ def test_set_attributes_from_context(self):
7270 )
7371 self .assertNotIn ("custom_meta" , span .attributes )
7472
73+ def test_set_nested_attributes_from_context (self ):
74+ context = {
75+ "correlation_id" : "44b7f305" ,
76+ "delivery_info" : {
77+ "eager" : True ,
78+ "routing_key" : "api_gateway" ,
79+ "priority" : 0 ,
80+ "redelivered" : False ,
81+ },
82+ "eta" : {"time" : "soon" , "date" : "today" },
83+ "expires" : "later" ,
84+ "hostname" : "localhost" ,
85+ "id" : "44b7f305" ,
86+ "reply_to" : "44b7f305" ,
87+ "retries" : 4 ,
88+ "timelimit" : ("now" , "later" ),
89+ "custom_meta" : "custom_value" ,
90+ "routing_key" : "celery" ,
91+ }
92+
93+ span = trace ._Span ("name" , mock .Mock (spec = trace_api .SpanContext ))
94+ utils .set_attributes_from_context (span , context )
95+
96+ self .assertEqual (
97+ span .attributes .get (SpanAttributes .MESSAGING_MESSAGE_ID ),
98+ "44b7f305" ,
99+ )
100+ self .assertEqual (
101+ span .attributes .get (SpanAttributes .MESSAGING_CONVERSATION_ID ),
102+ "44b7f305" ,
103+ )
104+ self .assertEqual (
105+ span .attributes .get (SpanAttributes .MESSAGING_DESTINATION ), "celery"
106+ )
107+
108+ self .assertEqual (span .attributes ["celery.delivery_info.eager" ], True )
109+ self .assertEqual (
110+ span .attributes ["celery.delivery_info.routing_key" ], "api_gateway"
111+ )
112+ self .assertEqual (span .attributes ["celery.delivery_info.priority" ], 0 )
113+ self .assertEqual (
114+ span .attributes ["celery.delivery_info.redelivered" ], False
115+ )
116+ self .assertEqual (span .attributes .get ("celery.eta.time" ), "soon" )
117+ self .assertEqual (span .attributes .get ("celery.eta.date" ), "today" )
118+
119+ self .assertEqual (span .attributes .get ("celery.reply_to" ), "44b7f305" )
120+ self .assertEqual (span .attributes .get ("celery.retries" ), 4 )
121+ self .assertEqual (
122+ span .attributes .get ("celery.timelimit" ), ("now" , "later" )
123+ )
124+ self .assertNotIn ("custom_meta" , span .attributes )
125+
75126 def test_set_attributes_not_recording (self ):
76127 # it should extract only relevant keys
77128 context = {
0 commit comments