"""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