From 8a3ebf8c44802562dbed3c43cce1b2cf95bd2af1 Mon Sep 17 00:00:00 2001 From: A5rocks Date: Tue, 10 Dec 2024 13:22:54 +0900 Subject: [PATCH 1/3] Get rid of using `__` for positional only arguments --- src/trio/_socket.py | 110 ++++++++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 50 deletions(-) diff --git a/src/trio/_socket.py b/src/trio/_socket.py index d92add290..612be7007 100644 --- a/src/trio/_socket.py +++ b/src/trio/_socket.py @@ -1,6 +1,3 @@ -# ruff: noqa: PYI063 # Several cases throughout file where -# argument names with __ used because of typeshed, see comment for recv in _SocketType - from __future__ import annotations import os @@ -677,11 +674,12 @@ async def accept(self) -> tuple[SocketType, AddressFormat]: async def connect(self, address: AddressFormat) -> None: raise NotImplementedError - def recv(__self, __buflen: int, __flags: int = 0) -> Awaitable[bytes]: + def recv(self, buflen: int, flags: int = 0, /) -> Awaitable[bytes]: raise NotImplementedError def recv_into( - __self, + self, + /, buffer: Buffer, nbytes: int = 0, flags: int = 0, @@ -690,15 +688,17 @@ def recv_into( # return type of socket.socket.recvfrom in typeshed is tuple[bytes, Any] def recvfrom( - __self, - __bufsize: int, - __flags: int = 0, + self, + bufsize: int, + flags: int = 0, + /, ) -> Awaitable[tuple[bytes, AddressFormat]]: raise NotImplementedError # return type of socket.socket.recvfrom_into in typeshed is tuple[bytes, Any] def recvfrom_into( - __self, + self, + /, buffer: Buffer, nbytes: int = 0, flags: int = 0, @@ -710,10 +710,11 @@ def recvfrom_into( ): def recvmsg( - __self, - __bufsize: int, - __ancbufsize: int = 0, - __flags: int = 0, + self, + bufsize: int, + ancbufsize: int = 0, + flags: int = 0, + /, ) -> Awaitable[tuple[bytes, list[tuple[int, int, bytes]], int, object]]: raise NotImplementedError @@ -722,29 +723,32 @@ def recvmsg( ): def recvmsg_into( - __self, - __buffers: Iterable[Buffer], - __ancbufsize: int = 0, - __flags: int = 0, + self, + buffers: Iterable[Buffer], + ancbufsize: int = 0, + flags: int = 0, + /, ) -> Awaitable[tuple[int, list[tuple[int, int, bytes]], int, object]]: raise NotImplementedError - def send(__self, __bytes: Buffer, __flags: int = 0) -> Awaitable[int]: + def send(self, bytes: Buffer, flags: int = 0, /) -> Awaitable[int]: raise NotImplementedError @overload async def sendto( self, - __data: Buffer, - __address: tuple[object, ...] | str | Buffer, + data: Buffer, + address: tuple[object, ...] | str | Buffer, + /, ) -> int: ... @overload async def sendto( self, - __data: Buffer, - __flags: int, - __address: tuple[object, ...] | str | Buffer, + data: Buffer, + flags: int, + address: tuple[object, ...] | str | Buffer, + /, ) -> int: ... async def sendto(self, *args: object) -> int: @@ -757,10 +761,11 @@ async def sendto(self, *args: object) -> int: @_wraps(_stdlib_socket.socket.sendmsg, assigned=(), updated=()) async def sendmsg( self, - __buffers: Iterable[Buffer], - __ancdata: Iterable[tuple[int, int, Buffer]] = (), - __flags: int = 0, - __address: AddressFormat | None = None, + buffers: Iterable[Buffer], + ancdata: Iterable[tuple[int, int, Buffer]] = (), + flags: int = 0, + address: AddressFormat | None = None, + /, ) -> int: raise NotImplementedError @@ -1118,11 +1123,8 @@ async def connect(self, address: AddressFormat) -> None: # complain about AmbiguousType if TYPE_CHECKING: - def recv(__self, __buflen: int, __flags: int = 0) -> Awaitable[bytes]: ... + def recv(self, buflen: int, flags: int = 0, /) -> Awaitable[bytes]: ... - # _make_simple_sock_method_wrapper is typed, so this checks that the above is correct - # this requires that we refrain from using `/` to specify pos-only - # args, or mypy thinks the signature differs from typeshed. recv = _make_simple_sock_method_wrapper( _stdlib_socket.socket.recv, _core.wait_readable, @@ -1135,7 +1137,8 @@ def recv(__self, __buflen: int, __flags: int = 0) -> Awaitable[bytes]: ... if TYPE_CHECKING: def recv_into( - __self, + self, + /, buffer: Buffer, nbytes: int = 0, flags: int = 0, @@ -1153,9 +1156,10 @@ def recv_into( if TYPE_CHECKING: # return type of socket.socket.recvfrom in typeshed is tuple[bytes, Any] def recvfrom( - __self, - __bufsize: int, - __flags: int = 0, + self, + bufsize: int, + flags: int = 0, + /, ) -> Awaitable[tuple[bytes, AddressFormat]]: ... recvfrom = _make_simple_sock_method_wrapper( @@ -1170,7 +1174,8 @@ def recvfrom( if TYPE_CHECKING: # return type of socket.socket.recvfrom_into in typeshed is tuple[bytes, Any] def recvfrom_into( - __self, + self, + /, buffer: Buffer, nbytes: int = 0, flags: int = 0, @@ -1191,10 +1196,11 @@ def recvfrom_into( if TYPE_CHECKING: def recvmsg( - __self, - __bufsize: int, - __ancbufsize: int = 0, - __flags: int = 0, + self, + bufsize: int, + ancbufsize: int = 0, + flags: int = 0, + /, ) -> Awaitable[tuple[bytes, list[tuple[int, int, bytes]], int, object]]: ... recvmsg = _make_simple_sock_method_wrapper( @@ -1213,10 +1219,11 @@ def recvmsg( if TYPE_CHECKING: def recvmsg_into( - __self, - __buffers: Iterable[Buffer], - __ancbufsize: int = 0, - __flags: int = 0, + self, + buffers: Iterable[Buffer], + ancbufsize: int = 0, + flags: int = 0, + /, ) -> Awaitable[tuple[int, list[tuple[int, int, bytes]], int, object]]: ... recvmsg_into = _make_simple_sock_method_wrapper( @@ -1231,7 +1238,7 @@ def recvmsg_into( if TYPE_CHECKING: - def send(__self, __bytes: Buffer, __flags: int = 0) -> Awaitable[int]: ... + def send(self, bytes: Buffer, flags: int = 0, /) -> Awaitable[int]: ... send = _make_simple_sock_method_wrapper( _stdlib_socket.socket.send, @@ -1245,16 +1252,18 @@ def send(__self, __bytes: Buffer, __flags: int = 0) -> Awaitable[int]: ... @overload async def sendto( self, - __data: Buffer, - __address: tuple[object, ...] | str | Buffer, + data: Buffer, + address: tuple[object, ...] | str | Buffer, + /, ) -> int: ... @overload async def sendto( self, - __data: Buffer, - __flags: int, - __address: tuple[object, ...] | str | Buffer, + data: Buffer, + flags: int, + address: tuple[object, ...] | str | Buffer, + /, ) -> int: ... @_wraps(_stdlib_socket.socket.sendto, assigned=(), updated=()) @@ -1287,6 +1296,7 @@ async def sendmsg( ancdata: Iterable[tuple[int, int, Buffer]] = (), flags: int = 0, address: AddressFormat | None = None, + /, ) -> int: """Similar to :meth:`socket.socket.sendmsg`, but async. From 3637b3d1fc30c31427259be25da21fe45dc58313 Mon Sep 17 00:00:00 2001 From: A5rocks Date: Tue, 10 Dec 2024 13:29:46 +0900 Subject: [PATCH 2/3] Add a changelog in case someone depends on the old argument names --- newsfragments/3094.misc.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 newsfragments/3094.misc.rst diff --git a/newsfragments/3094.misc.rst b/newsfragments/3094.misc.rst new file mode 100644 index 000000000..c35b7802e --- /dev/null +++ b/newsfragments/3094.misc.rst @@ -0,0 +1 @@ +Switch to using PEP570 for positional-only arguments for `~trio.socket.SocketType`'s methods. From 1fa8e53a05464896dbe69c82d190eac885d91e1a Mon Sep 17 00:00:00 2001 From: A5rocks Date: Tue, 10 Dec 2024 15:50:48 +0900 Subject: [PATCH 3/3] Remove unnecessary positional-only on `self` --- src/trio/_socket.py | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/trio/_socket.py b/src/trio/_socket.py index 612be7007..4dde51298 100644 --- a/src/trio/_socket.py +++ b/src/trio/_socket.py @@ -564,14 +564,13 @@ def getsockname(self) -> AddressFormat: raise NotImplementedError @overload - def getsockopt(self, /, level: int, optname: int) -> int: ... + def getsockopt(self, level: int, optname: int) -> int: ... @overload - def getsockopt(self, /, level: int, optname: int, buflen: int) -> bytes: ... + def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... def getsockopt( self, - /, level: int, optname: int, buflen: int | None = None, @@ -579,12 +578,11 @@ def getsockopt( raise NotImplementedError @overload - def setsockopt(self, /, level: int, optname: int, value: int | Buffer) -> None: ... + def setsockopt(self, level: int, optname: int, value: int | Buffer) -> None: ... @overload def setsockopt( self, - /, level: int, optname: int, value: None, @@ -593,7 +591,6 @@ def setsockopt( def setsockopt( self, - /, level: int, optname: int, value: int | Buffer | None, @@ -601,7 +598,7 @@ def setsockopt( ) -> None: raise NotImplementedError - def listen(self, /, backlog: int = min(_stdlib_socket.SOMAXCONN, 128)) -> None: + def listen(self, backlog: int = min(_stdlib_socket.SOMAXCONN, 128)) -> None: raise NotImplementedError def get_inheritable(self) -> bool: @@ -614,7 +611,7 @@ def set_inheritable(self, inheritable: bool) -> None: not TYPE_CHECKING and hasattr(_stdlib_socket.socket, "share") ): - def share(self, /, process_id: int) -> bytes: + def share(self, process_id: int) -> bytes: raise NotImplementedError def __enter__(self) -> Self: @@ -679,7 +676,6 @@ def recv(self, buflen: int, flags: int = 0, /) -> Awaitable[bytes]: def recv_into( self, - /, buffer: Buffer, nbytes: int = 0, flags: int = 0, @@ -698,7 +694,6 @@ def recvfrom( # return type of socket.socket.recvfrom_into in typeshed is tuple[bytes, Any] def recvfrom_into( self, - /, buffer: Buffer, nbytes: int = 0, flags: int = 0, @@ -815,14 +810,13 @@ def getsockname(self) -> AddressFormat: return self._sock.getsockname() @overload - def getsockopt(self, /, level: int, optname: int) -> int: ... + def getsockopt(self, level: int, optname: int) -> int: ... @overload - def getsockopt(self, /, level: int, optname: int, buflen: int) -> bytes: ... + def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... def getsockopt( self, - /, level: int, optname: int, buflen: int | None = None, @@ -832,12 +826,11 @@ def getsockopt( return self._sock.getsockopt(level, optname, buflen) @overload - def setsockopt(self, /, level: int, optname: int, value: int | Buffer) -> None: ... + def setsockopt(self, level: int, optname: int, value: int | Buffer) -> None: ... @overload def setsockopt( self, - /, level: int, optname: int, value: None, @@ -846,7 +839,6 @@ def setsockopt( def setsockopt( self, - /, level: int, optname: int, value: int | Buffer | None, @@ -867,7 +859,7 @@ def setsockopt( # four parameters. return self._sock.setsockopt(level, optname, value, optlen) - def listen(self, /, backlog: int = min(_stdlib_socket.SOMAXCONN, 128)) -> None: + def listen(self, backlog: int = min(_stdlib_socket.SOMAXCONN, 128)) -> None: return self._sock.listen(backlog) def get_inheritable(self) -> bool: @@ -880,7 +872,7 @@ def set_inheritable(self, inheritable: bool) -> None: not TYPE_CHECKING and hasattr(_stdlib_socket.socket, "share") ): - def share(self, /, process_id: int) -> bytes: + def share(self, process_id: int) -> bytes: return self._sock.share(process_id) def __enter__(self) -> Self: