Skip to content

Commit 9f95502

Browse files
committed
bump werkzeug 2.3.7
use importlib.metadata.version
1 parent 0273664 commit 9f95502

File tree

8 files changed

+50
-36
lines changed

8 files changed

+50
-36
lines changed

CHANGES.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Version 2.3.3
44
Unreleased
55

66
- Python 3.12 compatibility.
7-
- Require Werkzeug >= 2.3.6.
7+
- Require Werkzeug >= 2.3.7.
88
- Use ``flit_core`` instead of ``setuptools`` as build backend.
99
- Refactor how an app's root and instance paths are determined. :issue:`5160`
1010

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ classifiers = [
1919
]
2020
requires-python = ">=3.8"
2121
dependencies = [
22-
"Werkzeug>=2.3.6",
22+
"Werkzeug>=2.3.7",
2323
"Jinja2>=3.1.2",
2424
"itsdangerous>=2.1.2",
2525
"click>=8.1.3",

requirements/tests-pallets-min.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Werkzeug==2.3.6
1+
Werkzeug==2.3.7
22
Jinja2==3.1.2
33
MarkupSafe==2.1.1
44
itsdangerous==2.1.2

requirements/tests-pallets-min.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SHA1:5bd33f1c06b3fb16f7ab50e80ed309655d110713
1+
# SHA1:fe057f95a98251b053eec8fa27df0feb722c70e8
22
#
33
# This file is autogenerated by pip-compile-multi
44
# To update, run:
@@ -18,5 +18,5 @@ markupsafe==2.1.1
1818
# -r requirements/tests-pallets-min.in
1919
# jinja2
2020
# werkzeug
21-
werkzeug==2.3.6
21+
werkzeug==2.3.7
2222
# via -r requirements/tests-pallets-min.in

src/flask/cli.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import ast
4+
import importlib.metadata
45
import inspect
56
import os
67
import platform
@@ -241,13 +242,13 @@ def get_version(ctx, param, value):
241242
if not value or ctx.resilient_parsing:
242243
return
243244

244-
import werkzeug
245-
from . import __version__
245+
flask_version = importlib.metadata.version("flask")
246+
werkzeug_version = importlib.metadata.version("werkzeug")
246247

247248
click.echo(
248249
f"Python {platform.python_version()}\n"
249-
f"Flask {__version__}\n"
250-
f"Werkzeug {werkzeug.__version__}",
250+
f"Flask {flask_version}\n"
251+
f"Werkzeug {werkzeug_version}",
251252
color=ctx.color,
252253
)
253254
ctx.exit()

src/flask/testing.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import importlib.metadata
34
import typing as t
45
from contextlib import contextmanager
56
from contextlib import ExitStack
@@ -92,6 +93,18 @@ def json_dumps(self, obj: t.Any, **kwargs: t.Any) -> str: # type: ignore
9293
return self.app.json.dumps(obj, **kwargs)
9394

9495

96+
_werkzeug_version = ""
97+
98+
99+
def _get_werkzeug_version() -> str:
100+
global _werkzeug_version
101+
102+
if not _werkzeug_version:
103+
_werkzeug_version = importlib.metadata.version("werkzeug")
104+
105+
return _werkzeug_version
106+
107+
95108
class FlaskClient(Client):
96109
"""Works like a regular Werkzeug test client but has knowledge about
97110
Flask's contexts to defer the cleanup of the request context until
@@ -115,7 +128,7 @@ def __init__(self, *args: t.Any, **kwargs: t.Any) -> None:
115128
self._context_stack = ExitStack()
116129
self.environ_base = {
117130
"REMOTE_ADDR": "127.0.0.1",
118-
"HTTP_USER_AGENT": f"werkzeug/{werkzeug.__version__}",
131+
"HTTP_USER_AGENT": f"Werkzeug/{_get_werkzeug_version()}",
119132
}
120133

121134
@contextmanager

tests/test_cli.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# This file was part of Flask-CLI and was modified under the terms of
22
# its Revised BSD License. Copyright © 2015 CERN.
3+
import importlib.metadata
34
import os
5+
import platform
46
import ssl
57
import sys
68
import types
@@ -227,10 +229,6 @@ def test_locate_app_suppress_raise(test_apps):
227229

228230

229231
def test_get_version(test_apps, capsys):
230-
from flask import __version__ as flask_version
231-
from werkzeug import __version__ as werkzeug_version
232-
from platform import python_version
233-
234232
class MockCtx:
235233
resilient_parsing = False
236234
color = None
@@ -241,9 +239,9 @@ def exit(self):
241239
ctx = MockCtx()
242240
get_version(ctx, None, "test")
243241
out, err = capsys.readouterr()
244-
assert f"Python {python_version()}" in out
245-
assert f"Flask {flask_version}" in out
246-
assert f"Werkzeug {werkzeug_version}" in out
242+
assert f"Python {platform.python_version()}" in out
243+
assert f"Flask {importlib.metadata.version('flask')}" in out
244+
assert f"Werkzeug {importlib.metadata.version('werkzeug')}" in out
247245

248246

249247
def test_scriptinfo(test_apps, monkeypatch):

tests/test_testing.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import importlib.metadata
2+
13
import click
24
import pytest
3-
import werkzeug
45

56
import flask
67
from flask import appcontext_popped
@@ -38,34 +39,35 @@ def index():
3839
assert rv.data == b"http://localhost/"
3940

4041

41-
def test_environ_base_default(app, client, app_ctx):
42+
def test_environ_base_default(app, client):
4243
@app.route("/")
4344
def index():
44-
flask.g.user_agent = flask.request.headers["User-Agent"]
45-
return flask.request.remote_addr
45+
flask.g.remote_addr = flask.request.remote_addr
46+
flask.g.user_agent = flask.request.user_agent.string
47+
return ""
4648

47-
rv = client.get("/")
48-
assert rv.data == b"127.0.0.1"
49-
assert flask.g.user_agent == f"werkzeug/{werkzeug.__version__}"
49+
with client:
50+
client.get("/")
51+
assert flask.g.remote_addr == "127.0.0.1"
52+
assert flask.g.user_agent == (
53+
f"Werkzeug/{importlib.metadata.version('werkzeug')}"
54+
)
5055

5156

52-
def test_environ_base_modified(app, client, app_ctx):
57+
def test_environ_base_modified(app, client):
5358
@app.route("/")
5459
def index():
55-
flask.g.user_agent = flask.request.headers["User-Agent"]
56-
return flask.request.remote_addr
60+
flask.g.remote_addr = flask.request.remote_addr
61+
flask.g.user_agent = flask.request.user_agent.string
62+
return ""
5763

58-
client.environ_base["REMOTE_ADDR"] = "0.0.0.0"
64+
client.environ_base["REMOTE_ADDR"] = "192.168.0.22"
5965
client.environ_base["HTTP_USER_AGENT"] = "Foo"
60-
rv = client.get("/")
61-
assert rv.data == b"0.0.0.0"
62-
assert flask.g.user_agent == "Foo"
6366

64-
client.environ_base["REMOTE_ADDR"] = "0.0.0.1"
65-
client.environ_base["HTTP_USER_AGENT"] = "Bar"
66-
rv = client.get("/")
67-
assert rv.data == b"0.0.0.1"
68-
assert flask.g.user_agent == "Bar"
67+
with client:
68+
client.get("/")
69+
assert flask.g.remote_addr == "192.168.0.22"
70+
assert flask.g.user_agent == "Foo"
6971

7072

7173
def test_client_open_environ(app, client, request):

0 commit comments

Comments
 (0)