about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/aiofiles-stubs
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/aiofiles-stubs')
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/METADATA.toml6
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/__init__.pyi10
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/base.pyi24
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/os.pyi144
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/ospath.pyi23
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/py.typed0
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/tempfile/__init__.pyi323
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/tempfile/temptypes.pyi51
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/__init__.pyi106
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/binary.pyi55
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/text.pyi42
-rw-r--r--.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/utils.pyi10
12 files changed, 794 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/METADATA.toml b/.venv/lib/python3.12/site-packages/aiofiles-stubs/METADATA.toml
new file mode 100644
index 00000000..d649874b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/METADATA.toml
@@ -0,0 +1,6 @@
+version = "24.1.*"
+upstream_repository = "https://github.com/Tinche/aiofiles"
+
+[tool.stubtest]
+# linux and darwin are equivalent
+platforms = ["linux", "win32"]
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/__init__.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/__init__.pyi
new file mode 100644
index 00000000..bc52b8e0
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/__init__.pyi
@@ -0,0 +1,10 @@
+from . import tempfile as tempfile
+from .threadpool import (
+    open as open,
+    stderr as stderr,
+    stderr_bytes as stderr_bytes,
+    stdin as stdin,
+    stdin_bytes as stdin_bytes,
+    stdout as stdout,
+    stdout_bytes as stdout_bytes,
+)
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/base.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/base.pyi
new file mode 100644
index 00000000..ea79abf4
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/base.pyi
@@ -0,0 +1,24 @@
+from collections.abc import Awaitable, Callable, Generator
+from contextlib import AbstractAsyncContextManager
+from types import TracebackType
+from typing import Any, BinaryIO, Generic, TextIO, TypeVar
+from typing_extensions import Self
+
+_T = TypeVar("_T")
+_V_co = TypeVar("_V_co", covariant=True)
+
+class AsyncBase(Generic[_T]):
+    def __init__(self, file: str, loop: Any, executor: Any) -> None: ...
+    def __aiter__(self) -> Self: ...
+    async def __anext__(self) -> _T: ...
+
+class AsyncIndirectBase(AsyncBase[_T]):
+    def __init__(self, name: str, loop: Any, executor: Any, indirect: Callable[[], TextIO | BinaryIO]) -> None: ...
+
+class AiofilesContextManager(Awaitable[_V_co], AbstractAsyncContextManager[_V_co]):
+    def __init__(self, coro: Awaitable[_V_co]) -> None: ...
+    def __await__(self) -> Generator[Any, Any, _V_co]: ...
+    async def __aenter__(self) -> _V_co: ...
+    async def __aexit__(
+        self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
+    ) -> None: ...
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/os.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/os.pyi
new file mode 100644
index 00000000..5a3de3b5
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/os.pyi
@@ -0,0 +1,144 @@
+import sys
+from _typeshed import BytesPath, FileDescriptorOrPath, GenericPath, ReadableBuffer, StrOrBytesPath, StrPath
+from asyncio.events import AbstractEventLoop
+from collections.abc import Sequence
+from os import _ScandirIterator, stat_result
+from typing import Any, AnyStr, overload
+
+from aiofiles import ospath
+from aiofiles.ospath import wrap as wrap
+
+__all__ = [
+    "path",
+    "stat",
+    "rename",
+    "renames",
+    "replace",
+    "remove",
+    "unlink",
+    "mkdir",
+    "makedirs",
+    "rmdir",
+    "removedirs",
+    "link",
+    "symlink",
+    "readlink",
+    "listdir",
+    "scandir",
+    "access",
+    "wrap",
+    "getcwd",
+]
+
+if sys.platform != "win32":
+    __all__ += ["statvfs", "sendfile"]
+
+path = ospath
+
+async def stat(
+    path: FileDescriptorOrPath,
+    *,
+    dir_fd: int | None = None,
+    follow_symlinks: bool = True,
+    loop: AbstractEventLoop | None = ...,
+    executor: Any = ...,
+) -> stat_result: ...
+async def rename(
+    src: StrOrBytesPath,
+    dst: StrOrBytesPath,
+    *,
+    src_dir_fd: int | None = None,
+    dst_dir_fd: int | None = None,
+    loop: AbstractEventLoop | None = ...,
+    executor: Any = ...,
+) -> None: ...
+async def renames(
+    old: StrOrBytesPath, new: StrOrBytesPath, loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> None: ...
+async def replace(
+    src: StrOrBytesPath,
+    dst: StrOrBytesPath,
+    *,
+    src_dir_fd: int | None = None,
+    dst_dir_fd: int | None = None,
+    loop: AbstractEventLoop | None = ...,
+    executor: Any = ...,
+) -> None: ...
+async def remove(
+    path: StrOrBytesPath, *, dir_fd: int | None = None, loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> None: ...
+async def unlink(
+    path: StrOrBytesPath, *, dir_fd: int | None = ..., loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> None: ...
+async def mkdir(
+    path: StrOrBytesPath, mode: int = 511, *, dir_fd: int | None = None, loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> None: ...
+async def makedirs(
+    name: StrOrBytesPath, mode: int = 511, exist_ok: bool = False, *, loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> None: ...
+async def link(
+    src: StrOrBytesPath,
+    dst: StrOrBytesPath,
+    *,
+    src_dir_fd: int | None = ...,
+    dst_dir_fd: int | None = ...,
+    follow_symlinks: bool = ...,
+    loop: AbstractEventLoop | None = ...,
+    executor: Any = ...,
+) -> None: ...
+async def symlink(
+    src: StrOrBytesPath,
+    dst: StrOrBytesPath,
+    target_is_directory: bool = ...,
+    *,
+    dir_fd: int | None = ...,
+    loop: AbstractEventLoop | None = ...,
+    executor: Any = ...,
+) -> None: ...
+async def readlink(
+    path: AnyStr, *, dir_fd: int | None = ..., loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> AnyStr: ...
+async def rmdir(
+    path: StrOrBytesPath, *, dir_fd: int | None = None, loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> None: ...
+async def removedirs(name: StrOrBytesPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> None: ...
+@overload
+async def scandir(path: None = None, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> _ScandirIterator[str]: ...
+@overload
+async def scandir(path: int, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> _ScandirIterator[str]: ...
+@overload
+async def scandir(
+    path: GenericPath[AnyStr], *, loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> _ScandirIterator[AnyStr]: ...
+@overload
+async def listdir(path: StrPath | None, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> list[str]: ...
+@overload
+async def listdir(path: BytesPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> list[bytes]: ...
+@overload
+async def listdir(path: int, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> list[str]: ...
+async def access(
+    path: FileDescriptorOrPath, mode: int, *, dir_fd: int | None = None, effective_ids: bool = False, follow_symlinks: bool = True
+) -> bool: ...
+async def getcwd() -> str: ...
+
+if sys.platform != "win32":
+    from os import statvfs_result
+
+    @overload
+    async def sendfile(
+        out_fd: int, in_fd: int, offset: int | None, count: int, *, loop: AbstractEventLoop | None = ..., executor: Any = ...
+    ) -> int: ...
+    @overload
+    async def sendfile(
+        out_fd: int,
+        in_fd: int,
+        offset: int,
+        count: int,
+        headers: Sequence[ReadableBuffer] = ...,
+        trailers: Sequence[ReadableBuffer] = ...,
+        flags: int = ...,
+        *,
+        loop: AbstractEventLoop | None = ...,
+        executor: Any = ...,
+    ) -> int: ...  # FreeBSD and Mac OS X only
+    async def statvfs(path: FileDescriptorOrPath) -> statvfs_result: ...  # Unix only
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/ospath.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/ospath.pyi
new file mode 100644
index 00000000..a5863753
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/ospath.pyi
@@ -0,0 +1,23 @@
+from _typeshed import FileDescriptorOrPath
+from asyncio.events import AbstractEventLoop
+from collections.abc import Awaitable, Callable
+from os import PathLike
+from typing import Any, AnyStr, TypeVar
+
+_R = TypeVar("_R")
+
+def wrap(func: Callable[..., _R]) -> Callable[..., Awaitable[_R]]: ...
+async def exists(path: FileDescriptorOrPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> bool: ...
+async def isfile(path: FileDescriptorOrPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> bool: ...
+async def isdir(s: FileDescriptorOrPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> bool: ...
+async def islink(path: FileDescriptorOrPath) -> bool: ...
+async def ismount(path: FileDescriptorOrPath) -> bool: ...
+async def getsize(filename: FileDescriptorOrPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> int: ...
+async def getmtime(filename: FileDescriptorOrPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> float: ...
+async def getatime(filename: FileDescriptorOrPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> float: ...
+async def getctime(filename: FileDescriptorOrPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> float: ...
+async def samefile(
+    f1: FileDescriptorOrPath, f2: FileDescriptorOrPath, *, loop: AbstractEventLoop | None = ..., executor: Any = ...
+) -> bool: ...
+async def sameopenfile(fp1: int, fp2: int, *, loop: AbstractEventLoop | None = ..., executor: Any = ...) -> bool: ...
+async def abspath(path: PathLike[AnyStr] | AnyStr) -> AnyStr: ...
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/py.typed b/.venv/lib/python3.12/site-packages/aiofiles-stubs/py.typed
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/py.typed
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/tempfile/__init__.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/tempfile/__init__.pyi
new file mode 100644
index 00000000..e8016aa8
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/tempfile/__init__.pyi
@@ -0,0 +1,323 @@
+import sys
+from _typeshed import (
+    BytesPath,
+    Incomplete,
+    OpenBinaryMode,
+    OpenBinaryModeReading,
+    OpenBinaryModeUpdating,
+    OpenBinaryModeWriting,
+    OpenTextMode,
+    StrOrBytesPath,
+    StrPath,
+)
+from asyncio import AbstractEventLoop
+from typing import AnyStr, Literal, overload
+
+from ..base import AiofilesContextManager
+from ..threadpool.binary import AsyncBufferedIOBase, AsyncBufferedReader, AsyncFileIO
+from ..threadpool.text import AsyncTextIOWrapper
+from .temptypes import AsyncTemporaryDirectory
+
+# Text mode: always returns AsyncTextIOWrapper
+@overload
+def TemporaryFile(
+    mode: OpenTextMode,
+    buffering: int = -1,
+    encoding: str | None = None,
+    newline: str | None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncTextIOWrapper]: ...
+
+# Unbuffered binary: returns a FileIO
+@overload
+def TemporaryFile(
+    mode: OpenBinaryMode,
+    buffering: Literal[0],
+    encoding: None = None,
+    newline: None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncFileIO]: ...
+
+# Buffered binary reading/updating: AsyncBufferedReader
+@overload
+def TemporaryFile(
+    mode: OpenBinaryModeReading | OpenBinaryModeUpdating = "w+b",
+    buffering: Literal[-1, 1] = -1,
+    encoding: None = None,
+    newline: None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncBufferedReader]: ...
+
+# Buffered binary writing: AsyncBufferedIOBase
+@overload
+def TemporaryFile(
+    mode: OpenBinaryModeWriting,
+    buffering: Literal[-1, 1] = -1,
+    encoding: None = None,
+    newline: None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncBufferedIOBase]: ...
+
+# 3.12 added `delete_on_close`
+if sys.version_info >= (3, 12):
+    # Text mode: always returns AsyncTextIOWrapper
+    @overload
+    def NamedTemporaryFile(
+        mode: OpenTextMode,
+        buffering: int = -1,
+        encoding: str | None = None,
+        newline: str | None = None,
+        suffix: AnyStr | None = None,
+        prefix: AnyStr | None = None,
+        dir: StrOrBytesPath | None = None,
+        delete: bool = True,
+        delete_on_close: bool = True,
+        loop: AbstractEventLoop | None = None,
+        executor: Incomplete | None = None,
+    ) -> AiofilesContextManager[AsyncTextIOWrapper]: ...
+
+    # Unbuffered binary: returns a FileIO
+    @overload
+    def NamedTemporaryFile(
+        mode: OpenBinaryMode,
+        buffering: Literal[0],
+        encoding: None = None,
+        newline: None = None,
+        suffix: AnyStr | None = None,
+        prefix: AnyStr | None = None,
+        dir: StrOrBytesPath | None = None,
+        delete: bool = True,
+        delete_on_close: bool = True,
+        loop: AbstractEventLoop | None = None,
+        executor: Incomplete | None = None,
+    ) -> AiofilesContextManager[AsyncFileIO]: ...
+
+    # Buffered binary reading/updating: AsyncBufferedReader
+    @overload
+    def NamedTemporaryFile(
+        mode: OpenBinaryModeReading | OpenBinaryModeUpdating = "w+b",
+        buffering: Literal[-1, 1] = -1,
+        encoding: None = None,
+        newline: None = None,
+        suffix: AnyStr | None = None,
+        prefix: AnyStr | None = None,
+        dir: StrOrBytesPath | None = None,
+        delete: bool = True,
+        delete_on_close: bool = True,
+        loop: AbstractEventLoop | None = None,
+        executor: Incomplete | None = None,
+    ) -> AiofilesContextManager[AsyncBufferedReader]: ...
+
+    # Buffered binary writing: AsyncBufferedIOBase
+    @overload
+    def NamedTemporaryFile(
+        mode: OpenBinaryModeWriting,
+        buffering: Literal[-1, 1] = -1,
+        encoding: None = None,
+        newline: None = None,
+        suffix: AnyStr | None = None,
+        prefix: AnyStr | None = None,
+        dir: StrOrBytesPath | None = None,
+        delete: bool = True,
+        delete_on_close: bool = True,
+        loop: AbstractEventLoop | None = None,
+        executor: Incomplete | None = None,
+    ) -> AiofilesContextManager[AsyncBufferedIOBase]: ...
+
+else:
+    # Text mode: always returns AsyncTextIOWrapper
+    @overload
+    def NamedTemporaryFile(
+        mode: OpenTextMode,
+        buffering: int = -1,
+        encoding: str | None = None,
+        newline: str | None = None,
+        suffix: AnyStr | None = None,
+        prefix: AnyStr | None = None,
+        dir: StrOrBytesPath | None = None,
+        delete: bool = True,
+        loop: AbstractEventLoop | None = None,
+        executor: Incomplete | None = None,
+    ) -> AiofilesContextManager[AsyncTextIOWrapper]: ...
+
+    # Unbuffered binary: returns a FileIO
+    @overload
+    def NamedTemporaryFile(
+        mode: OpenBinaryMode,
+        buffering: Literal[0],
+        encoding: None = None,
+        newline: None = None,
+        suffix: AnyStr | None = None,
+        prefix: AnyStr | None = None,
+        dir: StrOrBytesPath | None = None,
+        delete: bool = True,
+        loop: AbstractEventLoop | None = None,
+        executor: Incomplete | None = None,
+    ) -> AiofilesContextManager[AsyncFileIO]: ...
+
+    # Buffered binary reading/updating: AsyncBufferedReader
+    @overload
+    def NamedTemporaryFile(
+        mode: OpenBinaryModeReading | OpenBinaryModeUpdating = "w+b",
+        buffering: Literal[-1, 1] = -1,
+        encoding: None = None,
+        newline: None = None,
+        suffix: AnyStr | None = None,
+        prefix: AnyStr | None = None,
+        dir: StrOrBytesPath | None = None,
+        delete: bool = True,
+        loop: AbstractEventLoop | None = None,
+        executor: Incomplete | None = None,
+    ) -> AiofilesContextManager[AsyncBufferedReader]: ...
+
+    # Buffered binary writing: AsyncBufferedIOBase
+    @overload
+    def NamedTemporaryFile(
+        mode: OpenBinaryModeWriting,
+        buffering: Literal[-1, 1] = -1,
+        encoding: None = None,
+        newline: None = None,
+        suffix: AnyStr | None = None,
+        prefix: AnyStr | None = None,
+        dir: StrOrBytesPath | None = None,
+        delete: bool = True,
+        loop: AbstractEventLoop | None = None,
+        executor: Incomplete | None = None,
+    ) -> AiofilesContextManager[AsyncBufferedIOBase]: ...
+
+# Text mode: always returns AsyncTextIOWrapper
+@overload
+def SpooledTemporaryFile(
+    max_size: int = 0,
+    *,
+    mode: OpenTextMode,
+    buffering: int = -1,
+    encoding: str | None = None,
+    newline: str | None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncTextIOWrapper]: ...
+@overload
+def SpooledTemporaryFile(
+    max_size: int,
+    mode: OpenTextMode,
+    buffering: int = -1,
+    encoding: str | None = None,
+    newline: str | None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncTextIOWrapper]: ...
+
+# Unbuffered binary: returns a FileIO
+@overload
+def SpooledTemporaryFile(
+    max_size: int = 0,
+    mode: OpenBinaryMode = "w+b",
+    *,
+    buffering: Literal[0],
+    encoding: None = None,
+    newline: None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncFileIO]: ...
+@overload
+def SpooledTemporaryFile(
+    max_size: int,
+    mode: OpenBinaryMode,
+    buffering: Literal[0],
+    encoding: None = None,
+    newline: None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncFileIO]: ...
+
+# Buffered binary reading/updating: AsyncBufferedReader
+@overload
+def SpooledTemporaryFile(
+    max_size: int = 0,
+    mode: OpenBinaryModeReading | OpenBinaryModeUpdating = "w+b",
+    buffering: Literal[-1, 1] = -1,
+    encoding: None = None,
+    newline: None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncBufferedReader]: ...
+
+# Buffered binary writing: AsyncBufferedIOBase
+@overload
+def SpooledTemporaryFile(
+    max_size: int = 0,
+    *,
+    mode: OpenBinaryModeWriting,
+    buffering: Literal[-1, 1] = -1,
+    encoding: None = None,
+    newline: None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncBufferedIOBase]: ...
+@overload
+def SpooledTemporaryFile(
+    max_size: int,
+    mode: OpenBinaryModeWriting,
+    buffering: Literal[-1, 1] = -1,
+    encoding: None = None,
+    newline: None = None,
+    suffix: AnyStr | None = None,
+    prefix: AnyStr | None = None,
+    dir: StrOrBytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncBufferedIOBase]: ...
+@overload
+def TemporaryDirectory(
+    suffix: str | None = None,
+    prefix: str | None = None,
+    dir: StrPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManagerTempDir: ...
+@overload
+def TemporaryDirectory(
+    suffix: bytes | None = None,
+    prefix: bytes | None = None,
+    dir: BytesPath | None = None,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManagerTempDir: ...
+
+class AiofilesContextManagerTempDir(AiofilesContextManager[AsyncTemporaryDirectory]):
+    async def __aenter__(self) -> str: ...  # type: ignore[override]
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/tempfile/temptypes.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/tempfile/temptypes.pyi
new file mode 100644
index 00000000..23abf5cb
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/tempfile/temptypes.pyi
@@ -0,0 +1,51 @@
+from _typeshed import Incomplete, OpenBinaryMode
+from asyncio import AbstractEventLoop
+from collections.abc import Generator, Iterable
+from tempfile import TemporaryDirectory
+from typing import TypeVar
+
+from aiofiles.base import AsyncBase as AsyncBase
+from aiofiles.threadpool.utils import (
+    cond_delegate_to_executor as cond_delegate_to_executor,
+    delegate_to_executor as delegate_to_executor,
+    proxy_property_directly as proxy_property_directly,
+)
+
+_T = TypeVar("_T")
+
+class AsyncSpooledTemporaryFile(AsyncBase[_T]):
+    def fileno(self) -> Generator[Incomplete, Incomplete, Incomplete]: ...
+    def rollover(self) -> Generator[Incomplete, Incomplete, Incomplete]: ...
+    async def close(self) -> None: ...
+    async def flush(self) -> None: ...
+    async def isatty(self) -> bool: ...
+    # All must return `AnyStr`:
+    async def read(self, n: int = ..., /): ...
+    async def readline(self, limit: int | None = ..., /): ...
+    async def readlines(self, hint: int = ..., /) -> list[Incomplete]: ...
+    # ---
+    async def seek(self, offset: int, whence: int = ...) -> int: ...
+    async def tell(self) -> int: ...
+    async def truncate(self, size: int | None = ...) -> None: ...
+    @property
+    def closed(self) -> bool: ...
+    @property
+    def encoding(self) -> str: ...
+    @property
+    def mode(self) -> OpenBinaryMode: ...
+    @property
+    def name(self) -> str: ...
+    @property
+    def newlines(self) -> str: ...
+    # Both should work with `AnyStr`, like in `tempfile`:
+    async def write(self, s) -> int: ...
+    async def writelines(self, iterable: Iterable[Incomplete]) -> None: ...
+
+class AsyncTemporaryDirectory:
+    async def cleanup(self) -> None: ...
+    @property
+    def name(self): ...  # should be `AnyStr`
+    def __init__(
+        self, file: TemporaryDirectory[Incomplete], loop: AbstractEventLoop | None, executor: Incomplete | None
+    ) -> None: ...
+    async def close(self) -> None: ...
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/__init__.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/__init__.pyi
new file mode 100644
index 00000000..00c587cc
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/__init__.pyi
@@ -0,0 +1,106 @@
+from _typeshed import (
+    FileDescriptorOrPath,
+    Incomplete,
+    OpenBinaryMode,
+    OpenBinaryModeReading,
+    OpenBinaryModeUpdating,
+    OpenBinaryModeWriting,
+    OpenTextMode,
+)
+from asyncio import AbstractEventLoop
+from collections.abc import Callable
+from typing import Literal, overload
+from typing_extensions import TypeAlias
+
+from ..base import AiofilesContextManager
+from .binary import AsyncBufferedIOBase, AsyncBufferedReader, AsyncFileIO, AsyncIndirectBufferedIOBase, _UnknownAsyncBinaryIO
+from .text import AsyncTextIndirectIOWrapper, AsyncTextIOWrapper
+
+_Opener: TypeAlias = Callable[[str, int], int]
+
+# Text mode: always returns AsyncTextIOWrapper
+@overload
+def open(
+    file: FileDescriptorOrPath,
+    mode: OpenTextMode = "r",
+    buffering: int = -1,
+    encoding: str | None = None,
+    errors: str | None = None,
+    newline: str | None = None,
+    closefd: bool = True,
+    opener: _Opener | None = None,
+    *,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncTextIOWrapper]: ...
+
+# Unbuffered binary: returns a FileIO
+@overload
+def open(
+    file: FileDescriptorOrPath,
+    mode: OpenBinaryMode,
+    buffering: Literal[0],
+    encoding: None = None,
+    errors: None = None,
+    newline: None = None,
+    closefd: bool = True,
+    opener: _Opener | None = None,
+    *,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncFileIO]: ...
+
+# Buffered binary reading/updating: AsyncBufferedReader
+@overload
+def open(
+    file: FileDescriptorOrPath,
+    mode: OpenBinaryModeReading | OpenBinaryModeUpdating,
+    buffering: Literal[-1, 1] = -1,
+    encoding: None = None,
+    errors: None = None,
+    newline: None = None,
+    closefd: bool = True,
+    opener: _Opener | None = None,
+    *,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncBufferedReader]: ...
+
+# Buffered binary writing: AsyncBufferedIOBase
+@overload
+def open(
+    file: FileDescriptorOrPath,
+    mode: OpenBinaryModeWriting,
+    buffering: Literal[-1, 1] = -1,
+    encoding: None = None,
+    errors: None = None,
+    newline: None = None,
+    closefd: bool = True,
+    opener: _Opener | None = None,
+    *,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[AsyncBufferedIOBase]: ...
+
+# Buffering cannot be determined: fall back to _UnknownAsyncBinaryIO
+@overload
+def open(
+    file: FileDescriptorOrPath,
+    mode: OpenBinaryMode,
+    buffering: int = -1,
+    encoding: None = None,
+    errors: None = None,
+    newline: None = None,
+    closefd: bool = True,
+    opener: _Opener | None = None,
+    *,
+    loop: AbstractEventLoop | None = None,
+    executor: Incomplete | None = None,
+) -> AiofilesContextManager[_UnknownAsyncBinaryIO]: ...
+
+stdin: AsyncTextIndirectIOWrapper
+stdout: AsyncTextIndirectIOWrapper
+stderr: AsyncTextIndirectIOWrapper
+stdin_bytes: AsyncIndirectBufferedIOBase
+stdout_bytes: AsyncIndirectBufferedIOBase
+stderr_bytes: AsyncIndirectBufferedIOBase
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/binary.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/binary.pyi
new file mode 100644
index 00000000..d10f98f2
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/binary.pyi
@@ -0,0 +1,55 @@
+from _typeshed import FileDescriptorOrPath, ReadableBuffer, WriteableBuffer
+from collections.abc import Iterable
+from io import FileIO
+
+from ..base import AsyncBase, AsyncIndirectBase
+
+# This class does not exist at runtime and instead these methods are
+# all dynamically patched in.
+class _UnknownAsyncBinaryIO(AsyncBase[bytes]):
+    async def close(self) -> None: ...
+    async def flush(self) -> None: ...
+    async def isatty(self) -> bool: ...
+    async def read(self, size: int = ..., /) -> bytes: ...
+    async def readinto(self, buffer: WriteableBuffer, /) -> int | None: ...
+    async def readline(self, size: int | None = ..., /) -> bytes: ...
+    async def readlines(self, hint: int = ..., /) -> list[bytes]: ...
+    async def seek(self, offset: int, whence: int = ..., /) -> int: ...
+    async def seekable(self) -> bool: ...
+    async def tell(self) -> int: ...
+    async def truncate(self, size: int | None = ..., /) -> int: ...
+    async def writable(self) -> bool: ...
+    async def write(self, b: ReadableBuffer, /) -> int: ...
+    async def writelines(self, lines: Iterable[ReadableBuffer], /) -> None: ...
+    def fileno(self) -> int: ...
+    def readable(self) -> bool: ...
+    @property
+    def closed(self) -> bool: ...
+    @property
+    def mode(self) -> str: ...
+    @property
+    def name(self) -> FileDescriptorOrPath: ...
+
+class AsyncBufferedIOBase(_UnknownAsyncBinaryIO):
+    async def read1(self, size: int = ..., /) -> bytes: ...
+    def detach(self) -> FileIO: ...
+    @property
+    def raw(self) -> FileIO: ...
+
+class AsyncIndirectBufferedIOBase(AsyncIndirectBase[bytes], _UnknownAsyncBinaryIO):
+    async def read1(self, size: int = ..., /) -> bytes: ...
+    def detach(self) -> FileIO: ...
+    @property
+    def raw(self) -> FileIO: ...
+
+class AsyncBufferedReader(AsyncBufferedIOBase):
+    async def peek(self, size: int = ..., /) -> bytes: ...
+
+class AsyncIndirectBufferedReader(AsyncIndirectBufferedIOBase):
+    async def peek(self, size: int = ..., /) -> bytes: ...
+
+class AsyncFileIO(_UnknownAsyncBinaryIO):
+    async def readall(self) -> bytes: ...
+
+class AsyncIndirectFileIO(AsyncIndirectBase[bytes], _UnknownAsyncBinaryIO):
+    async def readall(self) -> bytes: ...
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/text.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/text.pyi
new file mode 100644
index 00000000..6003a085
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/text.pyi
@@ -0,0 +1,42 @@
+from _typeshed import FileDescriptorOrPath
+from collections.abc import Iterable
+from typing import BinaryIO
+
+from ..base import AsyncBase, AsyncIndirectBase
+
+class _UnknownAsyncTextIO(AsyncBase[str]):
+    async def close(self) -> None: ...
+    async def flush(self) -> None: ...
+    async def isatty(self) -> bool: ...
+    async def read(self, size: int | None = ..., /) -> str: ...
+    async def readline(self, size: int = ..., /) -> str: ...
+    async def readlines(self, hint: int = ..., /) -> list[str]: ...
+    async def seek(self, offset: int, whence: int = ..., /) -> int: ...
+    async def seekable(self) -> bool: ...
+    async def tell(self) -> int: ...
+    async def truncate(self, size: int | None = ..., /) -> int: ...
+    async def writable(self) -> bool: ...
+    async def write(self, b: str, /) -> int: ...
+    async def writelines(self, lines: Iterable[str], /) -> None: ...
+    def detach(self) -> BinaryIO: ...
+    def fileno(self) -> int: ...
+    def readable(self) -> bool: ...
+    @property
+    def buffer(self) -> BinaryIO: ...
+    @property
+    def closed(self) -> bool: ...
+    @property
+    def encoding(self) -> str: ...
+    @property
+    def errors(self) -> str | None: ...
+    @property
+    def line_buffering(self) -> bool: ...
+    @property
+    def newlines(self) -> str | tuple[str, ...] | None: ...
+    @property
+    def name(self) -> FileDescriptorOrPath: ...
+    @property
+    def mode(self) -> str: ...
+
+class AsyncTextIOWrapper(_UnknownAsyncTextIO): ...
+class AsyncTextIndirectIOWrapper(AsyncIndirectBase[str], _UnknownAsyncTextIO): ...
diff --git a/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/utils.pyi b/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/utils.pyi
new file mode 100644
index 00000000..438a6851
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/aiofiles-stubs/threadpool/utils.pyi
@@ -0,0 +1,10 @@
+from collections.abc import Callable
+from typing import TypeVar
+
+_T = TypeVar("_T", bound=type)
+
+# All these function actually mutate the given type:
+def delegate_to_executor(*attrs: str) -> Callable[[_T], _T]: ...
+def proxy_method_directly(*attrs: str) -> Callable[[_T], _T]: ...
+def proxy_property_directly(*attrs: str) -> Callable[[_T], _T]: ...
+def cond_delegate_to_executor(*attrs: str) -> Callable[[_T], _T]: ...