From 40ba284a21598e67eba3faa431dc0e26a5a9c6d5 Mon Sep 17 00:00:00 2001 From: David Lord Date: Mon, 14 Aug 2023 13:12:59 -0700 Subject: [PATCH] deprecate __version__ attribute --- CHANGES.rst | 2 ++ pyproject.toml | 2 +- src/werkzeug/__init__.py | 21 ++++++++++++++++++++- src/werkzeug/serving.py | 8 +++++--- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index b074cdc56..ec2ad5d51 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,8 @@ Version 3.0.0 Unreleased - Remove previously deprecated code. :pr:`2768` +- Deprecate the ``__version__`` attribute. Use feature detection, or + ``importlib.metadata.version("werkzeug")``, instead. :issue:`2770` - ``generate_password_hash`` uses scrypt by default. :issue:`2769` diff --git a/pyproject.toml b/pyproject.toml index 3a1965554..e97c04830 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,6 @@ [project] name = "Werkzeug" +version = "3.0.0.dev" description = "The comprehensive WSGI web application library." readme = "README.rst" license = {file = "LICENSE.rst"} @@ -19,7 +20,6 @@ classifiers = [ ] requires-python = ">=3.8" dependencies = ["MarkupSafe>=2.1.1"] -dynamic = ["version"] [project.urls] Donate = "https://palletsprojects.com/donate" diff --git a/src/werkzeug/__init__.py b/src/werkzeug/__init__.py index 0436769c9..57cb7539a 100644 --- a/src/werkzeug/__init__.py +++ b/src/werkzeug/__init__.py @@ -1,6 +1,25 @@ +from __future__ import annotations + +import typing as t + from .serving import run_simple as run_simple from .test import Client as Client from .wrappers import Request as Request from .wrappers import Response as Response -__version__ = "3.0.0.dev" + +def __getattr__(name: str) -> t.Any: + if name == "__version__": + import importlib.metadata + import warnings + + warnings.warn( + "The '__version__' attribute is deprecated and will be removed in" + " Werkzeug 3.1. Use feature detection or" + " 'importlib.metadata.version(\"werkzeug\")' instead.", + DeprecationWarning, + stacklevel=2, + ) + return importlib.metadata.version("werkzeug") + + raise AttributeError(name) diff --git a/src/werkzeug/serving.py b/src/werkzeug/serving.py index c031dc45e..549a3bd80 100644 --- a/src/werkzeug/serving.py +++ b/src/werkzeug/serving.py @@ -154,9 +154,7 @@ class WSGIRequestHandler(BaseHTTPRequestHandler): @property def server_version(self) -> str: # type: ignore - from . import __version__ - - return f"Werkzeug/{__version__}" + return self.server._server_version def make_environ(self) -> WSGIEnvironment: request_url = urlsplit(self.path) @@ -796,6 +794,10 @@ def __init__( else: self.ssl_context = None + import importlib.metadata + + self._server_version = f"Werkzeug/{importlib.metadata.version('werkzeug')}" + def log(self, type: str, message: str, *args: t.Any) -> None: _log(type, message, *args)