1"""Async executor versions of file functions from the os module."""
2import asyncio
3from functools import partial, wraps
4import os
5
6
7def wrap(func):
8    @wraps(func)
9    async def run(*args, loop=None, executor=None, **kwargs):
10        if loop is None:
11            loop = asyncio.get_event_loop()
12        pfunc = partial(func, *args, **kwargs)
13        return await loop.run_in_executor(executor, pfunc)
14
15    return run
16
17
18from . import ospath as path
19
20
21stat = wrap(os.stat)
22rename = wrap(os.rename)
23replace = wrap(os.replace)
24remove = wrap(os.remove)
25mkdir = wrap(os.mkdir)
26makedirs = wrap(os.makedirs)
27rmdir = wrap(os.rmdir)
28removedirs = wrap(os.removedirs)
29
30if hasattr(os, "sendfile"):
31    sendfile = wrap(os.sendfile)
32