asyncio_run helper to deal with a 3.10 warning, refs #1482

pull/1484/head
Simon Willison 2021-10-08 17:32:11 -07:00
rodzic 63886178a6
commit 98dcabccbb
2 zmienionych plików z 14 dodań i 8 usunięć

Wyświetl plik

@ -14,6 +14,7 @@ from runpy import run_module
import webbrowser
from .app import Datasette, DEFAULT_SETTINGS, SETTINGS, SQLITE_LIMIT_ATTACHED, pm
from .utils import (
asyncio_run,
StartupError,
check_connection,
find_spatialite,
@ -136,9 +137,7 @@ def cli():
@click.option("--inspect-file", default="-")
@sqlite_extensions
def inspect(files, inspect_file, sqlite_extensions):
app = Datasette([], immutables=files, sqlite_extensions=sqlite_extensions)
loop = asyncio.get_event_loop()
inspect_data = loop.run_until_complete(inspect_(files, sqlite_extensions))
inspect_data = asyncio_run(inspect_(files, sqlite_extensions))
if inspect_file == "-":
sys.stdout.write(json.dumps(inspect_data, indent=2))
else:
@ -555,10 +554,10 @@ def serve(
return ds
# Run the "startup" plugin hooks
asyncio.get_event_loop().run_until_complete(ds.invoke_startup())
asyncio_run(ds.invoke_startup())
# Run async soundness checks - but only if we're not under pytest
asyncio.get_event_loop().run_until_complete(check_databases(ds))
asyncio_run(check_databases(ds))
if get:
client = TestClient(ds)
@ -578,9 +577,7 @@ def serve(
if open_browser:
if url is None:
# Figure out most convenient URL - to table, database or homepage
path = asyncio.get_event_loop().run_until_complete(
initial_path_for_datasette(ds)
)
path = asyncio_run(initial_path_for_datasette(ds))
url = f"http://{host}:{port}{path}"
webbrowser.open(url)
uvicorn_kwargs = dict(

Wyświetl plik

@ -1089,3 +1089,12 @@ async def derive_named_parameters(db, sql):
return [row["p4"].lstrip(":") for row in results if row["opcode"] == "Variable"]
except sqlite3.DatabaseError:
return possible_params
def asyncio_run(coro):
if hasattr(asyncio, "run"):
# Added in Python 3.7
return asyncio.run(coro)
else:
loop = asyncio.get_event_loop()
return loop.run_until_complete(coro)