From 132a9c514e77f38a1cb418b0b652163f00835080 Mon Sep 17 00:00:00 2001 From: Daniel Szoke Date: Thu, 25 Jul 2024 16:58:33 +0200 Subject: [PATCH 1/5] test(basics): Stop using `configure_scope` (#3349) Use `Scope.get_isolation_scope` instead. Ref #3344 --- tests/test_basics.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/test_basics.py b/tests/test_basics.py index e1e84340a5..59c2521062 100644 --- a/tests/test_basics.py +++ b/tests/test_basics.py @@ -15,7 +15,6 @@ from sentry_sdk import ( get_client, push_scope, - configure_scope, capture_event, capture_exception, capture_message, @@ -74,13 +73,11 @@ def test_processors(sentry_init, capture_events): sentry_init() events = capture_events() - with configure_scope() as scope: - - def error_processor(event, exc_info): - event["exception"]["values"][0]["value"] += " whatever" - return event + def error_processor(event, exc_info): + event["exception"]["values"][0]["value"] += " whatever" + return event - scope.add_error_processor(error_processor, ValueError) + Scope.get_isolation_scope().add_error_processor(error_processor, ValueError) try: raise ValueError("aha!") @@ -432,9 +429,9 @@ def test_attachments(sentry_init, capture_envelopes): this_file = os.path.abspath(__file__.rstrip("c")) - with configure_scope() as scope: - scope.add_attachment(bytes=b"Hello World!", filename="message.txt") - scope.add_attachment(path=this_file) + scope = Scope.get_isolation_scope() + scope.add_attachment(bytes=b"Hello World!", filename="message.txt") + scope.add_attachment(path=this_file) capture_exception(ValueError()) @@ -466,8 +463,7 @@ def test_attachments_graceful_failure( sentry_init() envelopes = capture_envelopes() - with configure_scope() as scope: - scope.add_attachment(path="non_existent") + Scope.get_isolation_scope().add_attachment(path="non_existent") capture_exception(ValueError()) (envelope,) = envelopes From 1d17d570d7bb0e2750186a56de2cc757488a815c Mon Sep 17 00:00:00 2001 From: Daniel Szoke Date: Thu, 25 Jul 2024 17:08:19 +0200 Subject: [PATCH 2/5] test(client): Avoid `configure_scope` (#3350) Replace the only `configure_scope` usage in `test_client.py`, which can be replaced without defeating the test's purpose, with `Scope.get_isolation_scope`. The other `configure_scope` calls are made either from a test which specifically tests `configure_scope` or from a test which is always skipped. Closes: #3344 --- tests/test_client.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/test_client.py b/tests/test_client.py index 571912ab12..4abf016889 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -686,14 +686,13 @@ def test_cyclic_data(sentry_init, capture_events): sentry_init() events = capture_events() - with configure_scope() as scope: - data = {} - data["is_cyclic"] = data + data = {} + data["is_cyclic"] = data - other_data = "" - data["not_cyclic"] = other_data - data["not_cyclic2"] = other_data - scope.set_extra("foo", data) + other_data = "" + data["not_cyclic"] = other_data + data["not_cyclic2"] = other_data + sentry_sdk.Scope.get_isolation_scope().set_extra("foo", data) capture_message("hi") (event,) = events From 6f11f50f57c02a464056c42903598e9d38f38303 Mon Sep 17 00:00:00 2001 From: Daniel Szoke Date: Thu, 25 Jul 2024 17:29:14 +0200 Subject: [PATCH 3/5] fix(api): Deprecate `configure_scope` (#3351) Although `configure_scope` was meant to be deprecated since Sentry SDK 2.0.0, calling `configure_scope` did not raise a deprecation warning. Now, it does. Fixes #3346 --- sentry_sdk/api.py | 9 +++++++++ tests/test_api.py | 7 +++++++ tests/test_client.py | 4 +++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/sentry_sdk/api.py b/sentry_sdk/api.py index 41c4814146..d28dbd92d0 100644 --- a/sentry_sdk/api.py +++ b/sentry_sdk/api.py @@ -1,4 +1,5 @@ import inspect +import warnings from contextlib import contextmanager from sentry_sdk import tracing_utils, Client @@ -185,6 +186,14 @@ def configure_scope( # noqa: F811 :returns: If no callback is provided, returns a context manager that returns the scope. """ + warnings.warn( + "sentry_sdk.configure_scope is deprecated and will be removed in the next major version. " + "Please consult our migration guide to learn how to migrate to the new API: " + "https://docs.sentry.io/platforms/python/migration/1.x-to-2.x#scope-configuring", + DeprecationWarning, + stacklevel=2, + ) + scope = Scope.get_isolation_scope() scope.generate_propagation_context() diff --git a/tests/test_api.py b/tests/test_api.py index a6c44260d7..1f2a1b783f 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -11,6 +11,7 @@ is_initialized, start_transaction, set_tags, + configure_scope, ) from sentry_sdk.client import Client, NonRecordingClient @@ -179,3 +180,9 @@ def test_set_tags(sentry_init, capture_events): "tag2": "updated", "tag3": "new", }, "Updating tags with empty dict changed tags" + + +def test_configure_scope_deprecation(): + with pytest.warns(DeprecationWarning): + with configure_scope(): + ... diff --git a/tests/test_client.py b/tests/test_client.py index 4abf016889..15a140d377 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -570,7 +570,9 @@ def capture_envelope(self, envelope): assert output.count(b"HI") == num_messages -def test_configure_scope_available(sentry_init, request, monkeypatch): +def test_configure_scope_available( + sentry_init, request, monkeypatch, suppress_deprecation_warnings +): """ Test that scope is configured if client is configured From 20ed5b73ec70ced8323c9a461c53d1771becd3fb Mon Sep 17 00:00:00 2001 From: Daniel Szoke Date: Fri, 26 Jul 2024 11:24:30 +0200 Subject: [PATCH 4/5] test(basics): Replace `push_scope` (#3353) Most of the `push_scope` usages in `test_basics.py` need to stay, as they test functionality specific to `push_scope`. However, in `test_scope_event_processor_order`, the `push_scope` can be replaced with `new_scope`. We make this replacement here. Ref: #3345 --- tests/test_basics.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_basics.py b/tests/test_basics.py index 59c2521062..0bec698a35 100644 --- a/tests/test_basics.py +++ b/tests/test_basics.py @@ -22,6 +22,7 @@ last_event_id, add_breadcrumb, isolation_scope, + new_scope, Hub, Scope, ) @@ -606,14 +607,14 @@ def before_send(event, hint): sentry_init(debug=True, before_send=before_send) events = capture_events() - with push_scope() as scope: + with new_scope() as scope: @scope.add_event_processor def foo(event, hint): event["message"] += "foo" return event - with push_scope() as scope: + with new_scope() as scope: @scope.add_event_processor def bar(event, hint): From c8e93af9740f682d9cb154353c7406c66c1da371 Mon Sep 17 00:00:00 2001 From: Daniel Szoke Date: Fri, 26 Jul 2024 11:37:04 +0200 Subject: [PATCH 5/5] test(sessions): Replace `push_scope` (#3354) All usages of `sentry_sdk.push_scope` in `test_sessions.py` can be replaced with `new_scope`. Closes: #3345 --- tests/test_sessions.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/test_sessions.py b/tests/test_sessions.py index 989bfeadd1..cc25f71cbb 100644 --- a/tests/test_sessions.py +++ b/tests/test_sessions.py @@ -51,9 +51,8 @@ def test_aggregates(sentry_init, capture_envelopes): envelopes = capture_envelopes() with auto_session_tracking(session_mode="request"): - with sentry_sdk.push_scope(): + with sentry_sdk.new_scope() as scope: try: - scope = sentry_sdk.Scope.get_current_scope() scope.set_user({"id": "42"}) raise Exception("all is wrong") except Exception: @@ -92,7 +91,7 @@ def test_aggregates_explicitly_disabled_session_tracking_request_mode( envelopes = capture_envelopes() with auto_session_tracking(session_mode="request"): - with sentry_sdk.push_scope(): + with sentry_sdk.new_scope(): try: raise Exception("all is wrong") except Exception: @@ -127,7 +126,7 @@ def test_no_thread_on_shutdown_no_errors(sentry_init): side_effect=RuntimeError("can't create new thread at interpreter shutdown"), ): with auto_session_tracking(session_mode="request"): - with sentry_sdk.push_scope(): + with sentry_sdk.new_scope(): try: raise Exception("all is wrong") except Exception: