From 7bd64098670f471858e9369c7f3ce53a3bf837d0 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Mon, 31 Oct 2022 21:39:56 -0700 Subject: [PATCH 1/5] http: improve types --- stdlib/http/client.pyi | 4 ++-- stdlib/http/server.pyi | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/stdlib/http/client.pyi b/stdlib/http/client.pyi index 2ce52eac9ad9..eef1091bb961 100644 --- a/stdlib/http/client.pyi +++ b/stdlib/http/client.pyi @@ -2,7 +2,7 @@ import email.message import io import ssl import types -from _typeshed import Self, WriteableBuffer +from _typeshed import ReadableBuffer, Self, SupportsRead, WriteableBuffer from collections.abc import Callable, Iterable, Iterator, Mapping from socket import socket from typing import IO, Any, BinaryIO, TypeVar, overload @@ -30,7 +30,7 @@ __all__ = [ "HTTPSConnection", ] -_DataType: TypeAlias = bytes | IO[Any] | Iterable[bytes] | str +_DataType: TypeAlias = SupportsRead[bytes] | Iterable[ReadableBuffer] | ReadableBuffer _T = TypeVar("_T") HTTP_PORT: int diff --git a/stdlib/http/server.pyi b/stdlib/http/server.pyi index 40c94bf62f30..e74534c36c43 100644 --- a/stdlib/http/server.pyi +++ b/stdlib/http/server.pyi @@ -31,7 +31,6 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler): default_request_version: str # undocumented weekdayname: ClassVar[Sequence[str]] # undocumented monthname: ClassVar[Sequence[str | None]] # undocumented - def __init__(self, request: bytes, client_address: tuple[str, int], server: socketserver.BaseServer) -> None: ... def handle_one_request(self) -> None: ... def handle_expect_100(self) -> bool: ... def send_error(self, code: int, message: str | None = ..., explain: str | None = ...) -> None: ... @@ -52,7 +51,12 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler): class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): extensions_map: dict[str, str] def __init__( - self, request: bytes, client_address: tuple[str, int], server: socketserver.BaseServer, directory: str | None = ... + self, + request: socketserver._RequestType, + client_address: socketserver._AddressType, + server: socketserver.BaseServer, + directory: str | None = ..., + index_pages: Sequence[str] | None = ..., ) -> None: ... def do_GET(self) -> None: ... def do_HEAD(self) -> None: ... From ca92fd2465a4483c7f33796b648bef9ba4c2f742 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Nov 2022 04:41:11 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/http/client.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/http/client.pyi b/stdlib/http/client.pyi index eef1091bb961..91417a3ff40d 100644 --- a/stdlib/http/client.pyi +++ b/stdlib/http/client.pyi @@ -5,7 +5,7 @@ import types from _typeshed import ReadableBuffer, Self, SupportsRead, WriteableBuffer from collections.abc import Callable, Iterable, Iterator, Mapping from socket import socket -from typing import IO, Any, BinaryIO, TypeVar, overload +from typing import Any, BinaryIO, TypeVar, overload from typing_extensions import TypeAlias __all__ = [ From 2e733fae2dfa72db692463491a9bad1c1bea26b3 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Wed, 2 Nov 2022 20:39:23 -0700 Subject: [PATCH 3/5] Address feedback --- stdlib/http/client.pyi | 2 +- stdlib/http/server.pyi | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/stdlib/http/client.pyi b/stdlib/http/client.pyi index 91417a3ff40d..ad794ed9b073 100644 --- a/stdlib/http/client.pyi +++ b/stdlib/http/client.pyi @@ -164,7 +164,7 @@ class HTTPConnection: def putrequest(self, method: str, url: str, skip_host: bool = ..., skip_accept_encoding: bool = ...) -> None: ... def putheader(self, header: str, *argument: str) -> None: ... def endheaders(self, message_body: _DataType | None = ..., *, encode_chunked: bool = ...) -> None: ... - def send(self, data: _DataType) -> None: ... + def send(self, data: _DataType | str) -> None: ... class HTTPSConnection(HTTPConnection): # Can be `None` if `.connect()` was not called: diff --git a/stdlib/http/server.pyi b/stdlib/http/server.pyi index e74534c36c43..c0858902faad 100644 --- a/stdlib/http/server.pyi +++ b/stdlib/http/server.pyi @@ -1,6 +1,7 @@ import email.message import io import socketserver +import sys from _typeshed import StrPath, SupportsRead, SupportsWrite from collections.abc import Mapping, Sequence from typing import Any, AnyStr, BinaryIO, ClassVar @@ -50,14 +51,25 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler): class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): extensions_map: dict[str, str] - def __init__( - self, - request: socketserver._RequestType, - client_address: socketserver._AddressType, - server: socketserver.BaseServer, - directory: str | None = ..., - index_pages: Sequence[str] | None = ..., - ) -> None: ... + if sys.version_info >= (3, 12): + def __init__( + self, + request: socketserver._RequestType, + client_address: socketserver._AddressType, + server: socketserver.BaseServer, + *, + directory: str | None = ..., + ) -> None: ... + else: + def __init__( + self, + request: socketserver._RequestType, + client_address: socketserver._AddressType, + server: socketserver.BaseServer, + *, + directory: str | None = ..., + index_pages: Sequence[str] | None = ..., + ) -> None: ... def do_GET(self) -> None: ... def do_HEAD(self) -> None: ... def send_head(self) -> io.BytesIO | BinaryIO | None: ... # undocumented From a3b888256bb194e0d4a133c2966bc277756a340c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 3 Nov 2022 03:40:34 +0000 Subject: [PATCH 4/5] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/http/server.pyi | 1 + 1 file changed, 1 insertion(+) diff --git a/stdlib/http/server.pyi b/stdlib/http/server.pyi index c0858902faad..7e254697fdf9 100644 --- a/stdlib/http/server.pyi +++ b/stdlib/http/server.pyi @@ -70,6 +70,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): directory: str | None = ..., index_pages: Sequence[str] | None = ..., ) -> None: ... + def do_GET(self) -> None: ... def do_HEAD(self) -> None: ... def send_head(self) -> io.BytesIO | BinaryIO | None: ... # undocumented From 65171d1fae04a9c2d80eb379f6028acfba6a0953 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Wed, 2 Nov 2022 22:09:42 -0700 Subject: [PATCH 5/5] fix stubtest --- tests/stubtest_allowlists/py3_common.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/stubtest_allowlists/py3_common.txt b/tests/stubtest_allowlists/py3_common.txt index 90b09baa1a0c..29241c85f051 100644 --- a/tests/stubtest_allowlists/py3_common.txt +++ b/tests/stubtest_allowlists/py3_common.txt @@ -422,7 +422,6 @@ ssl.RAND_egd collections.abc.* # Types are re-exported from _collections_abc, so errors should be fixed there distutils.command.check.SilentReporter # only defined if docutils in installed hmac.HMAC.blocksize # use block_size instead -http.server.SimpleHTTPRequestHandler.__init__ # *args is expanded pickle.Pickler.memo # undocumented implementation detail, has different type in C/Python implementations pickle.Unpickler.memo # undocumented implementation detail, has different type in C/Python implementations re.Pattern.scanner # Undocumented and not useful. #6405