44from typing import Any , Callable , Dict , List , Optional
55
66from opentelemetry import context , trace
7+ from opentelemetry .sdk .trace import ReadableSpan
78from opentelemetry .trace import Span , set_span_in_context
89
910logger = logging .getLogger (__name__ )
@@ -18,7 +19,7 @@ def __init__(self):
1819 self ._spans : Dict [int , Span ] = {} # span_id -> span
1920 self ._parent_map : Dict [int , Optional [int ]] = {} # span_id -> parent_id
2021
21- def register_span (self , span : Span ) -> None :
22+ def register_span (self , span : ReadableSpan ) -> None :
2223 """Register a span and its parent relationship."""
2324 span_id = span .get_span_context ().span_id
2425 parent_id = span .parent .span_id if span .parent else None
@@ -198,9 +199,9 @@ def get_parent_context() -> context.Context:
198199
199200 @staticmethod
200201 def _get_bottom_most_span (
201- current_span : Span ,
202- external_span : Span ,
203- ) -> Span :
202+ current_span : ReadableSpan ,
203+ external_span : ReadableSpan ,
204+ ) -> ReadableSpan :
204205 """Determine which span is deeper in the ancestor tree.
205206
206207 Args:
@@ -257,21 +258,28 @@ def _get_bottom_most_span(
257258 return external_span
258259
259260 @staticmethod
260- def get_external_current_span () -> Optional [Span ]:
261+ def get_external_current_span () -> Optional [ReadableSpan ]:
261262 """Get the current span from the external provider, if any."""
262263 if UiPathTracingManager ._current_span_provider is not None :
263264 try :
264- return UiPathTracingManager ._current_span_provider ()
265+ result = UiPathTracingManager ._current_span_provider ()
266+ return (
267+ result
268+ if result is None or isinstance (result , ReadableSpan )
269+ else None
270+ )
265271 except Exception as e :
266272 logger .warning (f"Error getting current span from provider: { e } " )
267273 return None
268274
269275 @staticmethod
270- def get_ancestor_spans () -> List [Span ]:
276+ def get_ancestor_spans () -> List [ReadableSpan ]:
271277 """Get the ancestor spans from the registered provider, if any."""
272278 if UiPathTracingManager ._current_span_ancestors_provider is not None :
273279 try :
274- return UiPathTracingManager ._current_span_ancestors_provider ()
280+ result = UiPathTracingManager ._current_span_ancestors_provider ()
281+
282+ return [span for span in result if isinstance (span , ReadableSpan )]
275283 except Exception as e :
276284 logger .warning (f"Error getting ancestor spans from provider: { e } " )
277285 return []
0 commit comments