24 lines
745 B
Python
24 lines
745 B
Python
import asyncio
|
|
from typing import Any, Awaitable
|
|
|
|
from quart.globals import _app_ctx_stack, _request_ctx_stack, _websocket_ctx_stack
|
|
|
|
|
|
def sync_with_context(future: Awaitable) -> Any:
|
|
context = None
|
|
if _request_ctx_stack.top is not None:
|
|
context = _request_ctx_stack.top.copy()
|
|
elif _websocket_ctx_stack.top is not None:
|
|
context = _websocket_ctx_stack.top.copy()
|
|
elif _app_ctx_stack.top is not None:
|
|
context = _app_ctx_stack.top.copy()
|
|
|
|
async def context_wrapper() -> Any:
|
|
if context is not None:
|
|
async with context:
|
|
return await future
|
|
else:
|
|
return await future
|
|
|
|
return asyncio.get_event_loop().sync_wait(context_wrapper()) # type: ignore
|