forked from orbit-oss/flask
Werkzeug offers a ContextVar replacement for Python < 3.7, however it doesn't work across asyncio tasks, hence it makes sense to error out rather than find there are odd bugs. Note the docs build requires the latest (dev) Werkzeug due to this change (to import ContextVar from werkzeug.local).
42 lines
1 KiB
Python
42 lines
1 KiB
Python
import asyncio
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from flask import abort
|
|
from flask import Flask
|
|
from flask import request
|
|
from flask.helpers import run_async
|
|
|
|
|
|
@pytest.fixture(name="async_app")
|
|
def _async_app():
|
|
app = Flask(__name__)
|
|
|
|
@app.route("/", methods=["GET", "POST"])
|
|
async def index():
|
|
await asyncio.sleep(0)
|
|
return request.method
|
|
|
|
@app.route("/error")
|
|
async def error():
|
|
abort(412)
|
|
|
|
return app
|
|
|
|
|
|
@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires Python >= 3.7")
|
|
def test_async_request_context(async_app):
|
|
test_client = async_app.test_client()
|
|
response = test_client.get("/")
|
|
assert b"GET" in response.get_data()
|
|
response = test_client.post("/")
|
|
assert b"POST" in response.get_data()
|
|
response = test_client.get("/error")
|
|
assert response.status_code == 412
|
|
|
|
|
|
@pytest.mark.skipif(sys.version_info >= (3, 7), reason="should only raise Python < 3.7")
|
|
def test_async_runtime_error():
|
|
with pytest.raises(RuntimeError):
|
|
run_async(None)
|