bump werkzeug 2.3.7

use importlib.metadata.version
This commit is contained in:
David Lord 2023-08-21 09:39:10 -07:00
parent 0273664009
commit 5bb30270d2
No known key found for this signature in database
GPG key ID: 7A1C87E3F5BC42A8
8 changed files with 50 additions and 36 deletions

View file

@ -4,7 +4,7 @@ Version 2.3.3
Unreleased Unreleased
- Python 3.12 compatibility. - Python 3.12 compatibility.
- Require Werkzeug >= 2.3.6. - Require Werkzeug >= 2.3.7.
- Use ``flit_core`` instead of ``setuptools`` as build backend. - Use ``flit_core`` instead of ``setuptools`` as build backend.
- Refactor how an app's root and instance paths are determined. :issue:`5160` - Refactor how an app's root and instance paths are determined. :issue:`5160`

View file

@ -19,7 +19,7 @@ classifiers = [
] ]
requires-python = ">=3.8" requires-python = ">=3.8"
dependencies = [ dependencies = [
"Werkzeug>=2.3.6", "Werkzeug>=2.3.7",
"Jinja2>=3.1.2", "Jinja2>=3.1.2",
"itsdangerous>=2.1.2", "itsdangerous>=2.1.2",
"click>=8.1.3", "click>=8.1.3",

View file

@ -1,4 +1,4 @@
Werkzeug==2.3.6 Werkzeug==2.3.7
Jinja2==3.1.2 Jinja2==3.1.2
MarkupSafe==2.1.1 MarkupSafe==2.1.1
itsdangerous==2.1.2 itsdangerous==2.1.2

View file

@ -1,4 +1,4 @@
# SHA1:5bd33f1c06b3fb16f7ab50e80ed309655d110713 # SHA1:fe057f95a98251b053eec8fa27df0feb722c70e8
# #
# This file is autogenerated by pip-compile-multi # This file is autogenerated by pip-compile-multi
# To update, run: # To update, run:
@ -18,5 +18,5 @@ markupsafe==2.1.1
# -r requirements/tests-pallets-min.in # -r requirements/tests-pallets-min.in
# jinja2 # jinja2
# werkzeug # werkzeug
werkzeug==2.3.6 werkzeug==2.3.7
# via -r requirements/tests-pallets-min.in # via -r requirements/tests-pallets-min.in

View file

@ -1,6 +1,7 @@
from __future__ import annotations from __future__ import annotations
import ast import ast
import importlib.metadata
import inspect import inspect
import os import os
import platform import platform
@ -241,13 +242,13 @@ def get_version(ctx, param, value):
if not value or ctx.resilient_parsing: if not value or ctx.resilient_parsing:
return return
import werkzeug flask_version = importlib.metadata.version("flask")
from . import __version__ werkzeug_version = importlib.metadata.version("werkzeug")
click.echo( click.echo(
f"Python {platform.python_version()}\n" f"Python {platform.python_version()}\n"
f"Flask {__version__}\n" f"Flask {flask_version}\n"
f"Werkzeug {werkzeug.__version__}", f"Werkzeug {werkzeug_version}",
color=ctx.color, color=ctx.color,
) )
ctx.exit() ctx.exit()

View file

@ -1,5 +1,6 @@
from __future__ import annotations from __future__ import annotations
import importlib.metadata
import typing as t import typing as t
from contextlib import contextmanager from contextlib import contextmanager
from contextlib import ExitStack from contextlib import ExitStack
@ -92,6 +93,18 @@ class EnvironBuilder(werkzeug.test.EnvironBuilder):
return self.app.json.dumps(obj, **kwargs) return self.app.json.dumps(obj, **kwargs)
_werkzeug_version = ""
def _get_werkzeug_version() -> str:
global _werkzeug_version
if not _werkzeug_version:
_werkzeug_version = importlib.metadata.version("werkzeug")
return _werkzeug_version
class FlaskClient(Client): class FlaskClient(Client):
"""Works like a regular Werkzeug test client but has knowledge about """Works like a regular Werkzeug test client but has knowledge about
Flask's contexts to defer the cleanup of the request context until Flask's contexts to defer the cleanup of the request context until
@ -115,7 +128,7 @@ class FlaskClient(Client):
self._context_stack = ExitStack() self._context_stack = ExitStack()
self.environ_base = { self.environ_base = {
"REMOTE_ADDR": "127.0.0.1", "REMOTE_ADDR": "127.0.0.1",
"HTTP_USER_AGENT": f"werkzeug/{werkzeug.__version__}", "HTTP_USER_AGENT": f"Werkzeug/{_get_werkzeug_version()}",
} }
@contextmanager @contextmanager

View file

@ -1,6 +1,8 @@
# This file was part of Flask-CLI and was modified under the terms of # This file was part of Flask-CLI and was modified under the terms of
# its Revised BSD License. Copyright © 2015 CERN. # its Revised BSD License. Copyright © 2015 CERN.
import importlib.metadata
import os import os
import platform
import ssl import ssl
import sys import sys
import types import types
@ -227,10 +229,6 @@ def test_locate_app_suppress_raise(test_apps):
def test_get_version(test_apps, capsys): def test_get_version(test_apps, capsys):
from flask import __version__ as flask_version
from werkzeug import __version__ as werkzeug_version
from platform import python_version
class MockCtx: class MockCtx:
resilient_parsing = False resilient_parsing = False
color = None color = None
@ -241,9 +239,9 @@ def test_get_version(test_apps, capsys):
ctx = MockCtx() ctx = MockCtx()
get_version(ctx, None, "test") get_version(ctx, None, "test")
out, err = capsys.readouterr() out, err = capsys.readouterr()
assert f"Python {python_version()}" in out assert f"Python {platform.python_version()}" in out
assert f"Flask {flask_version}" in out assert f"Flask {importlib.metadata.version('flask')}" in out
assert f"Werkzeug {werkzeug_version}" in out assert f"Werkzeug {importlib.metadata.version('werkzeug')}" in out
def test_scriptinfo(test_apps, monkeypatch): def test_scriptinfo(test_apps, monkeypatch):

View file

@ -1,6 +1,7 @@
import importlib.metadata
import click import click
import pytest import pytest
import werkzeug
import flask import flask
from flask import appcontext_popped from flask import appcontext_popped
@ -38,34 +39,35 @@ def test_environ_defaults(app, client, app_ctx, req_ctx):
assert rv.data == b"http://localhost/" assert rv.data == b"http://localhost/"
def test_environ_base_default(app, client, app_ctx): def test_environ_base_default(app, client):
@app.route("/") @app.route("/")
def index(): def index():
flask.g.user_agent = flask.request.headers["User-Agent"] flask.g.remote_addr = flask.request.remote_addr
return flask.request.remote_addr flask.g.user_agent = flask.request.user_agent.string
return ""
rv = client.get("/") with client:
assert rv.data == b"127.0.0.1" client.get("/")
assert flask.g.user_agent == f"werkzeug/{werkzeug.__version__}" assert flask.g.remote_addr == "127.0.0.1"
assert flask.g.user_agent == (
f"Werkzeug/{importlib.metadata.version('werkzeug')}"
)
def test_environ_base_modified(app, client, app_ctx): def test_environ_base_modified(app, client):
@app.route("/") @app.route("/")
def index(): def index():
flask.g.user_agent = flask.request.headers["User-Agent"] flask.g.remote_addr = flask.request.remote_addr
return flask.request.remote_addr flask.g.user_agent = flask.request.user_agent.string
return ""
client.environ_base["REMOTE_ADDR"] = "0.0.0.0" client.environ_base["REMOTE_ADDR"] = "192.168.0.22"
client.environ_base["HTTP_USER_AGENT"] = "Foo" client.environ_base["HTTP_USER_AGENT"] = "Foo"
rv = client.get("/")
assert rv.data == b"0.0.0.0"
assert flask.g.user_agent == "Foo"
client.environ_base["REMOTE_ADDR"] = "0.0.0.1" with client:
client.environ_base["HTTP_USER_AGENT"] = "Bar" client.get("/")
rv = client.get("/") assert flask.g.remote_addr == "192.168.0.22"
assert rv.data == b"0.0.0.1" assert flask.g.user_agent == "Foo"
assert flask.g.user_agent == "Bar"
def test_client_open_environ(app, client, request): def test_client_open_environ(app, client, request):