8000 override `http.HTTPMessage` methods to only use `str` for the header … · python/typeshed@cf6bafb · GitHub
[go: up one dir, main page]

Skip to content

Commit cf6bafb

Browse files
authored
override http.HTTPMessage methods to only use str for the header type (#11114)
1 parent 7bdf6ba commit cf6bafb

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

stdlib/http/client.pyi

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,24 @@ responses: dict[int, str]
9999

100100
class HTTPMessage(email.message.Message):
101101
def getallmatchingheaders(self, name: str) -> list[str]: ... # undocumented
102+
# override below all of Message's methods that use `_HeaderType` / `_HeaderTypeParam` with `str`
103+
# `HTTPMessage` breaks the Liskov substitution principle by only intending for `str` headers
104+
# This is easier than making `Message` generic
105+
def __getitem__(self, name: str) -> str | None: ...
106+
def __setitem__(self, name: str, val: str) -> None: ... # type: ignore[override]
107+
def values(self) -> list[str]: ...
108+
def items(self) -> list[tuple[str, str]]: ...
109+
@overload
110+
def get(self, name: str, failobj: None = None) -> str | None: ...
111+
@overload
112+
def get(self, name: str, failobj: _T) -> str | _T: ...
113+
@overload
114+
def get_all(self, name: str, failobj: None = None) -> list[str] | None: ...
115+
@overload
116+
def get_all(self, name: str, failobj: _T) -> list[str] | _T: ...
117+
def replace_header(self, _name: str, _value: str) -> None: ... # type: ignore[override]
118+
def set_raw(self, name: str, value: str) -> None: ... # type: ignore[override]
119+
def raw_items(self) -> Iterator[tuple[str, str]]: ...
102120

103121
def parse_headers(fp: io.BufferedIOBase, _class: Callable[[], email.message.Message] = ...) -> HTTPMessage: ...
104122

0 commit comments

Comments
 (0)
0