From 0d96369bb0b9c175cc8319b2803de1bcade9af89 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 05:38:43 +0200 Subject: [PATCH 01/12] py3 common ssl fixes --- stdlib/ssl.pyi | 6 ++++++ tests/stubtest_whitelists/py3_common.txt | 21 +++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index 4b9eec42c262..d40a0dc5a9c7 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -245,6 +245,7 @@ class SSLSocket(socket.socket): if sys.version_info >= (3, 6): session: Optional[SSLSession] session_reused: Optional[bool] + def connect(self, addr: Union[socket._Address, bytes]) -> None: ... def read(self, len: int = ..., buffer: Optional[bytearray] = ...) -> bytes: ... def write(self, data: bytes) -> int: ... def do_handshake(self, block: bool = ...) -> None: ... # block is undocumented @@ -286,6 +287,10 @@ class SSLContext: options: int if sys.version_info >= (3, 8): post_handshake_auth: bool + if sys.version_info >= (3, 5): + def __new__(cls, protocol: int = ..., *args: Any, **kwargs: Any) -> SSLContext: ... + else: + def __new__(cls, protocol: int, *args: Any, **kwargs: Any) -> SSLContext: ... @property def protocol(self) -> int: ... verify_flags: int @@ -362,6 +367,7 @@ if sys.version_info >= (3, 5): if sys.version_info >= (3, 6): session: Optional[SSLSession] session_reused: bool + def __init__(self, *args: Any, **kwargs: Any) -> None: ... def read(self, len: int = ..., buffer: Optional[bytearray] = ...) -> bytes: ... def write(self, data: bytes) -> int: ... @overload diff --git a/tests/stubtest_whitelists/py3_common.txt b/tests/stubtest_whitelists/py3_common.txt index 37fd1ea8daf3..7e813e5e186e 100644 --- a/tests/stubtest_whitelists/py3_common.txt +++ b/tests/stubtest_whitelists/py3_common.txt @@ -352,18 +352,15 @@ sqlite3.dbapi2.Row.__len__ sqlite3.dbapi2.version_info sqlite3.version_info sre_constants.error.__init__ -ssl.PROTOCOL_SSLv2 -ssl.Purpose.__new__ -ssl.SSLContext.__new__ -ssl.SSLObject.__init__ -ssl.SSLSocket.connect -ssl.SSLSocket.connect_ex -ssl.SSLSocket.recv -ssl.SSLSocket.recv_into -ssl.SSLSocket.recvfrom -ssl.SSLSocket.recvfrom_into -ssl.SSLSocket.sendto -ssl._ASN1Object.__new__ +ssl.PROTOCOL_SSLv2 # Defined only if compiled with ssl v2 +ssl.Purpose.__new__ # You cannot override __new__ in NamedTuple and runtime uses namedtuple. +ssl.SSLSocket.connect_ex # SSLSocket addr differs from socket argument name address +ssl.SSLSocket.recv # SSLSocket buflen differs from socket argument name bufsize +ssl.SSLSocket.recv_into # SSLSocket signature differs from socket +ssl.SSLSocket.recvfrom # SSLSocket buflen differs from socket argument name bufsize +ssl.SSLSocket.recvfrom_into # SSLSocket signature differs from socket +ssl.SSLSocket.sendto # SSLSocket flags_or_addr differs from socket argument name flags +ssl._ASN1Object.__new__ # You cannot override __new__ in NamedTuple and runtime uses namedtuple. subprocess.Popen.__init__ sunau.Au_write.getmark sunau.Au_write.getmarkers From 87655cef19f99324cd1cbc00313050c7d3bdd981 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 05:51:22 +0200 Subject: [PATCH 02/12] Fix py36 SSLObject __init__ --- stdlib/ssl.pyi | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index d40a0dc5a9c7..af34c11d35bd 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -367,7 +367,12 @@ if sys.version_info >= (3, 5): if sys.version_info >= (3, 6): session: Optional[SSLSession] session_reused: bool - def __init__(self, *args: Any, **kwargs: Any) -> None: ... + if sys.version_info >= (3, 7): + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + else: + def __init__( + self, sslobj: Any, owner: Optional[Union[SSLSocket, SSLObject]] = ..., session: Optional[SSLSession] = ... + ) -> None: ... def read(self, len: int = ..., buffer: Optional[bytearray] = ...) -> bytes: ... def write(self, data: bytes) -> int: ... @overload From 34142d40db0a6556dd7c036acddaaacedf081fe5 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 14:13:21 +0200 Subject: [PATCH 03/12] SSLSession may not be defined in 3.6 --- stdlib/ssl.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index af34c11d35bd..6ea11c90c42d 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -371,7 +371,7 @@ if sys.version_info >= (3, 5): def __init__(self, *args: Any, **kwargs: Any) -> None: ... else: def __init__( - self, sslobj: Any, owner: Optional[Union[SSLSocket, SSLObject]] = ..., session: Optional[SSLSession] = ... + self, sslobj: Any, owner: Optional[Union[SSLSocket, SSLObject]] = ..., session: Optional[Any] = ... ) -> None: ... def read(self, len: int = ..., buffer: Optional[bytearray] = ...) -> bytes: ... def write(self, data: bytes) -> int: ... From 8f82d920ecfe140222efb2c7cd7db960270f2db6 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 14:39:37 +0200 Subject: [PATCH 04/12] add overridden SSLSocket functions --- stdlib/ssl.pyi | 9 +++++++++ tests/stubtest_whitelists/py3_common.txt | 6 ------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index 6ea11c90c42d..6a269d020334 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -246,6 +246,15 @@ class SSLSocket(socket.socket): session: Optional[SSLSession] session_reused: Optional[bool] def connect(self, addr: Union[socket._Address, bytes]) -> None: ... + def connect_ex(self, addr: Union[socket._Address, bytes]) -> int: ... + def recv(self, buflen: int = ..., flags: int = ...) -> bytes: ... + def recv_into(self, buffer: socket._WriteBuffer, nbytes: Optional[int] = ..., flags: int = ...) -> int: ... + def recvfrom(self, buflen: int = ..., flags: int = ...) -> Tuple[bytes, socket._RetAddress]: ... + def recvfrom_into(self, buffer: socket._WriteBuffer, nbytes: Optional[int] = ..., flags: int = ...) -> Tuple[int, socket._RetAddress]: ... + @overload + def sendto(self, data: bytes, flags_or_addr: socket._Address) -> int: ... + @overload + def sendto(self, data: bytes, flags_or_addr: Union[int, socket._Address], addr: Optional[socket._Address] = ...) -> int: ... def read(self, len: int = ..., buffer: Optional[bytearray] = ...) -> bytes: ... def write(self, data: bytes) -> int: ... def do_handshake(self, block: bool = ...) -> None: ... # block is undocumented diff --git a/tests/stubtest_whitelists/py3_common.txt b/tests/stubtest_whitelists/py3_common.txt index 7e813e5e186e..25ea0055059a 100644 --- a/tests/stubtest_whitelists/py3_common.txt +++ b/tests/stubtest_whitelists/py3_common.txt @@ -354,12 +354,6 @@ sqlite3.version_info sre_constants.error.__init__ ssl.PROTOCOL_SSLv2 # Defined only if compiled with ssl v2 ssl.Purpose.__new__ # You cannot override __new__ in NamedTuple and runtime uses namedtuple. -ssl.SSLSocket.connect_ex # SSLSocket addr differs from socket argument name address -ssl.SSLSocket.recv # SSLSocket buflen differs from socket argument name bufsize -ssl.SSLSocket.recv_into # SSLSocket signature differs from socket -ssl.SSLSocket.recvfrom # SSLSocket buflen differs from socket argument name bufsize -ssl.SSLSocket.recvfrom_into # SSLSocket signature differs from socket -ssl.SSLSocket.sendto # SSLSocket flags_or_addr differs from socket argument name flags ssl._ASN1Object.__new__ # You cannot override __new__ in NamedTuple and runtime uses namedtuple. subprocess.Popen.__init__ sunau.Au_write.getmark From ec2d58920f4833a2d89689d2ee72ea73df0b4b8d Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 15:03:04 +0200 Subject: [PATCH 05/12] Some more explanations and AF_INET fix for 3.9 --- stdlib/ssl.pyi | 7 +++++-- tests/stubtest_whitelists/py37.txt | 4 ++-- tests/stubtest_whitelists/py38.txt | 4 ++-- tests/stubtest_whitelists/py39.txt | 4 ++-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index 6a269d020334..ea06b30639ca 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -250,7 +250,9 @@ class SSLSocket(socket.socket): def recv(self, buflen: int = ..., flags: int = ...) -> bytes: ... def recv_into(self, buffer: socket._WriteBuffer, nbytes: Optional[int] = ..., flags: int = ...) -> int: ... def recvfrom(self, buflen: int = ..., flags: int = ...) -> Tuple[bytes, socket._RetAddress]: ... - def recvfrom_into(self, buffer: socket._WriteBuffer, nbytes: Optional[int] = ..., flags: int = ...) -> Tuple[int, socket._RetAddress]: ... + def recvfrom_into( + self, buffer: socket._WriteBuffer, nbytes: Optional[int] = ..., flags: int = ... + ) -> Tuple[int, socket._RetAddress]: ... @overload def sendto(self, data: bytes, flags_or_addr: socket._Address) -> int: ... @overload @@ -441,7 +443,8 @@ SSL_ERROR_ZERO_RETURN: int def get_protocol_name(protocol_code: int) -> str: ... -AF_INET: int +if sys.version_info < (3, 9): + AF_INET: int PEM_FOOTER: str PEM_HEADER: str SOCK_STREAM: int diff --git a/tests/stubtest_whitelists/py37.txt b/tests/stubtest_whitelists/py37.txt index fd15c7dc5c5a..7bc42c4ebd00 100644 --- a/tests/stubtest_whitelists/py37.txt +++ b/tests/stubtest_whitelists/py37.txt @@ -53,8 +53,8 @@ random.randrange # missing undocumented arg _int secrets.SystemRandom.getstate smtplib.SMTP.sendmail sre_constants.RANGE_IGNORE -ssl.PROTOCOL_SSLv3 -ssl.RAND_egd +ssl.PROTOCOL_SSLv3 # Depends on ssl compilation +ssl.RAND_egd # Depends on openssl compilation types.ClassMethodDescriptorType.__get__ types.MethodDescriptorType.__get__ types.WrapperDescriptorType.__get__ diff --git a/tests/stubtest_whitelists/py38.txt b/tests/stubtest_whitelists/py38.txt index d47b44350e09..dea389595299 100644 --- a/tests/stubtest_whitelists/py38.txt +++ b/tests/stubtest_whitelists/py38.txt @@ -78,8 +78,8 @@ secrets.SystemRandom.getstate select.epoll.register smtplib.SMTP.sendmail sre_constants.RANGE_IGNORE -ssl.PROTOCOL_SSLv3 -ssl.RAND_egd +ssl.PROTOCOL_SSLv3 # Depends on ssl compilation +ssl.RAND_egd # Depends on openssl compilation sys.UnraisableHookArgs types.ClassMethodDescriptorType.__get__ types.CodeType.replace diff --git a/tests/stubtest_whitelists/py39.txt b/tests/stubtest_whitelists/py39.txt index 3de34fa1e422..6ad1a8209906 100644 --- a/tests/stubtest_whitelists/py39.txt +++ b/tests/stubtest_whitelists/py39.txt @@ -101,8 +101,8 @@ smtplib.LMTP.__init__ smtplib.SMTP.sendmail sre_constants.RANGE_IGNORE ssl.AF_INET -ssl.PROTOCOL_SSLv3 -ssl.RAND_egd +ssl.PROTOCOL_SSLv3 # Depends on ssl compilation +ssl.RAND_egd # Depends on openssl compilation symtable.SymbolTable.has_exec sys.UnraisableHookArgs time.CLOCK_PROF From 4136d5abfca83b22691e15cf56fd210b3dca9ad4 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 15:06:09 +0200 Subject: [PATCH 06/12] Removing more exceptions so tests would run on them --- tests/stubtest_whitelists/py36.txt | 2 +- tests/stubtest_whitelists/py39.txt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/stubtest_whitelists/py36.txt b/tests/stubtest_whitelists/py36.txt index fc9c18b6dcd8..179789535749 100644 --- a/tests/stubtest_whitelists/py36.txt +++ b/tests/stubtest_whitelists/py36.txt @@ -43,7 +43,7 @@ random.randrange # missing undocumented arg _int secrets.SystemRandom.getstate smtplib.SMTP.sendmail sre_compile.dis -ssl.SSLSocket.__init__ +#ssl.SSLSocket.__init__ typing.AsyncGenerator.ag_await typing.AsyncGenerator.ag_code typing.AsyncGenerator.ag_frame diff --git a/tests/stubtest_whitelists/py39.txt b/tests/stubtest_whitelists/py39.txt index 6ad1a8209906..d2fc18fff513 100644 --- a/tests/stubtest_whitelists/py39.txt +++ b/tests/stubtest_whitelists/py39.txt @@ -100,7 +100,6 @@ select.epoll.register smtplib.LMTP.__init__ smtplib.SMTP.sendmail sre_constants.RANGE_IGNORE -ssl.AF_INET ssl.PROTOCOL_SSLv3 # Depends on ssl compilation ssl.RAND_egd # Depends on openssl compilation symtable.SymbolTable.has_exec From 1a56e9c14c5339428863ed869c2d6ce1f5068afc Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 15:33:20 +0200 Subject: [PATCH 07/12] Trying to fix 3.6 SSLSocket.__init__ issue --- stdlib/ssl.pyi | 22 ++++++++++++++++++++++ tests/stubtest_whitelists/py36.txt | 1 - 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index ea06b30639ca..ee9ceb37559a 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -245,6 +245,28 @@ class SSLSocket(socket.socket): if sys.version_info >= (3, 6): session: Optional[SSLSession] session_reused: Optional[bool] + if sys.version_info < (3, 7): + def __init__( + self, + sock: Optional[socket.socket] = ..., + keyfile: Optional[str] = ..., + certfile: Optional[str] = ..., + server_side: bool = ..., + cert_reqs: int = ..., + ssl_version: int = ..., + ca_certs: Optional[str] = ..., + do_handshake_on_connect: bool = ..., + family: int = ..., + type: int = ..., + proto: int = ..., + fileno: Optional[int] = ..., + suppress_ragged_eofs: bool = ..., + npn_protocols: Optional[Iterable[str]] = ..., + ciphers: Optional[str] = ..., + server_hostname: Optional[str] = ..., + _context: Optional[SSLContext] = ..., + _session: Optional[Any] = ..., + ): ... def connect(self, addr: Union[socket._Address, bytes]) -> None: ... def connect_ex(self, addr: Union[socket._Address, bytes]) -> int: ... def recv(self, buflen: int = ..., flags: int = ...) -> bytes: ... diff --git a/tests/stubtest_whitelists/py36.txt b/tests/stubtest_whitelists/py36.txt index 179789535749..bf7a9589e046 100644 --- a/tests/stubtest_whitelists/py36.txt +++ b/tests/stubtest_whitelists/py36.txt @@ -43,7 +43,6 @@ random.randrange # missing undocumented arg _int secrets.SystemRandom.getstate smtplib.SMTP.sendmail sre_compile.dis -#ssl.SSLSocket.__init__ typing.AsyncGenerator.ag_await typing.AsyncGenerator.ag_code typing.AsyncGenerator.ag_frame From 195e2439a43e0e403ad0cbdc47c3b365c6bfe373 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 15:33:47 +0200 Subject: [PATCH 08/12] Missing None return type in __init__ --- stdlib/ssl.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index ee9ceb37559a..b84e4e479b96 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -266,7 +266,7 @@ class SSLSocket(socket.socket): server_hostname: Optional[str] = ..., _context: Optional[SSLContext] = ..., _session: Optional[Any] = ..., - ): ... + ) -> None: ... def connect(self, addr: Union[socket._Address, bytes]) -> None: ... def connect_ex(self, addr: Union[socket._Address, bytes]) -> int: ... def recv(self, buflen: int = ..., flags: int = ...) -> bytes: ... From be67a0a7c962f02f7193606381bc70fc627575ee Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 24 Mar 2021 15:42:55 +0200 Subject: [PATCH 09/12] Add remaining ssl explanations --- tests/stubtest_whitelists/linux-py36.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/stubtest_whitelists/linux-py36.txt b/tests/stubtest_whitelists/linux-py36.txt index e7b8e1ede9b4..f93781016caf 100644 --- a/tests/stubtest_whitelists/linux-py36.txt +++ b/tests/stubtest_whitelists/linux-py36.txt @@ -1,5 +1,5 @@ asyncio.unix_events._UnixSelectorEventLoop.create_unix_server ctypes.wintypes pwd.getpwnam -ssl.PROTOCOL_SSLv3 -ssl.RAND_egd +ssl.PROTOCOL_SSLv3 # Depends on openssl compilation +ssl.RAND_egd # Depends on openssl compilation From b850cc25cb94d5c608d9f87a5583e3c2c862fcc5 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Fri, 9 Apr 2021 02:52:25 +0300 Subject: [PATCH 10/12] Change Tuple to tuple Co-authored-by: Sebastian Rittau --- stdlib/ssl.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index b84e4e479b96..ca0537946f5b 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -274,7 +274,7 @@ class SSLSocket(socket.socket): def recvfrom(self, buflen: int = ..., flags: int = ...) -> Tuple[bytes, socket._RetAddress]: ... def recvfrom_into( self, buffer: socket._WriteBuffer, nbytes: Optional[int] = ..., flags: int = ... - ) -> Tuple[int, socket._RetAddress]: ... + ) -> tuple[int, socket._RetAddress]: ... @overload def sendto(self, data: bytes, flags_or_addr: socket._Address) -> int: ... @overload From 6188375afa982f5d624a58669c2eb847e1c0c321 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Fri, 9 Apr 2021 02:52:36 +0300 Subject: [PATCH 11/12] Change Tuple to tuple #2 Co-authored-by: Sebastian Rittau --- stdlib/ssl.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index ca0537946f5b..6d8f06029d47 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -271,7 +271,7 @@ class SSLSocket(socket.socket): def connect_ex(self, addr: Union[socket._Address, bytes]) -> int: ... def recv(self, buflen: int = ..., flags: int = ...) -> bytes: ... def recv_into(self, buffer: socket._WriteBuffer, nbytes: Optional[int] = ..., flags: int = ...) -> int: ... - def recvfrom(self, buflen: int = ..., flags: int = ...) -> Tuple[bytes, socket._RetAddress]: ... + def recvfrom(self, buflen: int = ..., flags: int = ...) -> tuple[bytes, socket._RetAddress]: ... def recvfrom_into( self, buffer: socket._WriteBuffer, nbytes: Optional[int] = ..., flags: int = ... ) -> tuple[int, socket._RetAddress]: ... From cab823f36586cdc4dc5c018bccfe4ef2abd9439b Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sat, 10 Apr 2021 06:26:00 +0300 Subject: [PATCH 12/12] Add SSLSocket __init__ --- stdlib/ssl.pyi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stdlib/ssl.pyi b/stdlib/ssl.pyi index 6d8f06029d47..c59df13e73d5 100644 --- a/stdlib/ssl.pyi +++ b/stdlib/ssl.pyi @@ -267,6 +267,8 @@ class SSLSocket(socket.socket): _context: Optional[SSLContext] = ..., _session: Optional[Any] = ..., ) -> None: ... + else: + def __init__(self, *args: Any, **kwargs: Any) -> None: ... def connect(self, addr: Union[socket._Address, bytes]) -> None: ... def connect_ex(self, addr: Union[socket._Address, bytes]) -> int: ... def recv(self, buflen: int = ..., flags: int = ...) -> bytes: ...