Skip to content
This repository has been archived by the owner on Dec 27, 2021. It is now read-only.

Commit

Permalink
Add missing methods methods in aiofiles (python#4734)
Browse files Browse the repository at this point in the history
* fix aiofiles stubs

* switch io.BinaryIO to typing.BinaryIO

* swap typing.Literal to typing_extensions.Literal

* fix overload overlap in open function

* Fix filename generics

* add missing loop and executor arguments to aiofiles.open

* Remove generics from async files

* Fix async file-like read, readline and write signatures
  • Loading branch information
MKuranowski authored Nov 2, 2020
1 parent 0e002f4 commit 40b44a9
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 21 deletions.
6 changes: 3 additions & 3 deletions third_party/3/aiofiles/base.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ class AsyncBase(Generic[_T]):
async def __anext__(self) -> _T: ...

class AiofilesContextManager(Generic[_T_co, _T_contra, _V_co]):
def __init__(self, __coro: Coroutine[_T_co, _T_contra, _V_co]) -> None: ...
def send(self, __value: _T_contra) -> _T_co: ...
def __init__(self, coro: Coroutine[_T_co, _T_contra, _V_co]) -> None: ...
def send(self, value: _T_contra) -> _T_co: ...
def throw(
self, __typ: Type[BaseException], __val: Union[BaseException, object] = ..., tb: Optional[TracebackType] = ...
self, typ: Type[BaseException], val: Union[BaseException, object] = ..., tb: Optional[TracebackType] = ...
) -> _T_co: ...
def close(self) -> None: ...
@property
Expand Down
File renamed without changes.
39 changes: 25 additions & 14 deletions third_party/3/aiofiles/threadpool/__init__.pyi
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
from _typeshed import AnyPath, OpenBinaryMode, OpenBinaryModeReading, OpenBinaryModeUpdating, OpenBinaryModeWriting, OpenTextMode
from typing import Any, Callable, Optional, Union, overload
from asyncio import AbstractEventLoop
from typing import Any, Callable, Optional, TypeVar, Union, overload
from typing_extensions import Literal

from ..base import AiofilesContextManager, AsyncBase
from .binary import AsyncBufferedIOBase, AsyncBufferedReader, AsyncFileIO
from ..base import AiofilesContextManager
from .binary import AsyncBufferedIOBase, AsyncBufferedReader, AsyncFileIO, _UnknownAsyncBinaryIO
from .text import AsyncTextIOWrapper

_OpenFile = Union[AnyPath, int]
_OpenFile = TypeVar("_OpenFile", bound=Union[AnyPath, int])
_Opener = Callable[[str, int], int]

# Text mode: always returns AsyncTextIOWrapper
@overload
def open(
file: _OpenFile,
Expand All @@ -19,9 +22,11 @@ def open(
closefd: bool = ...,
opener: Optional[_Opener] = ...,
*,
loop: Optional[Any] = ...,
loop: Optional[AbstractEventLoop] = ...,
executor: Optional[Any] = ...,
) -> AiofilesContextManager[None, None, AsyncTextIOWrapper]: ...

# Unbuffered binary: returns a FileIO
@overload
def open(
file: _OpenFile,
Expand All @@ -33,37 +38,43 @@ def open(
closefd: bool = ...,
opener: Optional[_Opener] = ...,
*,
loop: Optional[Any] = ...,
loop: Optional[AbstractEventLoop] = ...,
executor: Optional[Any] = ...,
) -> AiofilesContextManager[None, None, AsyncFileIO]: ...

# Buffered binary reading/updating: AsyncBufferedReader
@overload
def open(
file: _OpenFile,
mode: OpenBinaryModeWriting,
mode: Union[OpenBinaryModeReading, OpenBinaryModeUpdating],
buffering: Literal[-1, 1] = ...,
encoding: None = ...,
errors: None = ...,
newline: None = ...,
closefd: bool = ...,
opener: Optional[_Opener] = ...,
*,
loop: Optional[Any] = ...,
loop: Optional[AbstractEventLoop] = ...,
executor: Optional[Any] = ...,
) -> AiofilesContextManager[None, None, AsyncBufferedIOBase]: ...
) -> AiofilesContextManager[None, None, AsyncBufferedReader]: ...

# Buffered binary writing: AsyncBufferedIOBase
@overload
def open(
file: _OpenFile,
mode: Union[OpenBinaryModeReading, OpenBinaryModeUpdating],
mode: OpenBinaryModeWriting,
buffering: Literal[-1, 1] = ...,
encoding: None = ...,
errors: None = ...,
newline: None = ...,
closefd: bool = ...,
opener: Optional[_Opener] = ...,
*,
loop: Optional[Any] = ...,
loop: Optional[AbstractEventLoop] = ...,
executor: Optional[Any] = ...,
) -> AiofilesContextManager[None, None, AsyncBufferedReader]: ...
) -> AiofilesContextManager[None, None, AsyncBufferedIOBase]: ...

# Buffering cannot be determined: fall back to _UnknownAsyncBinaryIO
@overload
def open(
file: _OpenFile,
Expand All @@ -75,6 +86,6 @@ def open(
closefd: bool = ...,
opener: Optional[_Opener] = ...,
*,
loop: Optional[Any] = ...,
loop: Optional[AbstractEventLoop] = ...,
executor: Optional[Any] = ...,
) -> AiofilesContextManager[None, None, AsyncBase[bytes]]: ...
) -> AiofilesContextManager[None, None, _UnknownAsyncBinaryIO]: ...
42 changes: 39 additions & 3 deletions third_party/3/aiofiles/threadpool/binary.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,41 @@
from _typeshed import AnyPath, ReadableBuffer, WriteableBuffer
from io import FileIO
from typing import Iterable, List, Optional, Union

from ..base import AsyncBase

class AsyncBufferedIOBase(AsyncBase[bytes]): ...
class AsyncBufferedReader(AsyncBufferedIOBase): ...
class AsyncFileIO(AsyncBase[bytes]): ...
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) -> Optional[int]: ...
async def readline(self, __size: Optional[int] = ...) -> 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: Optional[int] = ...) -> 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) -> Union[AnyPath, int]: ...

class AsyncBufferedIOBase(_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 AsyncFileIO(_UnknownAsyncBinaryIO):
async def readall(self) -> bytes: ...
37 changes: 36 additions & 1 deletion third_party/3/aiofiles/threadpool/text.pyi
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
from _typeshed import AnyPath
from typing import BinaryIO, Iterable, List, Optional, Tuple, Union

from ..base import AsyncBase

class AsyncTextIOWrapper(AsyncBase[str]): ...
class AsyncTextIOWrapper(AsyncBase[str]):
async def close(self) -> None: ...
async def flush(self) -> None: ...
async def isatty(self) -> bool: ...
async def read(self, __size: Optional[int] = ...) -> 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: Optional[int] = ...) -> 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) -> Optional[str]: ...
@property
def line_buffering(self) -> bool: ...
@property
def newlines(self) -> Union[str, Tuple[str, ...], None]: ...
@property
def name(self) -> Union[AnyPath, int]: ...
@property
def mode(self) -> str: ...

0 comments on commit 40b44a9

Please sign in to comment.