Skip to content

Commit 5a6b5d4

Browse files
authored
Test with Flask 3.0 (#2506)
- run test suite with Flask 3.0 - fix `request.get_json()` in the tests (Flask/Werkzeug 3.0 now throws an `UnsupportedMediaType` exception if the `Content-Type` isn't `application/json`)
1 parent 44b0244 commit 5a6b5d4

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

tests/integrations/flask/test_flask.py

+31-9
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import json
22
import re
3-
import pytest
43
import logging
5-
64
from io import BytesIO
75

6+
import pytest
87
from flask import (
98
Flask,
109
Response,
@@ -14,9 +13,14 @@
1413
render_template_string,
1514
)
1615
from flask.views import View
17-
1816
from flask_login import LoginManager, login_user
1917

18+
try:
19+
from werkzeug.wrappers.request import UnsupportedMediaType
20+
except ImportError:
21+
UnsupportedMediaType = None
22+
23+
import sentry_sdk.integrations.flask as flask_sentry
2024
from sentry_sdk import (
2125
set_tag,
2226
configure_scope,
@@ -26,7 +30,6 @@
2630
Hub,
2731
)
2832
from sentry_sdk.integrations.logging import LoggingIntegration
29-
import sentry_sdk.integrations.flask as flask_sentry
3033
from sentry_sdk.serializer import MAX_DATABAG_BREADTH
3134

3235

@@ -340,7 +343,11 @@ def test_flask_medium_formdata_request(sentry_init, capture_events, app):
340343
def index():
341344
assert request.form["foo"] == data["foo"]
342345
assert not request.get_data()
343-
assert not request.get_json()
346+
try:
347+
assert not request.get_json()
348+
except UnsupportedMediaType:
349+
# flask/werkzeug 3
350+
pass
344351
capture_message("hi")
345352
return "ok"
346353

@@ -372,7 +379,11 @@ def index():
372379
assert request.form["username"] == data["username"]
373380
assert request.form["age"] == data["age"]
374381
assert not request.get_data()
375-
assert not request.get_json()
382+
try:
383+
assert not request.get_json()
384+
except UnsupportedMediaType:
385+
# flask/werkzeug 3
386+
pass
376387
set_tag("view", "yes")
377388
capture_message("hi")
378389
return "ok"
@@ -405,7 +416,11 @@ def index():
405416
assert request.get_data() == data
406417
else:
407418
assert request.get_data() == data.encode("ascii")
408-
assert not request.get_json()
419+
try:
420+
assert not request.get_json()
421+
except UnsupportedMediaType:
422+
# flask/werkzeug 3
423+
pass
409424
capture_message("hi")
410425
return "ok"
411426

@@ -431,7 +446,11 @@ def test_flask_files_and_form(sentry_init, capture_events, app):
431446
def index():
432447
assert list(request.form) == ["foo"]
433448
assert list(request.files) == ["file"]
434-
assert not request.get_json()
449+
try:
450+
assert not request.get_json()
451+
except UnsupportedMediaType:
452+
# flask/werkzeug 3
453+
pass
435454
capture_message("hi")
436455
return "ok"
437456

@@ -545,9 +564,12 @@ def test_cli_commands_raise(app):
545564
def foo():
546565
1 / 0
547566

567+
def create_app(*_):
568+
return app
569+
548570
with pytest.raises(ZeroDivisionError):
549571
app.cli.main(
550-
args=["foo"], prog_name="myapp", obj=ScriptInfo(create_app=lambda _: app)
572+
args=["foo"], prog_name="myapp", obj=ScriptInfo(create_app=create_app)
551573
)
552574

553575

tox.ini

+4-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ envlist =
9595
{py2.7,py3.5,py3.6,py3.7,py3.8,py3.9}-flask-v{0.11,0.12,1.0}
9696
{py2.7,py3.5,py3.6,py3.7,py3.8,py3.9,py3.10,py3.11}-flask-v{1.1}
9797
{py3.6,py3.8,py3.9,py3.10,py3.11,py3.12}-flask-v{2.0}
98+
{py3.10,py3.11,py3.12}-flask-v{3.0}
9899

99100
# Gevent
100101
{py2.7,py3.6,py3.7,py3.8,py3.9,py3.10,py3.11}-gevent
@@ -333,12 +334,14 @@ deps =
333334

334335
# Flask
335336
flask: flask-login
336-
flask: Werkzeug<2.1.0
337+
flask-v{0.11,0.12,1.0,1.1,2.0}: Werkzeug<2.1.0
338+
flask-v{3.0}: Werkzeug
337339
flask-v0.11: Flask>=0.11,<0.12
338340
flask-v0.12: Flask>=0.12,<0.13
339341
flask-v1.0: Flask>=1.0,<1.1
340342
flask-v1.1: Flask>=1.1,<1.2
341343
flask-v2.0: Flask>=2.0,<2.1
344+
flask-v3.0: Flask>=3.0,<3.1
342345

343346
# Gevent
344347
# See http://www.gevent.org/install.html#older-versions-of-python

0 commit comments

Comments
 (0)