Skip to content

Commit 066ade1

Browse files
committed
Merge branch 'master' into potel-base
2 parents f0a6f5e + 3d8445c commit 066ade1

File tree

6 files changed

+34
-137
lines changed

6 files changed

+34
-137
lines changed

sentry_sdk/integrations/wsgi.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
from sentry_sdk.integrations._wsgi_common import (
1010
DEFAULT_HTTP_METHODS_TO_CAPTURE,
1111
_filter_headers,
12+
nullcontext,
1213
)
1314
from sentry_sdk.sessions import track_session
15+
from sentry_sdk.scope import use_isolation_scope
1416
from sentry_sdk.tracing import Transaction, TRANSACTION_SOURCE_ROUTE
1517
from sentry_sdk.utils import (
1618
ContextVar,

sentry_sdk/tracing_utils.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@
3636

3737
from types import FrameType
3838

39-
from sentry_sdk._types import ExcInfo
40-
from threading import Timer
41-
4239

4340
SENTRY_TRACE_REGEX = re.compile(
4441
"^[ \t]*" # whitespace
@@ -737,12 +734,3 @@ def get_current_span(scope=None):
737734

738735
if TYPE_CHECKING:
739736
from sentry_sdk.tracing import Span
740-
741-
742-
def finish_running_transaction(transaction=None, exc_info=None):
743-
# type: (Optional[sentry_sdk.Transaction], Optional[ExcInfo]) -> None
744-
if transaction is not None and hasattr(transaction, "_ctx_token"):
745-
if exc_info is not None:
746-
transaction.__exit__(*exc_info)
747-
else:
748-
transaction.__exit__(None, None, None)

tests/integrations/django/test_basic.py

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def test_view_exceptions(sentry_init, client, capture_exceptions, capture_events
5050
sentry_init(integrations=[DjangoIntegration()], send_default_pii=True)
5151
exceptions = capture_exceptions()
5252
events = capture_events()
53-
unpack_werkzeug_response(client.get(reverse("view_exc")))
53+
client.get(reverse("view_exc"))
5454

5555
(error,) = exceptions
5656
assert isinstance(error, ZeroDivisionError)
@@ -71,9 +71,7 @@ def test_ensures_x_forwarded_header_is_honored_in_sdk_when_enabled_in_django(
7171
sentry_init(integrations=[DjangoIntegration()], send_default_pii=True)
7272
exceptions = capture_exceptions()
7373
events = capture_events()
74-
unpack_werkzeug_response(
75-
client.get(reverse("view_exc"), headers={"X_FORWARDED_HOST": "example.com"})
76-
)
74+
client.get(reverse("view_exc"), headers={"X_FORWARDED_HOST": "example.com"})
7775

7876
(error,) = exceptions
7977
assert isinstance(error, ZeroDivisionError)
@@ -92,9 +90,7 @@ def test_ensures_x_forwarded_header_is_not_honored_when_unenabled_in_django(
9290
sentry_init(integrations=[DjangoIntegration()], send_default_pii=True)
9391
exceptions = capture_exceptions()
9492
events = capture_events()
95-
unpack_werkzeug_response(
96-
client.get(reverse("view_exc"), headers={"X_FORWARDED_HOST": "example.com"})
97-
)
93+
client.get(reverse("view_exc"), headers={"X_FORWARDED_HOST": "example.com"})
9894

9995
(error,) = exceptions
10096
assert isinstance(error, ZeroDivisionError)
@@ -106,7 +102,7 @@ def test_ensures_x_forwarded_header_is_not_honored_when_unenabled_in_django(
106102
def test_middleware_exceptions(sentry_init, client, capture_exceptions):
107103
sentry_init(integrations=[DjangoIntegration()], send_default_pii=True)
108104
exceptions = capture_exceptions()
109-
unpack_werkzeug_response(client.get(reverse("middleware_exc")))
105+
client.get(reverse("middleware_exc"))
110106

111107
(error,) = exceptions
112108
assert isinstance(error, ZeroDivisionError)
@@ -160,7 +156,7 @@ def test_has_trace_if_performance_enabled(sentry_init, client, capture_events):
160156
traces_sample_rate=1.0,
161157
)
162158
events = capture_events()
163-
unpack_werkzeug_response(client.head(reverse("view_exc_with_msg")))
159+
client.head(reverse("view_exc_with_msg"))
164160

165161
(msg_event, error_event, transaction_event) = events
166162

@@ -216,10 +212,8 @@ def test_trace_from_headers_if_performance_enabled(sentry_init, client, capture_
216212
trace_id = "582b43a4192642f0b136d5159a501701"
217213
sentry_trace_header = "{}-{}-{}".format(trace_id, "6e8f22c393e68f19", 1)
218214

219-
unpack_werkzeug_response(
220-
client.head(
221-
reverse("view_exc_with_msg"), headers={"sentry-trace": sentry_trace_header}
222-
)
215+
client.head(
216+
reverse("view_exc_with_msg"), headers={"sentry-trace": sentry_trace_header}
223217
)
224218

225219
(msg_event, error_event, transaction_event) = events
@@ -936,7 +930,7 @@ def test_render_spans(sentry_init, client, capture_events, render_span_tree):
936930

937931
for url, expected_line in views_tests:
938932
events = capture_events()
939-
unpack_werkzeug_response(client.get(url))
933+
client.get(url)
940934
transaction = events[0]
941935
assert expected_line in render_span_tree(transaction)
942936

@@ -980,7 +974,7 @@ def test_middleware_spans(sentry_init, client, capture_events, render_span_tree)
980974
)
981975
events = capture_events()
982976

983-
unpack_werkzeug_response(client.get(reverse("message")))
977+
client.get(reverse("message"))
984978

985979
message, transaction = events
986980

@@ -997,7 +991,7 @@ def test_middleware_spans_disabled(sentry_init, client, capture_events):
997991
)
998992
events = capture_events()
999993

1000-
unpack_werkzeug_response(client.get(reverse("message")))
994+
client.get(reverse("message"))
1001995

1002996
message, transaction = events
1003997

@@ -1021,7 +1015,7 @@ def test_signals_spans(sentry_init, client, capture_events, render_span_tree):
10211015
)
10221016
events = capture_events()
10231017

1024-
unpack_werkzeug_response(client.get(reverse("message")))
1018+
client.get(reverse("message"))
10251019

10261020
message, transaction = events
10271021

@@ -1044,7 +1038,7 @@ def test_signals_spans_disabled(sentry_init, client, capture_events):
10441038
)
10451039
events = capture_events()
10461040

1047-
unpack_werkzeug_response(client.get(reverse("message")))
1041+
client.get(reverse("message"))
10481042

10491043
message, transaction = events
10501044

@@ -1074,7 +1068,7 @@ def test_signals_spans_filtering(sentry_init, client, capture_events, render_spa
10741068
)
10751069
events = capture_events()
10761070

1077-
unpack_werkzeug_response(client.get(reverse("send_myapp_custom_signal")))
1071+
client.get(reverse("send_myapp_custom_signal"))
10781072

10791073
(transaction,) = events
10801074

@@ -1202,7 +1196,7 @@ def test_span_origin(sentry_init, client, capture_events):
12021196
)
12031197
events = capture_events()
12041198

1205-
unpack_werkzeug_response(client.get(reverse("view_with_signal")))
1199+
client.get(reverse("view_with_signal"))
12061200

12071201
(transaction,) = events
12081202

@@ -1232,9 +1226,9 @@ def test_transaction_http_method_default(sentry_init, client, capture_events):
12321226
)
12331227
events = capture_events()
12341228

1235-
unpack_werkzeug_response(client.get(reverse("nomessage")))
1236-
unpack_werkzeug_response(client.options(reverse("nomessage")))
1237-
unpack_werkzeug_response(client.head(reverse("nomessage")))
1229+
client.get(reverse("nomessage"))
1230+
client.options(reverse("nomessage"))
1231+
client.head(reverse("nomessage"))
12381232

12391233
(event,) = events
12401234

@@ -1258,9 +1252,9 @@ def test_transaction_http_method_custom(sentry_init, client, capture_events):
12581252
)
12591253
events = capture_events()
12601254

1261-
unpack_werkzeug_response(client.get(reverse("nomessage")))
1262-
unpack_werkzeug_response(client.options(reverse("nomessage")))
1263-
unpack_werkzeug_response(client.head(reverse("nomessage")))
1255+
client.get("/nomessage")
1256+
client.options("/nomessage")
1257+
client.head("/nomessage")
12641258

12651259
assert len(events) == 2
12661260

tests/integrations/flask/test_flask.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,6 @@ def index():
394394
client = app.test_client()
395395
response = client.post("/", data=data)
396396
assert response.status_code == 200
397-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
398-
response.close()
399397

400398
event, transaction_event = events
401399

@@ -748,8 +746,6 @@ def hi_tx():
748746
with app.test_client() as client:
749747
response = client.get("/message_tx")
750748
assert response.status_code == 200
751-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
752-
response.close()
753749

754750
message_event, transaction_event = events
755751

@@ -944,9 +940,7 @@ def test_response_status_code_not_found_in_transaction_context(
944940
envelopes = capture_envelopes()
945941

946942
client = app.test_client()
947-
response = client.get("/not-existing-route")
948-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
949-
response.close()
943+
client.get("/not-existing-route")
950944

951945
sentry_sdk.get_client().flush()
952946

@@ -991,21 +985,14 @@ def test_transaction_http_method_default(
991985
events = capture_events()
992986

993987
client = app.test_client()
994-
995988
response = client.get("/nomessage")
996989
assert response.status_code == 200
997-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
998-
response.close()
999990

1000991
response = client.options("/nomessage")
1001992
assert response.status_code == 200
1002-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
1003-
response.close()
1004993

1005994
response = client.head("/nomessage")
1006995
assert response.status_code == 200
1007-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
1008-
response.close()
1009996

1010997
(event,) = events
1011998

@@ -1035,21 +1022,14 @@ def test_transaction_http_method_custom(
10351022
events = capture_events()
10361023

10371024
client = app.test_client()
1038-
10391025
response = client.get("/nomessage")
10401026
assert response.status_code == 200
1041-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
1042-
response.close()
10431027

10441028
response = client.options("/nomessage")
10451029
assert response.status_code == 200
1046-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
1047-
response.close()
10481030

10491031
response = client.head("/nomessage")
10501032
assert response.status_code == 200
1051-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
1052-
response.close()
10531033

10541034
assert len(events) == 2
10551035

tests/integrations/strawberry/test_strawberry.py

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,7 @@ def test_capture_request_if_available_and_send_pii_is_on(
198198
client = client_factory(schema)
199199

200200
query = "query ErrorQuery { error }"
201-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
202-
client.post(
203-
"/graphql", json={"query": query, "operationName": "ErrorQuery"}
204-
).close()
201+
client.post("/graphql", json={"query": query, "operationName": "ErrorQuery"})
205202

206203
assert len(events) == 1
207204

@@ -256,10 +253,7 @@ def test_do_not_capture_request_if_send_pii_is_off(
256253
client = client_factory(schema)
257254

258255
query = "query ErrorQuery { error }"
259-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
260-
client.post(
261-
"/graphql", json={"query": query, "operationName": "ErrorQuery"}
262-
).close()
256+
client.post("/graphql", json={"query": query, "operationName": "ErrorQuery"})
263257

264258
assert len(events) == 1
265259

@@ -299,8 +293,7 @@ def test_breadcrumb_no_operation_name(
299293
client = client_factory(schema)
300294

301295
query = "{ error }"
302-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
303-
client.post("/graphql", json={"query": query}).close()
296+
client.post("/graphql", json={"query": query})
304297

305298
assert len(events) == 1
306299

@@ -339,10 +332,7 @@ def test_capture_transaction_on_error(
339332
client = client_factory(schema)
340333

341334
query = "query ErrorQuery { error }"
342-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
343-
client.post(
344-
"/graphql", json={"query": query, "operationName": "ErrorQuery"}
345-
).close()
335+
client.post("/graphql", json={"query": query, "operationName": "ErrorQuery"})
346336

347337
assert len(events) == 2
348338
(_, transaction_event) = events
@@ -419,10 +409,7 @@ def test_capture_transaction_on_success(
419409
client = client_factory(schema)
420410

421411
query = "query GreetingQuery { hello }"
422-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
423-
client.post(
424-
"/graphql", json={"query": query, "operationName": "GreetingQuery"}
425-
).close()
412+
client.post("/graphql", json={"query": query, "operationName": "GreetingQuery"})
426413

427414
assert len(events) == 1
428415
(transaction_event,) = events
@@ -499,8 +486,7 @@ def test_transaction_no_operation_name(
499486
client = client_factory(schema)
500487

501488
query = "{ hello }"
502-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
503-
client.post("/graphql", json={"query": query}).close()
489+
client.post("/graphql", json={"query": query})
504490

505491
assert len(events) == 1
506492
(transaction_event,) = events
@@ -580,8 +566,7 @@ def test_transaction_mutation(
580566
client = client_factory(schema)
581567

582568
query = 'mutation Change { change(attribute: "something") }'
583-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
584-
client.post("/graphql", json={"query": query}).close()
569+
client.post("/graphql", json={"query": query})
585570

586571
assert len(events) == 1
587572
(transaction_event,) = events
@@ -656,8 +641,7 @@ def test_handle_none_query_gracefully(
656641
client_factory = request.getfixturevalue(client_factory)
657642
client = client_factory(schema)
658643

659-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
660-
client.post("/graphql", json={}).close()
644+
client.post("/graphql", json={})
661645

662646
assert len(events) == 0, "expected no events to be sent to Sentry"
663647

@@ -689,8 +673,7 @@ def test_span_origin(
689673
client = client_factory(schema)
690674

691675
query = 'mutation Change { change(attribute: "something") }'
692-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
693-
client.post("/graphql", json={"query": query}).close()
676+
client.post("/graphql", json={"query": query})
694677

695678
(event,) = events
696679

@@ -732,10 +715,7 @@ def test_span_origin2(
732715
client = client_factory(schema)
733716

734717
query = "query GreetingQuery { hello }"
735-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
736-
client.post(
737-
"/graphql", json={"query": query, "operationName": "GreetingQuery"}
738-
).close()
718+
client.post("/graphql", json={"query": query, "operationName": "GreetingQuery"})
739719

740720
(event,) = events
741721

@@ -777,8 +757,7 @@ def test_span_origin3(
777757
client = client_factory(schema)
778758

779759
query = "subscription { messageAdded { content } }"
780-
# Close the response to ensure the WSGI cycle is complete and the transaction is finished
781-
client.post("/graphql", json={"query": query}).close()
760+
client.post("/graphql", json={"query": query})
782761

783762
(event,) = events
784763

0 commit comments

Comments
 (0)