From f10e61dc467679c695aed88a651b648d18cb7f72 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Fri, 4 Nov 2022 18:27:10 -0700 Subject: [PATCH 1/4] smtplib: Improve bytes handling --- stdlib/smtplib.pyi | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/stdlib/smtplib.pyi b/stdlib/smtplib.pyi index 2d03b60e7bb4..071bda324c36 100644 --- a/stdlib/smtplib.pyi +++ b/stdlib/smtplib.pyi @@ -1,5 +1,5 @@ import sys -from _typeshed import Self +from _typeshed import _BufferWithLen, ReadableBuffer, Self from collections.abc import Sequence from email.message import Message as _Message from re import Pattern @@ -29,7 +29,7 @@ __all__ = [ _Reply: TypeAlias = tuple[int, bytes] _SendErrs: TypeAlias = dict[str, _Reply] # Should match source_address for socket.create_connection -_SourceAddress: TypeAlias = tuple[bytearray | bytes | str, int] +_SourceAddress: TypeAlias = tuple[ReadableBuffer | str, int] SMTP_PORT: int SMTP_SSL_PORT: int @@ -102,7 +102,7 @@ class SMTP: ) -> None: ... def set_debuglevel(self, debuglevel: int) -> None: ... def connect(self, host: str = ..., port: int = ..., source_address: _SourceAddress | None = ...) -> _Reply: ... - def send(self, s: bytes | str) -> None: ... + def send(self, s: ReadableBuffer | str) -> None: ... def putcmd(self, cmd: str, args: str = ...) -> None: ... def getreply(self) -> _Reply: ... def docmd(self, cmd: str, args: str = ...) -> _Reply: ... @@ -114,7 +114,7 @@ class SMTP: def noop(self) -> _Reply: ... def mail(self, sender: str, options: Sequence[str] = ...) -> _Reply: ... def rcpt(self, recip: str, options: Sequence[str] = ...) -> _Reply: ... - def data(self, msg: bytes | str) -> _Reply: ... + def data(self, msg: ReadableBuffer | str) -> _Reply: ... def verify(self, address: str) -> _Reply: ... vrfy = verify def expn(self, address: str) -> _Reply: ... @@ -125,16 +125,16 @@ class SMTP: @overload def auth_cram_md5(self, challenge: None = ...) -> None: ... @overload - def auth_cram_md5(self, challenge: bytes) -> str: ... - def auth_plain(self, challenge: bytes | None = ...) -> str: ... - def auth_login(self, challenge: bytes | None = ...) -> str: ... + def auth_cram_md5(self, challenge: ReadableBuffer) -> str: ... + def auth_plain(self, challenge: ReadableBuffer | None = ...) -> str: ... + def auth_login(self, challenge: ReadableBuffer | None = ...) -> str: ... def login(self, user: str, password: str, *, initial_response_ok: bool = ...) -> _Reply: ... def starttls(self, keyfile: str | None = ..., certfile: str | None = ..., context: SSLContext | None = ...) -> _Reply: ... def sendmail( self, from_addr: str, to_addrs: str | Sequence[str], - msg: bytes | str, + msg: _BufferWithLen | str, mail_options: Sequence[str] = ..., rcpt_options: Sequence[str] = ..., ) -> _SendErrs: ... From 85cd3f4caaa105b6cb1ee09a80c95e7981122559 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 5 Nov 2022 01:28:21 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/smtplib.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/smtplib.pyi b/stdlib/smtplib.pyi index 071bda324c36..9c890a311916 100644 --- a/stdlib/smtplib.pyi +++ b/stdlib/smtplib.pyi @@ -1,5 +1,5 @@ import sys -from _typeshed import _BufferWithLen, ReadableBuffer, Self +from _typeshed import ReadableBuffer, Self, _BufferWithLen from collections.abc import Sequence from email.message import Message as _Message from re import Pattern From 32b02de5ad12179b9b989c19c9f549c5d569604f Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Fri, 4 Nov 2022 18:53:20 -0700 Subject: [PATCH 3/4] Use socket._Address --- stdlib/smtplib.pyi | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/stdlib/smtplib.pyi b/stdlib/smtplib.pyi index 9c890a311916..e2e0a83c265a 100644 --- a/stdlib/smtplib.pyi +++ b/stdlib/smtplib.pyi @@ -9,6 +9,8 @@ from types import TracebackType from typing import Any, Protocol, overload from typing_extensions import TypeAlias +from _socket import _Address + __all__ = [ "SMTPException", "SMTPServerDisconnected", @@ -28,8 +30,6 @@ __all__ = [ _Reply: TypeAlias = tuple[int, bytes] _SendErrs: TypeAlias = dict[str, _Reply] -# Should match source_address for socket.create_connection -_SourceAddress: TypeAlias = tuple[ReadableBuffer | str, int] SMTP_PORT: int SMTP_SSL_PORT: int @@ -86,7 +86,7 @@ class SMTP: timeout: float esmtp_features: dict[str, str] command_encoding: str - source_address: _SourceAddress | None + source_address: _Address | None local_hostname: str def __init__( self, @@ -94,14 +94,14 @@ class SMTP: port: int = ..., local_hostname: str | None = ..., timeout: float = ..., - source_address: _SourceAddress | None = ..., + source_address: _Address | None = ..., ) -> None: ... def __enter__(self: Self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, tb: TracebackType | None ) -> None: ... def set_debuglevel(self, debuglevel: int) -> None: ... - def connect(self, host: str = ..., port: int = ..., source_address: _SourceAddress | None = ...) -> _Reply: ... + def connect(self, host: str = ..., port: int = ..., source_address: _Address | None = ...) -> _Reply: ... def send(self, s: ReadableBuffer | str) -> None: ... def putcmd(self, cmd: str, args: str = ...) -> None: ... def getreply(self) -> _Reply: ... @@ -161,7 +161,7 @@ class SMTP_SSL(SMTP): keyfile: str | None = ..., certfile: str | None = ..., timeout: float = ..., - source_address: _SourceAddress | None = ..., + source_address: _Address | None = ..., context: SSLContext | None = ..., ) -> None: ... @@ -174,10 +174,10 @@ class LMTP(SMTP): host: str = ..., port: int = ..., local_hostname: str | None = ..., - source_address: _SourceAddress | None = ..., + source_address: _Address | None = ..., timeout: float = ..., ) -> None: ... else: def __init__( - self, host: str = ..., port: int = ..., local_hostname: str | None = ..., source_address: _SourceAddress | None = ... + self, host: str = ..., port: int = ..., local_hostname: str | None = ..., source_address: _Address | None = ... ) -> None: ... From 66db35fb6ece6f128ac0957b36291bf620d1fc5f Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Fri, 4 Nov 2022 19:23:55 -0700 Subject: [PATCH 4/4] alias it --- stdlib/smtplib.pyi | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/stdlib/smtplib.pyi b/stdlib/smtplib.pyi index e2e0a83c265a..5f9ebab033b5 100644 --- a/stdlib/smtplib.pyi +++ b/stdlib/smtplib.pyi @@ -9,7 +9,7 @@ from types import TracebackType from typing import Any, Protocol, overload from typing_extensions import TypeAlias -from _socket import _Address +from _socket import _Address as _SourceAddress __all__ = [ "SMTPException", @@ -86,7 +86,7 @@ class SMTP: timeout: float esmtp_features: dict[str, str] command_encoding: str - source_address: _Address | None + source_address: _SourceAddress | None local_hostname: str def __init__( self, @@ -94,14 +94,14 @@ class SMTP: port: int = ..., local_hostname: str | None = ..., timeout: float = ..., - source_address: _Address | None = ..., + source_address: _SourceAddress | None = ..., ) -> None: ... def __enter__(self: Self) -> Self: ... def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, tb: TracebackType | None ) -> None: ... def set_debuglevel(self, debuglevel: int) -> None: ... - def connect(self, host: str = ..., port: int = ..., source_address: _Address | None = ...) -> _Reply: ... + def connect(self, host: str = ..., port: int = ..., source_address: _SourceAddress | None = ...) -> _Reply: ... def send(self, s: ReadableBuffer | str) -> None: ... def putcmd(self, cmd: str, args: str = ...) -> None: ... def getreply(self) -> _Reply: ... @@ -161,7 +161,7 @@ class SMTP_SSL(SMTP): keyfile: str | None = ..., certfile: str | None = ..., timeout: float = ..., - source_address: _Address | None = ..., + source_address: _SourceAddress | None = ..., context: SSLContext | None = ..., ) -> None: ... @@ -174,10 +174,10 @@ class LMTP(SMTP): host: str = ..., port: int = ..., local_hostname: str | None = ..., - source_address: _Address | None = ..., + source_address: _SourceAddress | None = ..., timeout: float = ..., ) -> None: ... else: def __init__( - self, host: str = ..., port: int = ..., local_hostname: str | None = ..., source_address: _Address | None = ... + self, host: str = ..., port: int = ..., local_hostname: str | None = ..., source_address: _SourceAddress | None = ... ) -> None: ...