gh-76007: Deprecate __version__ attribute in wsgiref.simple_server (#142675)

This commit is contained in:
Hugo van Kemenade 2025-12-16 14:08:51 +02:00 committed by GitHub
parent e27f76b6fe
commit c10ec48bb9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 29 additions and 5 deletions

View file

@ -23,6 +23,7 @@ Pending removal in Python 3.20
- :mod:`tabnanny`
- :mod:`tkinter.font`
- :mod:`tkinter.ttk`
- :mod:`wsgiref.simple_server`
- :mod:`zlib`
(Contributed by Hugo van Kemenade and Stan Ulbrych in :gh:`76007`.)

View file

@ -1040,6 +1040,7 @@ New deprecations
- :mod:`tabnanny`
- :mod:`tkinter.font`
- :mod:`tkinter.ttk`
- :mod:`wsgiref.simple_server`
- :mod:`zlib`
(Contributed by Hugo van Kemenade and Stan Ulbrych in :gh:`76007`.)

View file

@ -109,7 +109,7 @@ def check_hello(self, out, has_length=True):
sys.version.split()[0])
self.assertEqual(out,
("HTTP/1.0 200 OK\r\n"
"Server: WSGIServer/0.2 " + pyver +"\r\n"
"Server: WSGIServer " + pyver + "\r\n"
"Content-Type: text/plain\r\n"
"Date: Mon, 05 Jun 2006 18:49:54 GMT\r\n" +
(has_length and "Content-Length: 13\r\n" or "") +
@ -206,7 +206,7 @@ def app(e, s):
pyver = py + b"/" + ver
self.assertEqual(
b"HTTP/1.0 200 OK\r\n"
b"Server: WSGIServer/0.2 "+ pyver + b"\r\n"
b"Server: WSGIServer " + pyver + b"\r\n"
b"Content-Type: text/plain; charset=utf-8\r\n"
b"Date: Wed, 24 Dec 2008 13:29:32 GMT\r\n"
b"\r\n"
@ -840,5 +840,17 @@ def write(self, b):
self.assertIsNotNone(h.environ)
class TestModule(unittest.TestCase):
def test_deprecated__version__(self):
from wsgiref import simple_server
with self.assertWarnsRegex(
DeprecationWarning,
"'__version__' is deprecated and slated for removal in Python 3.20",
) as cm:
getattr(simple_server, "__version__")
self.assertEqual(cm.filename, __file__)
if __name__ == "__main__":
unittest.main()

View file

@ -16,11 +16,10 @@
from wsgiref.handlers import SimpleHandler
from platform import python_implementation
__version__ = "0.2"
__all__ = ['WSGIServer', 'WSGIRequestHandler', 'demo_app', 'make_server']
server_version = "WSGIServer/" + __version__
server_version = "WSGIServer"
sys_version = python_implementation() + "/" + sys.version.split()[0]
software_version = server_version + ' ' + sys_version
@ -70,7 +69,7 @@ def set_app(self,application):
class WSGIRequestHandler(BaseHTTPRequestHandler):
server_version = "WSGIServer/" + __version__
server_version = "WSGIServer"
def get_environ(self):
env = self.server.base_environ.copy()
@ -152,6 +151,15 @@ def make_server(
return server
def __getattr__(name):
if name == "__version__":
from warnings import _deprecated
_deprecated("__version__", remove=(3, 20))
return "0.2" # Do not change
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
if __name__ == '__main__':
with make_server('', 8000, demo_app) as httpd:
sa = httpd.socket.getsockname()

View file

@ -0,0 +1,2 @@
Deprecate ``__version__`` from :mod:`wsgiref.simple_server`. Patch by Hugo
van Kemenade.