mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-24 04:41:30 +08:00
[alt] typing: accept buffers in IO.write (#9861)
Co-authored-by: JelleZijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
@@ -272,8 +272,9 @@ class StreamRecoder(BinaryIO):
|
||||
def readlines(self, sizehint: int | None = None) -> list[bytes]: ...
|
||||
def __next__(self) -> bytes: ...
|
||||
def __iter__(self) -> Self: ...
|
||||
# Base class accepts more types than just bytes
|
||||
def write(self, data: bytes) -> None: ... # type: ignore[override]
|
||||
def writelines(self, list: Iterable[bytes]) -> None: ...
|
||||
def writelines(self, list: Iterable[bytes]) -> None: ... # type: ignore[override]
|
||||
def reset(self) -> None: ...
|
||||
def __getattr__(self, name: str) -> Any: ...
|
||||
def __enter__(self) -> Self: ...
|
||||
|
||||
@@ -101,7 +101,7 @@ class HTTPMessage(email.message.Message):
|
||||
|
||||
def parse_headers(fp: io.BufferedIOBase, _class: Callable[[], email.message.Message] = ...) -> HTTPMessage: ...
|
||||
|
||||
class HTTPResponse(io.BufferedIOBase, BinaryIO):
|
||||
class HTTPResponse(io.BufferedIOBase, BinaryIO): # type: ignore[misc] # incompatible method definitions in the base classes
|
||||
msg: HTTPMessage
|
||||
headers: HTTPMessage
|
||||
version: int
|
||||
|
||||
@@ -90,7 +90,7 @@ class BufferedIOBase(IOBase):
|
||||
def read(self, __size: int | None = ...) -> bytes: ...
|
||||
def read1(self, __size: int = ...) -> bytes: ...
|
||||
|
||||
class FileIO(RawIOBase, BinaryIO):
|
||||
class FileIO(RawIOBase, BinaryIO): # type: ignore[misc] # incompatible definitions of writelines in the base classes
|
||||
mode: str
|
||||
name: FileDescriptorOrPath # type: ignore[assignment]
|
||||
def __init__(
|
||||
@@ -102,7 +102,7 @@ class FileIO(RawIOBase, BinaryIO):
|
||||
def read(self, __size: int = -1) -> bytes: ...
|
||||
def __enter__(self) -> Self: ...
|
||||
|
||||
class BytesIO(BufferedIOBase, BinaryIO):
|
||||
class BytesIO(BufferedIOBase, BinaryIO): # type: ignore[misc] # incompatible definitions of methods in the base classes
|
||||
def __init__(self, initial_bytes: ReadableBuffer = ...) -> 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
|
||||
@@ -113,17 +113,17 @@ class BytesIO(BufferedIOBase, BinaryIO):
|
||||
def getbuffer(self) -> memoryview: ...
|
||||
def read1(self, __size: int | None = -1) -> bytes: ...
|
||||
|
||||
class BufferedReader(BufferedIOBase, BinaryIO):
|
||||
class BufferedReader(BufferedIOBase, BinaryIO): # type: ignore[misc] # incompatible definitions of methods in the base classes
|
||||
def __enter__(self) -> Self: ...
|
||||
def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ...
|
||||
def peek(self, __size: int = 0) -> bytes: ...
|
||||
|
||||
class BufferedWriter(BufferedIOBase, BinaryIO):
|
||||
class BufferedWriter(BufferedIOBase, BinaryIO): # type: ignore[misc] # incompatible definitions of writelines in the base classes
|
||||
def __enter__(self) -> Self: ...
|
||||
def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ...
|
||||
def write(self, __buffer: ReadableBuffer) -> int: ...
|
||||
|
||||
class BufferedRandom(BufferedReader, BufferedWriter):
|
||||
class BufferedRandom(BufferedReader, BufferedWriter): # type: ignore[misc] # incompatible definitions of methods in the base classes
|
||||
def __enter__(self) -> Self: ...
|
||||
def seek(self, __target: int, __whence: int = 0) -> int: ... # stubtest needs this
|
||||
|
||||
@@ -144,7 +144,7 @@ class TextIOBase(IOBase):
|
||||
def readlines(self, __hint: int = -1) -> list[str]: ... # type: ignore[override]
|
||||
def read(self, __size: int | None = ...) -> str: ...
|
||||
|
||||
class TextIOWrapper(TextIOBase, TextIO):
|
||||
class TextIOWrapper(TextIOBase, TextIO): # type: ignore[misc] # incompatible definitions of write in the base classes
|
||||
def __init__(
|
||||
self,
|
||||
buffer: IO[bytes],
|
||||
|
||||
@@ -104,7 +104,7 @@ class LZMACompressor:
|
||||
|
||||
class LZMAError(Exception): ...
|
||||
|
||||
class LZMAFile(io.BufferedIOBase, IO[bytes]):
|
||||
class LZMAFile(io.BufferedIOBase, IO[bytes]): # type: ignore[misc] # incompatible definitions of writelines in the base classes
|
||||
def __init__(
|
||||
self,
|
||||
filename: _PathOrFile | None = None,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import io
|
||||
import sys
|
||||
from _typeshed import BytesPath, GenericPath, StrPath, WriteableBuffer
|
||||
from _typeshed import BytesPath, GenericPath, ReadableBuffer, StrPath, WriteableBuffer
|
||||
from collections.abc import Iterable, Iterator
|
||||
from types import TracebackType
|
||||
from typing import IO, Any, AnyStr, Generic, overload
|
||||
@@ -215,7 +215,17 @@ class _TemporaryFileWrapper(Generic[AnyStr], IO[AnyStr]):
|
||||
def tell(self) -> int: ...
|
||||
def truncate(self, size: int | None = ...) -> int: ...
|
||||
def writable(self) -> bool: ...
|
||||
@overload
|
||||
def write(self: _TemporaryFileWrapper[str], s: str) -> int: ...
|
||||
@overload
|
||||
def write(self: _TemporaryFileWrapper[bytes], s: ReadableBuffer) -> int: ...
|
||||
@overload
|
||||
def write(self, s: AnyStr) -> int: ...
|
||||
@overload
|
||||
def writelines(self: _TemporaryFileWrapper[str], lines: Iterable[str]) -> None: ...
|
||||
@overload
|
||||
def writelines(self: _TemporaryFileWrapper[bytes], lines: Iterable[ReadableBuffer]) -> None: ...
|
||||
@overload
|
||||
def writelines(self, lines: Iterable[AnyStr]) -> None: ...
|
||||
|
||||
if sys.version_info >= (3, 11):
|
||||
@@ -392,8 +402,18 @@ class SpooledTemporaryFile(IO[AnyStr], _SpooledTemporaryFileBase):
|
||||
def seek(self, offset: int, whence: int = ...) -> int: ...
|
||||
def tell(self) -> int: ...
|
||||
def truncate(self, size: int | None = None) -> None: ... # type: ignore[override]
|
||||
@overload
|
||||
def write(self: SpooledTemporaryFile[str], s: str) -> int: ...
|
||||
@overload
|
||||
def write(self: SpooledTemporaryFile[bytes], s: ReadableBuffer) -> int: ...
|
||||
@overload
|
||||
def write(self, s: AnyStr) -> int: ...
|
||||
def writelines(self, iterable: Iterable[AnyStr]) -> None: ... # type: ignore[override]
|
||||
@overload
|
||||
def writelines(self: SpooledTemporaryFile[str], iterable: Iterable[str]) -> None: ...
|
||||
@overload
|
||||
def writelines(self: SpooledTemporaryFile[bytes], iterable: Iterable[ReadableBuffer]) -> None: ...
|
||||
@overload
|
||||
def writelines(self, iterable: Iterable[AnyStr]) -> None: ...
|
||||
def __iter__(self) -> Iterator[AnyStr]: ... # type: ignore[override]
|
||||
# These exist at runtime only on 3.11+.
|
||||
def readable(self) -> bool: ...
|
||||
|
||||
@@ -2,7 +2,7 @@ import collections # Needed by aliases like DefaultDict, see mypy issue 2986
|
||||
import sys
|
||||
import typing_extensions
|
||||
from _collections_abc import dict_items, dict_keys, dict_values
|
||||
from _typeshed import IdentityFunction, Incomplete, SupportsKeysAndGetItem
|
||||
from _typeshed import IdentityFunction, Incomplete, ReadableBuffer, SupportsKeysAndGetItem
|
||||
from abc import ABCMeta, abstractmethod
|
||||
from contextlib import AbstractAsyncContextManager, AbstractContextManager
|
||||
from re import Match as Match, Pattern as Pattern
|
||||
@@ -687,8 +687,22 @@ class IO(Iterator[AnyStr], Generic[AnyStr]):
|
||||
@abstractmethod
|
||||
def writable(self) -> bool: ...
|
||||
@abstractmethod
|
||||
@overload
|
||||
def write(self: IO[str], __s: str) -> int: ...
|
||||
@abstractmethod
|
||||
@overload
|
||||
def write(self: IO[bytes], __s: ReadableBuffer) -> int: ...
|
||||
@abstractmethod
|
||||
@overload
|
||||
def write(self, __s: AnyStr) -> int: ...
|
||||
@abstractmethod
|
||||
@overload
|
||||
def writelines(self: IO[str], __lines: Iterable[str]) -> None: ...
|
||||
@abstractmethod
|
||||
@overload
|
||||
def writelines(self: IO[bytes], __lines: Iterable[ReadableBuffer]) -> None: ...
|
||||
@abstractmethod
|
||||
@overload
|
||||
def writelines(self, __lines: Iterable[AnyStr]) -> None: ...
|
||||
@abstractmethod
|
||||
def __next__(self) -> AnyStr: ...
|
||||
|
||||
Reference in New Issue
Block a user