mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-22 03:41:28 +08:00
Make email.message.Message generic over the header type (#11732)
Co-authored-by: Avasam <samuel.06@hotmail.com>
This commit is contained in:
@@ -3,7 +3,7 @@ import io
|
||||
import ssl
|
||||
import sys
|
||||
import types
|
||||
from _typeshed import ReadableBuffer, SupportsRead, WriteableBuffer
|
||||
from _typeshed import ReadableBuffer, SupportsRead, SupportsReadline, WriteableBuffer
|
||||
from collections.abc import Callable, Iterable, Iterator, Mapping
|
||||
from socket import socket
|
||||
from typing import Any, BinaryIO, TypeVar, overload
|
||||
@@ -33,6 +33,7 @@ __all__ = [
|
||||
|
||||
_DataType: TypeAlias = SupportsRead[bytes] | Iterable[ReadableBuffer] | ReadableBuffer
|
||||
_T = TypeVar("_T")
|
||||
_MessageT = TypeVar("_MessageT", bound=email.message.Message)
|
||||
|
||||
HTTP_PORT: int
|
||||
HTTPS_PORT: int
|
||||
@@ -97,28 +98,13 @@ NETWORK_AUTHENTICATION_REQUIRED: int
|
||||
|
||||
responses: dict[int, str]
|
||||
|
||||
class HTTPMessage(email.message.Message):
|
||||
class HTTPMessage(email.message.Message[str, str]):
|
||||
def getallmatchingheaders(self, name: str) -> list[str]: ... # undocumented
|
||||
# override below all of Message's methods that use `_HeaderType` / `_HeaderTypeParam` with `str`
|
||||
# `HTTPMessage` breaks the Liskov substitution principle by only intending for `str` headers
|
||||
# This is easier than making `Message` generic
|
||||
def __getitem__(self, name: str) -> str | None: ...
|
||||
def __setitem__(self, name: str, val: str) -> None: ... # type: ignore[override]
|
||||
def values(self) -> list[str]: ...
|
||||
def items(self) -> list[tuple[str, str]]: ...
|
||||
@overload
|
||||
def get(self, name: str, failobj: None = None) -> str | None: ...
|
||||
@overload
|
||||
def get(self, name: str, failobj: _T) -> str | _T: ...
|
||||
@overload
|
||||
def get_all(self, name: str, failobj: None = None) -> list[str] | None: ...
|
||||
@overload
|
||||
def get_all(self, name: str, failobj: _T) -> list[str] | _T: ...
|
||||
def replace_header(self, _name: str, _value: str) -> None: ... # type: ignore[override]
|
||||
def set_raw(self, name: str, value: str) -> None: ... # type: ignore[override]
|
||||
def raw_items(self) -> Iterator[tuple[str, str]]: ...
|
||||
|
||||
def parse_headers(fp: io.BufferedIOBase, _class: Callable[[], email.message.Message] = ...) -> HTTPMessage: ...
|
||||
@overload
|
||||
def parse_headers(fp: SupportsReadline[bytes], _class: Callable[[], _MessageT]) -> _MessageT: ...
|
||||
@overload
|
||||
def parse_headers(fp: SupportsReadline[bytes]) -> HTTPMessage: ...
|
||||
|
||||
class HTTPResponse(io.BufferedIOBase, BinaryIO): # type: ignore[misc] # incompatible method definitions in the base classes
|
||||
msg: HTTPMessage
|
||||
|
||||
Reference in New Issue
Block a user