Spaces:
Paused
Paused
| """Handle files using a thread pool executor.""" | |
| import asyncio | |
| import sys | |
| from functools import partial, singledispatch | |
| from io import ( | |
| BufferedIOBase, | |
| BufferedRandom, | |
| BufferedReader, | |
| BufferedWriter, | |
| FileIO, | |
| TextIOBase, | |
| ) | |
| from types import coroutine | |
| from ..base import AiofilesContextManager | |
| from .binary import ( | |
| AsyncBufferedIOBase, | |
| AsyncBufferedReader, | |
| AsyncFileIO, | |
| AsyncIndirectBufferedIOBase, | |
| ) | |
| from .text import AsyncTextIndirectIOWrapper, AsyncTextIOWrapper | |
| sync_open = open | |
| __all__ = ( | |
| "open", | |
| "stdin", | |
| "stdout", | |
| "stderr", | |
| "stdin_bytes", | |
| "stdout_bytes", | |
| "stderr_bytes", | |
| ) | |
| def open( | |
| file, | |
| mode="r", | |
| buffering=-1, | |
| encoding=None, | |
| errors=None, | |
| newline=None, | |
| closefd=True, | |
| opener=None, | |
| *, | |
| loop=None, | |
| executor=None, | |
| ): | |
| return AiofilesContextManager( | |
| _open( | |
| file, | |
| mode=mode, | |
| buffering=buffering, | |
| encoding=encoding, | |
| errors=errors, | |
| newline=newline, | |
| closefd=closefd, | |
| opener=opener, | |
| loop=loop, | |
| executor=executor, | |
| ) | |
| ) | |
| def _open( | |
| file, | |
| mode="r", | |
| buffering=-1, | |
| encoding=None, | |
| errors=None, | |
| newline=None, | |
| closefd=True, | |
| opener=None, | |
| *, | |
| loop=None, | |
| executor=None, | |
| ): | |
| """Open an asyncio file.""" | |
| if loop is None: | |
| loop = asyncio.get_running_loop() | |
| cb = partial( | |
| sync_open, | |
| file, | |
| mode=mode, | |
| buffering=buffering, | |
| encoding=encoding, | |
| errors=errors, | |
| newline=newline, | |
| closefd=closefd, | |
| opener=opener, | |
| ) | |
| f = yield from loop.run_in_executor(executor, cb) | |
| return wrap(f, loop=loop, executor=executor) | |
| def wrap(file, *, loop=None, executor=None): | |
| raise TypeError("Unsupported io type: {}.".format(file)) | |
| def _(file, *, loop=None, executor=None): | |
| return AsyncTextIOWrapper(file, loop=loop, executor=executor) | |
| def _(file, *, loop=None, executor=None): | |
| return AsyncBufferedIOBase(file, loop=loop, executor=executor) | |
| def _(file, *, loop=None, executor=None): | |
| return AsyncBufferedReader(file, loop=loop, executor=executor) | |
| def _(file, *, loop=None, executor=None): | |
| return AsyncFileIO(file, loop=loop, executor=executor) | |
| stdin = AsyncTextIndirectIOWrapper("sys.stdin", None, None, indirect=lambda: sys.stdin) | |
| stdout = AsyncTextIndirectIOWrapper( | |
| "sys.stdout", None, None, indirect=lambda: sys.stdout | |
| ) | |
| stderr = AsyncTextIndirectIOWrapper( | |
| "sys.stderr", None, None, indirect=lambda: sys.stderr | |
| ) | |
| stdin_bytes = AsyncIndirectBufferedIOBase( | |
| "sys.stdin.buffer", None, None, indirect=lambda: sys.stdin.buffer | |
| ) | |
| stdout_bytes = AsyncIndirectBufferedIOBase( | |
| "sys.stdout.buffer", None, None, indirect=lambda: sys.stdout.buffer | |
| ) | |
| stderr_bytes = AsyncIndirectBufferedIOBase( | |
| "sys.stderr.buffer", None, None, indirect=lambda: sys.stderr.buffer | |
| ) | |