diff --git a/stdlib/3/gzip.pyi b/stdlib/3/gzip.pyi index ce8152c34f09..b7876e4c4b37 100644 --- a/stdlib/3/gzip.pyi +++ b/stdlib/3/gzip.pyi @@ -40,7 +40,7 @@ class GzipFile(_compression.BaseStream): def writable(self) -> bool: ... def seekable(self) -> bool: ... def seek(self, offset: int, whence: int = ...) -> int: ... - def readline(self, size: int = ...) -> bytes: ... + def readline(self, size: Optional[int] = ...) -> bytes: ... class _GzipReader(_compression.DecompressReader): def __init__(self, fp: IO[bytes]) -> None: ... diff --git a/stdlib/3/io.pyi b/stdlib/3/io.pyi index 47fb0d2b6849..84cc44860bed 100644 --- a/stdlib/3/io.pyi +++ b/stdlib/3/io.pyi @@ -44,7 +44,7 @@ class IOBase: def truncate(self, __size: Optional[int] = ...) -> int: ... def writable(self) -> bool: ... def writelines(self, __lines: Iterable[Union[bytes, bytearray]]) -> None: ... - def readline(self, __size: int = ...) -> bytes: ... + def readline(self, __size: Optional[int] = ...) -> bytes: ... def __del__(self) -> None: ... @property def closed(self) -> bool: ... @@ -65,7 +65,6 @@ class BufferedIOBase(IOBase): def read(self, __size: Optional[int] = ...) -> bytes: ... def read1(self, __size: int = ...) -> bytes: ... - class FileIO(RawIOBase): mode: str name: Union[int, str] @@ -77,52 +76,27 @@ class FileIO(RawIOBase): opener: Optional[Callable[[Union[int, str], str], int]] = ... ) -> None: ... -# TODO should extend from BufferedIOBase -class BytesIO(BinaryIO): +class BytesIO(BufferedIOBase, BinaryIO): def __init__(self, initial_bytes: bytes = ...) -> None: ... # BytesIO does not contain a "name" field. This workaround is necessary # to allow BytesIO sub-classes to add this field, as it is defined # as a read-only property on IO[]. name: Any + def __enter__(self: _T) -> _T: ... def getvalue(self) -> bytes: ... def getbuffer(self) -> memoryview: ... - # copied from IOBase - def __iter__(self) -> Iterator[bytes]: ... - def __next__(self) -> bytes: ... - def __enter__(self) -> BytesIO: ... - def __exit__(self, t: Optional[Type[BaseException]] = ..., value: Optional[BaseException] = ..., - traceback: Optional[TracebackType] = ...) -> Optional[bool]: ... - def close(self) -> None: ... - def fileno(self) -> int: ... - def flush(self) -> None: ... - def isatty(self) -> bool: ... - def readable(self) -> bool: ... - def readlines(self, __size: int = ...) -> List[bytes]: ... - def seek(self, __pos: int, __whence: int = ...) -> int: ... - def seekable(self) -> bool: ... - def tell(self) -> int: ... - def truncate(self, __size: Optional[int] = ...) -> int: ... - def writable(self) -> bool: ... - # TODO should be the next line instead - # def writelines(self, lines: List[Union[bytes, bytearray]]) -> None: ... - def writelines(self, __lines: Any) -> None: ... - def readline(self, __size: Optional[int] = ...) -> bytes: ... - def __del__(self) -> None: ... - closed: bool - # copied from BufferedIOBase - def detach(self) -> RawIOBase: ... - def readinto(self, __buffer: _bytearray_like) -> int: ... - def write(self, __b: Union[bytes, bytearray]) -> int: ... - def readinto1(self, __buffer: _bytearray_like) -> int: ... - def read(self, __size: Optional[int] = ...) -> bytes: ... if sys.version_info >= (3, 7): def read1(self, __size: Optional[int] = ...) -> bytes: ... else: - def read1(self, __size: Optional[int]) -> bytes: ... + def read1(self, __size: Optional[int]) -> bytes: ... # type: ignore class BufferedReader(BufferedIOBase): def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... def peek(self, __size: int = ...) -> bytes: ... + if sys.version_info >= (3, 7): + def read1(self, __size: int = ...) -> bytes: ... + else: + def read1(self, __size: int) -> bytes: ... # type: ignore class BufferedWriter(BufferedIOBase): def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... @@ -133,6 +107,10 @@ class BufferedRandom(BufferedReader, BufferedWriter): def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... def seek(self, __target: int, __whence: int = ...) -> int: ... def tell(self) -> int: ... + if sys.version_info >= (3, 7): + def read1(self, __size: int = ...) -> bytes: ... + else: + def read1(self, __size: int) -> bytes: ... # type: ignore class BufferedRWPair(BufferedIOBase): def __init__(self, reader: RawIOBase, writer: RawIOBase, diff --git a/stdlib/3/lzma.pyi b/stdlib/3/lzma.pyi index 37009c813cee..08dba8076327 100644 --- a/stdlib/3/lzma.pyi +++ b/stdlib/3/lzma.pyi @@ -85,7 +85,7 @@ class LZMAFile(io.BufferedIOBase, IO[bytes]): # type: ignore # python/mypy#502 def peek(self, size: int = ...) -> bytes: ... def read(self, size: Optional[int] = ...) -> bytes: ... def read1(self, size: int = ...) -> bytes: ... - def readline(self, size: int = ...) -> bytes: ... + def readline(self, size: Optional[int] = ...) -> bytes: ... def write(self, data: bytes) -> int: ... def seek(self, offset: int, whence: int = ...) -> int: ... def tell(self) -> int: ... diff --git a/tests/stubtest_whitelists/py35.txt b/tests/stubtest_whitelists/py35.txt index e2d141036b92..855fc9dfa5bb 100644 --- a/tests/stubtest_whitelists/py35.txt +++ b/tests/stubtest_whitelists/py35.txt @@ -32,8 +32,6 @@ gettext.npgettext gettext.pgettext importlib.metadata importlib.resources -io.BufferedRandom.read1 -io.BufferedReader.read1 io.StringIO.readline ipaddress._BaseNetwork.__init__ json.dump diff --git a/tests/stubtest_whitelists/py36.txt b/tests/stubtest_whitelists/py36.txt index 7a5d18c2ea92..d072377cd4d9 100644 --- a/tests/stubtest_whitelists/py36.txt +++ b/tests/stubtest_whitelists/py36.txt @@ -29,8 +29,6 @@ gettext.npgettext gettext.pgettext importlib.metadata importlib.resources -io.BufferedRandom.read1 -io.BufferedReader.read1 io.StringIO.readline ipaddress._BaseNetwork.__init__ json.loads diff --git a/tests/stubtest_whitelists/py3_common.txt b/tests/stubtest_whitelists/py3_common.txt index d58ac3cfcb0b..1a3c4171e120 100644 --- a/tests/stubtest_whitelists/py3_common.txt +++ b/tests/stubtest_whitelists/py3_common.txt @@ -247,6 +247,7 @@ io.BufferedReader.truncate io.BufferedWriter.seek io.BufferedWriter.truncate io.BytesIO.readlines +io.BytesIO.seek # Parameter name for a positional-only param differs from its name in the inherited method io.FileIO.seek io.StringIO.seek io.StringIO.truncate