30 lines
941 B
Python
30 lines
941 B
Python
|
#!/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']
|