public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/python-flask] rawhide: Backport upstream patch for  pytest >= 9.1 compatibility
@ 2026-08-03 10:52 
  0 siblings, 0 replies; only message in thread
From:  @ 2026-08-03 10:52 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/python-flask
Branch : rawhide
Commit : 755b8cc58a5c739a0bc1dd42a53f313424bcd57f
Author : Tomáš Hrnčiar <thrnciar@redhat.com>
Date   : 2026-07-29T15:56:06+02:00
Stats  : +152/-1 in 2 file(s)
URL    : https://src.fedoraproject.org/rpms/python-flask/c/755b8cc58a5c739a0bc1dd42a53f313424bcd57f?branch=rawhide

Log:
Backport upstream patch for  pytest >= 9.1 compatibility

---
diff --git a/Replace-the-use-of-private-monkeypatch-fixture-API.patch b/Replace-the-use-of-private-monkeypatch-fixture-API.patch
new file mode 100644
index 0000000..111cd41
--- /dev/null
+++ b/Replace-the-use-of-private-monkeypatch-fixture-API.patch
@@ -0,0 +1,147 @@
+From 14298af058884ebdef4bd28f6cf69f0be4401128 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
+Date: Wed, 29 Jul 2026 15:51:04 +0200
+Subject: [PATCH] Replace the use of private monkeypatch fixture API
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Replace the use of private `monkeypatch` API with the standard
+invocations to fix compatibility with pytest 9.1, as well as to make
+the tests more reliable in the future.
+
+The previous code operated on `monkeypatch` fixture internals to trigger
+clearing environment variables expected by tests at the beginning of
+tests, and reverting any changes made by the tests.  However, this does
+not seem strictly valid, and it actually lead to tests making wrong
+assumptions.  For example, `test_disable_dotenv_from_env` relied
+on a previous test unsetting `FOO` in the environment, and failed if
+`FOO` was set while it was run alone.
+
+The new logic uses public API only: it cleans up the standard set of
+environment variables for every test, and additionally cleans up
+variables specifically used by dotenv tests.  With this approach, it is
+entirely possible for a test to leave the environment "dirty"; however,
+that's fine since other tests need to clean up the environment anyway to
+account for user-set environment variables.
+
+Fixes #6071
+
+Signed-off-by: Michał Górny <mgorny@gentoo.org>
+---
+ tests/conftest.py | 43 +++++++++++++------------------------------
+ tests/test_cli.py |  8 ++++----
+ 2 files changed, 17 insertions(+), 34 deletions(-)
+
+diff --git a/tests/conftest.py b/tests/conftest.py
+index 214f520..60bf5f4 100644
+--- a/tests/conftest.py
++++ b/tests/conftest.py
+@@ -2,43 +2,26 @@ import os
+ import sys
+ 
+ import pytest
+-from _pytest import monkeypatch
+ 
+ from flask import Flask
+ from flask.globals import request_ctx
+ 
+ 
+-@pytest.fixture(scope="session", autouse=True)
+-def _standard_os_environ():
+-    """Set up ``os.environ`` at the start of the test session to have
+-    standard values. Returns a list of operations that is used by
+-    :func:`._reset_os_environ` after each test.
+-    """
+-    mp = monkeypatch.MonkeyPatch()
+-    out = (
+-        (os.environ, "FLASK_ENV_FILE", monkeypatch.notset),
+-        (os.environ, "FLASK_APP", monkeypatch.notset),
+-        (os.environ, "FLASK_DEBUG", monkeypatch.notset),
+-        (os.environ, "FLASK_RUN_FROM_CLI", monkeypatch.notset),
+-        (os.environ, "WERKZEUG_RUN_MAIN", monkeypatch.notset),
+-    )
+-
+-    for _, key, value in out:
+-        if value is monkeypatch.notset:
+-            mp.delenv(key, False)
+-        else:
+-            mp.setenv(key, value)
+-
+-    yield out
+-    mp.undo()
+-
+-
+ @pytest.fixture(autouse=True)
+-def _reset_os_environ(monkeypatch, _standard_os_environ):
+-    """Reset ``os.environ`` to the standard environ after each test,
+-    in case a test changed something without cleaning up.
++def _standard_os_environ(monkeypatch):
++    """Set up ``os.environ`` at the start of every test to have
++    standard values.
+     """
+-    monkeypatch._setitem.extend(_standard_os_environ)
++    for key in (
++        "FLASK_ENV_FILE",
++        "FLASK_APP",
++        "FLASK_DEBUG",
++        "FLASK_RUN_FROM_CLI",
++        "WERKZEUG_RUN_MAIN",
++    ):
++        monkeypatch.delenv(key, False)
++
++    yield
+ 
+ 
+ @pytest.fixture
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index e254c1d..79025dd 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -11,7 +11,6 @@ from pathlib import Path
+ 
+ import click
+ import pytest
+-from _pytest.monkeypatch import notset
+ from click.testing import CliRunner
+ 
+ from flask import Blueprint
+@@ -534,9 +533,8 @@ need_dotenv = pytest.mark.skipif(
+ 
+ @need_dotenv
+ def test_load_dotenv(monkeypatch):
+-    # can't use monkeypatch.delitem since the keys don't exist yet
+     for item in ("FOO", "BAR", "SPAM", "HAM"):
+-        monkeypatch._setitem.append((os.environ, item, notset))
++        monkeypatch.delenv(item, False)
+ 
+     monkeypatch.setenv("EGGS", "3")
+     monkeypatch.chdir(test_path)
+@@ -559,7 +557,7 @@ def test_load_dotenv(monkeypatch):
+ @need_dotenv
+ def test_dotenv_path(monkeypatch):
+     for item in ("FOO", "BAR", "EGGS"):
+-        monkeypatch._setitem.append((os.environ, item, notset))
++        monkeypatch.delenv(item, False)
+ 
+     load_dotenv(test_path / ".flaskenv")
+     assert Path.cwd() == cwd
+@@ -567,6 +565,7 @@ def test_dotenv_path(monkeypatch):
+ 
+ 
+ def test_dotenv_optional(monkeypatch):
++    monkeypatch.delenv("FOO", False)
+     monkeypatch.setitem(sys.modules, "dotenv", None)
+     monkeypatch.chdir(test_path)
+     load_dotenv()
+@@ -575,6 +574,7 @@ def test_dotenv_optional(monkeypatch):
+ 
+ @need_dotenv
+ def test_disable_dotenv_from_env(monkeypatch, runner):
++    monkeypatch.delenv("FOO", False)
+     monkeypatch.chdir(test_path)
+     monkeypatch.setitem(os.environ, "FLASK_SKIP_DOTENV", "1")
+     runner.invoke(FlaskGroup())
+-- 
+2.54.0
+

diff --git a/python-flask.spec b/python-flask.spec
index 89dc3d8..922c625 100644
--- a/python-flask.spec
+++ b/python-flask.spec
@@ -13,6 +13,10 @@ License:        BSD-3-Clause
 URL:            http://flask.pocoo.org/
 Source0:        %{pypi_source}
 
+# Compatibility with pytest >= 9.1
+# Upstream PR: https://github.com/pallets/flask/pull/6095
+Patch:          Replace-the-use-of-private-monkeypatch-fixture-API.patch
+
 BuildArch:      noarch
 
 %global _description \
@@ -50,7 +54,7 @@ Documentation and examples for %{name}.
 %pyproject_buildrequires -x async -g tests %{?with_doc:-g docs}
 
 %prep
-%autosetup -n %{srcname}-%{version}
+%autosetup -p1 -n %{srcname}-%{version}
 # Allow to use python-sphinx>=9
 sed -i 's/sphinx<9/sphinx/g' pyproject.toml
 

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-03 10:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-03 10:52 [rpms/python-flask] rawhide: Backport upstream patch for pytest >= 9.1 compatibility 

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox