Skip to content

Commit 01fa8ee

Browse files
authored
deprecate __version__ (#2772)
2 parents 47c6bd5 + 40ba284 commit 01fa8ee

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Version 3.0.0
66
Unreleased
77

88
- Remove previously deprecated code. :pr:`2768`
9+
- Deprecate the ``__version__`` attribute. Use feature detection, or
10+
``importlib.metadata.version("werkzeug")``, instead. :issue:`2770`
911
- ``generate_password_hash`` uses scrypt by default. :issue:`2769`
1012

1113

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[project]
22
name = "Werkzeug"
3+
version = "3.0.0.dev"
34
description = "The comprehensive WSGI web application library."
45
readme = "README.rst"
56
license = {file = "LICENSE.rst"}
@@ -19,7 +20,6 @@ classifiers = [
1920
]
2021
requires-python = ">=3.8"
2122
dependencies = ["MarkupSafe>=2.1.1"]
22-
dynamic = ["version"]
2323

2424
[project.urls]
2525
Donate = "https://palletsprojects.com/donate"

src/werkzeug/__init__.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,25 @@
1+
from __future__ import annotations
2+
3+
import typing as t
4+
15
from .serving import run_simple as run_simple
26
from .test import Client as Client
37
from .wrappers import Request as Request
48
from .wrappers import Response as Response
59

6-
__version__ = "3.0.0.dev"
10+
11+
def __getattr__(name: str) -> t.Any:
12+
if name == "__version__":
13+
import importlib.metadata
14+
import warnings
15+
16+
warnings.warn(
17+
"The '__version__' attribute is deprecated and will be removed in"
18+
" Werkzeug 3.1. Use feature detection or"
19+
" 'importlib.metadata.version(\"werkzeug\")' instead.",
20+
DeprecationWarning,
21+
stacklevel=2,
22+
)
23+
return importlib.metadata.version("werkzeug")
24+
25+
raise AttributeError(name)

src/werkzeug/serving.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,7 @@ class WSGIRequestHandler(BaseHTTPRequestHandler):
154154

155155
@property
156156
def server_version(self) -> str: # type: ignore
157-
from . import __version__
158-
159-
return f"Werkzeug/{__version__}"
157+
return self.server._server_version
160158

161159
def make_environ(self) -> WSGIEnvironment:
162160
request_url = urlsplit(self.path)
@@ -796,6 +794,10 @@ def __init__(
796794
else:
797795
self.ssl_context = None
798796

797+
import importlib.metadata
798+
799+
self._server_version = f"Werkzeug/{importlib.metadata.version('werkzeug')}"
800+
799801
def log(self, type: str, message: str, *args: t.Any) -> None:
800802
_log(type, message, *args)
801803

0 commit comments

Comments
 (0)