Skip to content

Commit 6b70245

Browse files
http: improve types (#9055)
1 parent 460158f commit 6b70245

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

stdlib/http/client.pyi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import email.message
22
import io
33
import ssl
44
import types
5-
from _typeshed import Self, WriteableBuffer
5+
from _typeshed import ReadableBuffer, Self, SupportsRead, WriteableBuffer
66
from collections.abc import Callable, Iterable, Iterator, Mapping
77
from socket import socket
8-
from typing import IO, Any, BinaryIO, TypeVar, overload
8+
from typing import Any, BinaryIO, TypeVar, overload
99
from typing_extensions import TypeAlias
1010

1111
__all__ = [
@@ -30,7 +30,7 @@ __all__ = [
3030
"HTTPSConnection",
3131
]
3232

33-
_DataType: TypeAlias = bytes | IO[Any] | Iterable[bytes] | str
33+
_DataType: TypeAlias = SupportsRead[bytes] | Iterable[ReadableBuffer] | ReadableBuffer
3434
_T = TypeVar("_T")
3535

3636
HTTP_PORT: int
@@ -164,7 +164,7 @@ class HTTPConnection:
164164
def putrequest(self, method: str, url: str, skip_host: bool = ..., skip_accept_encoding: bool = ...) -> None: ...
165165
def putheader(self, header: str, *argument: str) -> None: ...
166166
def endheaders(self, message_body: _DataType | None = ..., *, encode_chunked: bool = ...) -> None: ...
167-
def send(self, data: _DataType) -> None: ...
167+
def send(self, data: _DataType | str) -> None: ...
168168

169169
class HTTPSConnection(HTTPConnection):
170170
# Can be `None` if `.connect()` was not called:

stdlib/http/server.pyi

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import email.message
22
import io
33
import socketserver
4+
import sys
45
from _typeshed import StrPath, SupportsRead, SupportsWrite
56
from collections.abc import Mapping, Sequence
67
from typing import Any, AnyStr, BinaryIO, ClassVar
@@ -31,7 +32,6 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
3132
default_request_version: str # undocumented
3233
weekdayname: ClassVar[Sequence[str]] # undocumented
3334
monthname: ClassVar[Sequence[str | None]] # undocumented
34-
def __init__(self, request: bytes, client_address: tuple[str, int], server: socketserver.BaseServer) -> None: ...
3535
def handle_one_request(self) -> None: ...
3636
def handle_expect_100(self) -> bool: ...
3737
def send_error(self, code: int, message: str | None = ..., explain: str | None = ...) -> None: ...
@@ -51,9 +51,26 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
5151

5252
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
5353
extensions_map: dict[str, str]
54-
def __init__(
55-
self, request: bytes, client_address: tuple[str, int], server: socketserver.BaseServer, directory: str | None = ...
56-
) -> None: ...
54+
if sys.version_info >= (3, 12):
55+
def __init__(
56+
self,
57+
request: socketserver._RequestType,
58+
client_address: socketserver._AddressType,
59+
server: socketserver.BaseServer,
60+
*,
61+
directory: str | None = ...,
62+
) -> None: ...
63+
else:
64+
def __init__(
65+
self,
66+
request: socketserver._RequestType,
67+
client_address: socketserver._AddressType,
68+
server: socketserver.BaseServer,
69+
*,
70+
directory: str | None = ...,
71+
index_pages: Sequence[str] | None = ...,
72+
) -> None: ...
73+
5774
def do_GET(self) -> None: ...
5875
def do_HEAD(self) -> None: ...
5976
def send_head(self) -> io.BytesIO | BinaryIO | None: ... # undocumented

tests/stubtest_allowlists/py3_common.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,6 @@ ssl.RAND_egd
422422
collections.abc.* # Types are re-exported from _collections_abc, so errors should be fixed there
423423
distutils.command.check.SilentReporter # only defined if docutils in installed
424424
hmac.HMAC.blocksize # use block_size instead
425-
http.server.SimpleHTTPRequestHandler.__init__ # *args is expanded
426425
pickle.Pickler.memo # undocumented implementation detail, has different type in C/Python implementations
427426
pickle.Unpickler.memo # undocumented implementation detail, has different type in C/Python implementations
428427
re.Pattern.scanner # Undocumented and not useful. #6405

0 commit comments

Comments
 (0)