diff --git a/sentry_sdk/tracing.py b/sentry_sdk/tracing.py index fc40221b9f..dd1392d150 100644 --- a/sentry_sdk/tracing.py +++ b/sentry_sdk/tracing.py @@ -602,6 +602,10 @@ def set_data(self, key, value): # type: (str, Any) -> None self._data[key] = value + def update_data(self, data): + # type: (Dict[str, Any]) -> None + self._data.update(data) + def set_flag(self, flag, result): # type: (str, bool) -> None if len(self._flags) < self._flags_capacity: @@ -1275,6 +1279,10 @@ def set_data(self, key, value): # type: (str, Any) -> None pass + def update_data(self, data): + # type: (Dict[str, Any]) -> None + pass + def set_status(self, value): # type: (str) -> None pass diff --git a/tests/tracing/test_misc.py b/tests/tracing/test_misc.py index b954d36e1a..651228b45e 100644 --- a/tests/tracing/test_misc.py +++ b/tests/tracing/test_misc.py @@ -509,3 +509,34 @@ def test_transaction_not_started_warning(sentry_init): "The transaction will not be sent to Sentry. To fix, start the transaction by" "passing it to sentry_sdk.start_transaction." ) + + +def test_span_set_data_update_data(sentry_init, capture_events): + sentry_init(traces_sample_rate=1.0) + + events = capture_events() + + with sentry_sdk.start_transaction(name="test-transaction"): + with start_span(op="test-span") as span: + span.set_data("key0", "value0") + span.set_data("key1", "value1") + + span.update_data( + { + "key1": "updated-value1", + "key2": "value2", + "key3": "value3", + } + ) + + (event,) = events + span = event["spans"][0] + + assert span["data"] == { + "key0": "value0", + "key1": "updated-value1", + "key2": "value2", + "key3": "value3", + "thread.id": mock.ANY, + "thread.name": mock.ANY, + }