Simplify the async handling code
Firstly `run_sync` was a misleading name as it didn't run anything, instead I think `async_to_sync` is much clearer as it converts a coroutine function to a function. (Name stolen from asgiref). Secondly trying to run the ensure_sync during registration made the code more complex and brittle, e.g. the _flask_async_wrapper usage. This was done to pay any setup costs during registration rather than runtime, however this only saved a iscoroutne check. It allows the weirdness of the Blueprint and Scaffold ensure_sync methods to be removed. Switching to runtime ensure_sync usage provides a method for extensions to also support async, as now documented.
This commit is contained in:
parent
cb13128cf0
commit
7f87f3dd93
6 changed files with 53 additions and 68 deletions
|
|
@ -6,7 +6,7 @@ import pytest
|
|||
from flask import Blueprint
|
||||
from flask import Flask
|
||||
from flask import request
|
||||
from flask.helpers import run_async
|
||||
from flask.helpers import async_to_sync
|
||||
|
||||
pytest.importorskip("asgiref")
|
||||
|
||||
|
|
@ -137,4 +137,4 @@ def test_async_before_after_request():
|
|||
@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)
|
||||
async_to_sync(None)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue