@@ -175,8 +175,24 @@ def __init__(
175175 self ._disable_xray_trace_batching ()
176176
177177 def set_attribute (self , key : str , value : Union [str , numbers .Number , bool ]):
178+ """Set attribute on current active trace entity with a key-value pair.
179+
180+ Parameters
181+ ----------
182+ key : str
183+ attribute key
184+ value : Union[str, numbers.Number, bool]
185+ Value for attribute
186+
187+ Example
188+ -------
189+ Set attribute for a pseudo service named payment
190+
191+ tracer = Tracer(service="payment")
192+ tracer.set_attribute("PaymentStatus", "CONFIRMED")
193+ """
178194 if self .disabled :
179- logger .debug ("Tracing has been disabled, aborting put_annotation " )
195+ logger .debug ("Tracing has been disabled, aborting set_attribute " )
180196 return
181197
182198 logger .debug (f"setting attribute on key '{ key } ' with '{ value } '" )
@@ -206,10 +222,10 @@ def put_annotation(self, key: str, value: Union[str, numbers.Number, bool]):
206222
207223 logger .debug (f"Annotating on key '{ key } ' with '{ value } '" )
208224
209- if not self ._is_custom_provider ():
210- self .provider .put_annotation (key = key , value = value ) # type: ignore
211- else :
225+ if self ._is_custom_provider ():
212226 self .provider .set_attribute (key = key , value = value )
227+ else :
228+ self .provider .put_annotation (key = key , value = value ) # type: ignore
213229
214230 def put_metadata (self , key : str , value : Any , namespace : Optional [str ] = None ):
215231 """Adds metadata to existing segment or subsegment
@@ -237,10 +253,10 @@ def put_metadata(self, key: str, value: Any, namespace: Optional[str] = None):
237253
238254 namespace = namespace or self .service
239255 logger .debug (f"Adding metadata on key '{ key } ' with '{ value } ' at namespace '{ namespace } '" )
240- if not self ._is_custom_provider ():
241- self .provider .put_metadata (key = key , value = value , namespace = namespace ) # type: ignore
242- else :
256+ if self ._is_custom_provider ():
243257 self .provider .set_attribute (key = f"{ namespace } .{ key } " , value = value )
258+ else :
259+ self .provider .put_metadata (key = key , value = value , namespace = namespace ) # type: ignore
244260
245261 def patch (self , modules : Optional [Sequence [str ]] = None ):
246262 """Patch modules for instrumentation.
@@ -348,19 +364,19 @@ def decorate(event, context, **kwargs):
348364 finally :
349365 global is_cold_start
350366 logger .debug ("Annotating cold start" )
351- if not self ._is_custom_provider ():
352- subsegment .put_annotation (key = "ColdStart" , value = is_cold_start )
353- else :
367+ if self ._is_custom_provider ():
354368 subsegment .set_attribute (key = "ColdStart" , value = is_cold_start )
369+ else :
370+ subsegment .put_annotation (key = "ColdStart" , value = is_cold_start )
355371
356372 if is_cold_start :
357373 is_cold_start = False
358374
359375 if self .service :
360- if not self ._is_custom_provider ():
361- subsegment .put_annotation (key = "Service" , value = self .service )
362- else :
376+ if self ._is_custom_provider ():
363377 subsegment .set_attribute (key = "Service" , value = self .service )
378+ else :
379+ subsegment .put_annotation (key = "Service" , value = self .service )
364380
365381 return response
366382
@@ -739,10 +755,10 @@ def _add_response_as_metadata(
739755 """
740756 if data is None or not capture_response or subsegment is None :
741757 return
742- if not self ._is_custom_provider ():
743- subsegment .put_metadata (key = f"{ method_name } response" , value = data , namespace = self .service ) # type: ignore
744- else :
758+ if self ._is_custom_provider ():
745759 subsegment .set_attribute (key = f"{ method_name } response" , value = data , namespace = self .service )
760+ else :
761+ subsegment .put_metadata (key = f"{ method_name } response" , value = data , namespace = self .service ) # type: ignore
746762
747763 def _add_full_exception_as_metadata (
748764 self ,
@@ -767,14 +783,14 @@ def _add_full_exception_as_metadata(
767783 if not capture_error :
768784 return
769785
770- if not self ._is_custom_provider ():
771- subsegment .put_metadata (key = f"{ method_name } error" , value = error , namespace = self .service ) # type: ignore
772- else :
786+ if self ._is_custom_provider ():
773787 subsegment .set_attribute (
774788 key = f"{ self .service } .{ method_name } error" ,
775789 value = str (error ),
776790 namespace = self .service ,
777791 )
792+ else :
793+ subsegment .put_metadata (key = f"{ method_name } error" , value = error , namespace = self .service ) # type: ignore
778794
779795 @staticmethod
780796 def _disable_tracer_provider ():
@@ -858,6 +874,7 @@ def _is_xray_provider(self):
858874 return isinstance (self .provider , XrayProvider )
859875
860876 def _is_custom_provider (self ):
877+ # check if provider is not default xray_provider. Avoid test conflits
861878 return not self ._is_xray_provider () and isinstance (self .provider , BaseProvider )
862879
863880 def ignore_endpoint (self , hostname : Optional [str ] = None , urls : Optional [List [str ]] = None ):
0 commit comments