"""Async executor versions of file functions from the os module.""" import asyncio from functools import partial, wraps import os def wrap(func): @asyncio.coroutine @wraps(func) def run(*args, loop=None, executor=None, **kwargs): if loop is None: loop = asyncio.get_event_loop() pfunc = partial(func, *args, **kwargs) return loop.run_in_executor(executor, pfunc) return run stat = wrap(os.stat) if hasattr(os, "sendfile"): sendfile = wrap(os.sendfile)