import asyncio
import functools
from concurrent.futures import ThreadPoolExecutor
_db_executor = ThreadPoolExecutor(max_workers=1)
_db_instance = None
[docs]def make_async():
def decorator(func):
@functools.wraps(func)
async def async_version(*args, loop=None, **kwargs):
loop = loop or asyncio.get_event_loop()
target = functools.partial(func, *args, **kwargs)
return await loop.run_in_executor(_db_executor, target)
return async_version
return decorator
[docs]def register_db(db):
global _db_instance
_db_instance = db
[docs]def get_db():
if not _db_instance:
raise RuntimeWarning('Database not set. Use `register_db`.')
return _db_instance