diff --git a/sentry_sdk/scope.py b/sentry_sdk/scope.py index 0d3a0c6cd3..96b2bb5594 100644 --- a/sentry_sdk/scope.py +++ b/sentry_sdk/scope.py @@ -904,6 +904,10 @@ def span(self) -> "Optional[Span]": @span.setter def span(self, span: "Optional[Span]") -> None: self._span = span + if span is None: + self._transaction = None + self._transaction_info = {} + return # XXX: this differs from the implementation in JS, there Scope.setSpan # does not set Scope._transactionName. if isinstance(span, Transaction): diff --git a/tests/tracing/test_misc.py b/tests/tracing/test_misc.py index 9690f2ffc0..dd6bbc9f33 100644 --- a/tests/tracing/test_misc.py +++ b/tests/tracing/test_misc.py @@ -428,6 +428,9 @@ def test_start_transaction_updates_scope_name_source(sentry_init): assert scope._transaction == "foobar" assert scope._transaction_info == {"source": "route"} + assert scope._transaction is None + assert scope._transaction_info == {} + @pytest.mark.parametrize("sampled", (True, None)) def test_transaction_dropped_debug_not_started(sentry_init, sampled):