sqlite3tricks-py/async_function.py

30 lines
941 B
Python
Raw Permalink Normal View History

2020-03-30 09:00:00 -04:00
#!/usr/bin/env python3
import sys
import asyncio
def get_event_loop():
if get_event_loop.loop:
return get_event_loop.loop
try:
loop = asyncio.get_running_loop()
except RuntimeError:
if sys.platform != 'win32':
loop = asyncio.new_event_loop()
else:
loop = asyncio.ProactorEventLoop()
get_event_loop.loop = loop
return loop
get_event_loop.loop = None
def create_function(conn, name, num_params, func, deterministic=False):
original_create_function = conn._create_function if hasattr(conn, '_create_function') else conn.create_function
if conn.create_function == create_function:
fn = conn._create_function
if asyncio.iscoroutinefunction(func):
return original_create_function(name, num_params, (lambda *args: get_event_loop().run_until_complete(func(*args))), deterministic=deterministic)
else:
return original_create_function(name, num_params, func, deterministic=deterministic)
__all__ = ['create_function']