@@ -199,7 +199,6 @@ class StreamedSpan:
199199 "_parent_sampled" ,
200200 "_start_timestamp" ,
201201 "_start_timestamp_monotonic_ns" ,
202- "_finished" ,
203202 "_timestamp" ,
204203 "_status" ,
205204 "_scope" ,
@@ -238,7 +237,6 @@ def __init__(
238237
239238 self ._start_timestamp = datetime .now (timezone .utc )
240239 self ._timestamp : "Optional[datetime]" = None
241- self ._finished : bool = False
242240
243241 try :
244242 # profiling depends on this value and requires that
@@ -282,15 +280,7 @@ def end(self, end_timestamp: "Optional[Union[float, datetime]]" = None) -> None:
282280 :param end_timestamp: End timestamp to use instead of current time.
283281 :type end_timestamp: "Optional[Union[float, datetime]]"
284282 """
285- try :
286- if end_timestamp and self ._timestamp is None :
287- if isinstance (end_timestamp , float ):
288- end_timestamp = datetime .fromtimestamp (end_timestamp , timezone .utc )
289- self ._timestamp = end_timestamp
290- except AttributeError :
291- logger .debug (f"Failed to set end_timestamp: { end_timestamp } " )
292-
293- self ._end ()
283+ self ._end (end_timestamp )
294284
295285 def finish (self , end_timestamp : "Optional[Union[float, datetime]]" = None ) -> None :
296286 warnings .warn (
@@ -307,8 +297,8 @@ def _start(self) -> None:
307297 self ._scope .span = self
308298 self ._previous_span_on_scope = old_span
309299
310- def _end (self ) -> None :
311- if self ._finished is True :
300+ def _end (self , end_timestamp : "Optional[Union[float, datetime]]" = None ) -> None :
301+ if self ._timestamp is not None :
312302 # This span is already finished, ignore.
313303 return
314304
@@ -323,7 +313,15 @@ def _end(self) -> None:
323313 self .set_attribute ("sentry.segment.id" , self ._segment .span_id )
324314 self .set_attribute ("sentry.segment.name" , self ._segment .name )
325315
326- # Set the end timestamp if not set yet (e.g. via span.end(<timestamp>))
316+ # Set the end timestamp
317+ if end_timestamp is not None :
318+ try :
319+ if isinstance (end_timestamp , float ):
320+ end_timestamp = datetime .fromtimestamp (end_timestamp , timezone .utc )
321+ self ._timestamp = end_timestamp
322+ except Exception :
323+ logger .debug (f"Failed to set end_timestamp: { end_timestamp } " )
324+
327325 if self ._timestamp is None :
328326 try :
329327 elapsed = nanosecond_time () - self ._start_timestamp_monotonic_ns
@@ -333,8 +331,6 @@ def _end(self) -> None:
333331 except AttributeError :
334332 self ._timestamp = datetime .now (timezone .utc )
335333
336- self ._finished = True
337-
338334 client = sentry_sdk .get_client ()
339335 if not client .is_active ():
340336 return
0 commit comments