40 lines
708 B
Python
40 lines
708 B
Python
|
"""Set of utility functions for unasync that transform into sync counterparts cleanly"""
|
||
|
|
||
|
import inspect
|
||
|
|
||
|
_original_next = next
|
||
|
|
||
|
|
||
|
def is_async_mode():
|
||
|
"""Tests if we're in the async part of the code or not"""
|
||
|
|
||
|
async def f():
|
||
|
"""Unasync transforms async functions in sync functions"""
|
||
|
return None
|
||
|
|
||
|
obj = f()
|
||
|
if obj is None:
|
||
|
return False
|
||
|
else:
|
||
|
obj.close() # prevent unawaited coroutine warning
|
||
|
return True
|
||
|
|
||
|
|
||
|
ASYNC_MODE = is_async_mode()
|
||
|
|
||
|
|
||
|
async def anext(x):
|
||
|
return await x.__anext__()
|
||
|
|
||
|
|
||
|
async def await_if_coro(x):
|
||
|
if inspect.iscoroutine(x):
|
||
|
return await x
|
||
|
return x
|
||
|
|
||
|
|
||
|
next = _original_next
|
||
|
|
||
|
|
||
|
def return_non_coro(x):
|
||
|
return x
|