From 8a2f84271d6d9a7124a0efdb3b8f8eb9dee52f0a Mon Sep 17 00:00:00 2001 From: jb2170 Date: Sat, 22 Apr 2023 02:42:17 +0100 Subject: [PATCH 1/9] socketserver: Add missing ForkingUnixStreamServer and ForkingUnixDatagramServer servers --- Doc/library/socketserver.rst | 4 ++++ Lib/socketserver.py | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst index ceb962e860042d..0e7b23edfd1123 100644 --- a/Doc/library/socketserver.rst +++ b/Doc/library/socketserver.rst @@ -140,6 +140,10 @@ server is the address family. ForkingUDPServer ThreadingTCPServer ThreadingUDPServer + ForkingUnixStreamServer + ForkingUnixDatagramServer + ThreadingUnixStreamServer + ThreadingUnixDatagramServer These classes are pre-defined using the mix-in classes. diff --git a/Lib/socketserver.py b/Lib/socketserver.py index 842d526b011911..5634755eff6719 100644 --- a/Lib/socketserver.py +++ b/Lib/socketserver.py @@ -141,6 +141,8 @@ class will essentially render the service "deaf" while one request is __all__.extend(["UnixStreamServer","UnixDatagramServer", "ThreadingUnixStreamServer", "ThreadingUnixDatagramServer"]) + if hasattr(os, "fork"): + __all__.extend(["ForkingUnixStreamServer","ForkingUnixDatagramServer"]) # poll/select have the advantage of not requiring any extra file descriptor, # contrarily to epoll/kqueue (also, they require a single syscall). @@ -727,6 +729,11 @@ class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass + if hasattr(os, "fork"): + class ForkingUnixStreamServer(ForkingMixIn, UnixStreamServer): pass + + class ForkingUnixDatagramServer(ForkingMixIn, UnixDatagramServer): pass + class BaseRequestHandler: """Base class for request handler classes. From 364eb77e1ca762f2e95073574751414c6413c165 Mon Sep 17 00:00:00 2001 From: jb2170 Date: Sat, 22 Apr 2023 02:43:40 +0100 Subject: [PATCH 2/9] Add self to Misc/ACKS --- Misc/ACKS | 1 + 1 file changed, 1 insertion(+) diff --git a/Misc/ACKS b/Misc/ACKS index d0ff4e8aeb5c90..633e9d90a36f16 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -160,6 +160,7 @@ Brice Berna Olivier Bernard Vivien Bernet-Rollande Maxwell Bernstein +Jay Berry Eric Beser Steven Bethard Stephen Bevan From 849feb24f1f77eb870130f8d273c0b910a56a507 Mon Sep 17 00:00:00 2001 From: jb2170 Date: Sat, 22 Apr 2023 02:43:56 +0100 Subject: [PATCH 3/9] Add NEWS entry with blurb --- .../next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst diff --git a/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst new file mode 100644 index 00000000000000..30bc2a72871553 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst @@ -0,0 +1,2 @@ +socketserver: Add missing ForkingUnixStreamServer and +ForkingUnixDatagramServer servers From d634059f14ce9eab6cf4a125333f7e6382337f24 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sun, 23 Apr 2023 12:44:29 -0700 Subject: [PATCH 4/9] style nit: add a missing space. admittedly other existing lines don't always do this. this module is very old code. Co-authored-by: Nikita Sobolev --- Lib/socketserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/socketserver.py b/Lib/socketserver.py index 5634755eff6719..cd028ef1c63b85 100644 --- a/Lib/socketserver.py +++ b/Lib/socketserver.py @@ -142,7 +142,7 @@ class will essentially render the service "deaf" while one request is "ThreadingUnixStreamServer", "ThreadingUnixDatagramServer"]) if hasattr(os, "fork"): - __all__.extend(["ForkingUnixStreamServer","ForkingUnixDatagramServer"]) + __all__.extend(["ForkingUnixStreamServer", "ForkingUnixDatagramServer"]) # poll/select have the advantage of not requiring any extra file descriptor, # contrarily to epoll/kqueue (also, they require a single syscall). From a9a91ed28e3185bcd75ccb12cf285bda1b2d1953 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sun, 23 Apr 2023 12:46:20 -0700 Subject: [PATCH 5/9] ReSTify the NEWS entry. --- .../Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst index 30bc2a72871553..678481fe1a5550 100644 --- a/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst +++ b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst @@ -1,2 +1,2 @@ -socketserver: Add missing ForkingUnixStreamServer and -ForkingUnixDatagramServer servers +:mod:`socketserver` Gains missing ``ForkingUnixStreamServer`` and +``ForkingUnixDatagramServer`` classes. From e32b5675bb284103fc80563f9c053fd9c5829386 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Sun, 23 Apr 2023 12:48:17 -0700 Subject: [PATCH 6/9] remove an unnecessary word in NEWS --- .../next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst index 678481fe1a5550..004dd6543e950b 100644 --- a/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst +++ b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst @@ -1,2 +1,2 @@ -:mod:`socketserver` Gains missing ``ForkingUnixStreamServer`` and +:mod:`socketserver` Gains ``ForkingUnixStreamServer`` and ``ForkingUnixDatagramServer`` classes. From 58073d48b2add2c1bd973764271524b10255b442 Mon Sep 17 00:00:00 2001 From: Oleg Iarygin Date: Mon, 24 Apr 2023 07:44:26 +0400 Subject: [PATCH 7/9] Add authorship --- .../Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst index 004dd6543e950b..bd5317744ff140 100644 --- a/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst +++ b/Misc/NEWS.d/next/Library/2023-04-22-02-41-06.gh-issue-103673.oE7S_k.rst @@ -1,2 +1,2 @@ -:mod:`socketserver` Gains ``ForkingUnixStreamServer`` and -``ForkingUnixDatagramServer`` classes. +:mod:`socketserver` gains ``ForkingUnixStreamServer`` and +``ForkingUnixDatagramServer`` classes. Patch by Jay Berry. From 5f61e059f7e6d0c6e748c060dedad7eeb0bb04b8 Mon Sep 17 00:00:00 2001 From: jb2170 Date: Mon, 24 Apr 2023 20:32:47 +0100 Subject: [PATCH 8/9] Update Lib/test/test_socketserver.py to use ForkingUnix{Stream,Datagram}Server from socketserver --- Lib/test/test_socketserver.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py index 2fa5069423327a..eb4cfb43d3688f 100644 --- a/Lib/test/test_socketserver.py +++ b/Lib/test/test_socketserver.py @@ -47,15 +47,6 @@ def receive(sock, n, timeout=test.support.SHORT_TIMEOUT): else: raise RuntimeError("timed out on %r" % (sock,)) -if HAVE_UNIX_SOCKETS and HAVE_FORKING: - class ForkingUnixStreamServer(socketserver.ForkingMixIn, - socketserver.UnixStreamServer): - pass - - class ForkingUnixDatagramServer(socketserver.ForkingMixIn, - socketserver.UnixDatagramServer): - pass - @contextlib.contextmanager def simple_subprocess(testcase): @@ -211,7 +202,7 @@ def test_ThreadingUnixStreamServer(self): @requires_forking def test_ForkingUnixStreamServer(self): with simple_subprocess(self): - self.run_server(ForkingUnixStreamServer, + self.run_server(socketserver.ForkingUnixStreamServer, socketserver.StreamRequestHandler, self.stream_examine) @@ -247,7 +238,7 @@ def test_ThreadingUnixDatagramServer(self): @requires_unix_sockets @requires_forking def test_ForkingUnixDatagramServer(self): - self.run_server(ForkingUnixDatagramServer, + self.run_server(socketserver.ForkingUnixDatagramServer, socketserver.DatagramRequestHandler, self.dgram_examine) From ee13a90590ecd276311217f2ce87c654a3666024 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Mon, 24 Apr 2023 14:59:15 -0700 Subject: [PATCH 9/9] Add a versionadded 3.12 tag. --- Doc/library/socketserver.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst index 0e7b23edfd1123..d65e9fe81acf8b 100644 --- a/Doc/library/socketserver.rst +++ b/Doc/library/socketserver.rst @@ -147,6 +147,9 @@ server is the address family. These classes are pre-defined using the mix-in classes. +.. versionadded:: 3.12 + The ``ForkingUnixStreamServer`` and ``ForkingUnixDatagramServer`` classes + were added. To implement a service, you must derive a class from :class:`BaseRequestHandler` and redefine its :meth:`~BaseRequestHandler.handle` method.