@@ -99,6 +99,24 @@ responses: dict[int, str]
99
99
100
100
class HTTPMessage (email .message .Message ):
101
101
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 ]]: ...
102
120
103
121
def parse_headers (fp : io .BufferedIOBase , _class : Callable [[], email .message .Message ] = ...) -> HTTPMessage : ...
104
122
0 commit comments