Source code for pybeehive.asyn.utils

from functools import wraps


[docs]class AsyncContextManager: def __init__(self, gen): self.gen = gen async def __aenter__(self): return self.gen.__aiter__() async def __aexit__(self, exc_type, exc_val, exc_tb): if exc_val is not None: raise exc_type(exc_val).with_traceback(exc_tb) else: self.gen.aclose()
[docs]class AsyncGenerator: def __init__(self, f, *args, **kwargs): self.f = f self.args = args self.kwargs = kwargs def __aiter__(self): return self async def __anext__(self): return await self.f(*self.args, **self.kwargs)
[docs]def async_generator(f): @wraps(f) def decorated_function(*args, **kwargs): return AsyncGenerator(f, *args, **kwargs) return decorated_function