Skip to content

Commit 3e809f8

Browse files
authored
Turn PipDeprecationWarning into errors when running tests (#13947)
So these don't go undetected in our test suite.
1 parent a5718f5 commit 3e809f8

7 files changed

Lines changed: 34 additions & 1 deletion

File tree

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,9 @@ markers = [
330330
"git: VCS: git",
331331
"search: tests for 'pip search'",
332332
]
333+
filterwarnings = [
334+
'error::pip._internal.utils.deprecation.PipDeprecationWarning:',
335+
]
333336

334337
######################################################################################
335338
# coverage

src/pip/_internal/utils/deprecation.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from __future__ import annotations
66

77
import logging
8+
import os
89
import warnings
910
from typing import Any, TextIO
1011

@@ -48,7 +49,11 @@ def _showwarning(
4849

4950
def install_warning_logger() -> None:
5051
# Enable our Deprecation Warnings
51-
warnings.simplefilter("default", PipDeprecationWarning, append=True)
52+
# If we're running pip test suite, promote the PipDeprecationWarning into errors.
53+
if os.environ.get("_PIP_TEST_ENV", None):
54+
warnings.simplefilter("error", PipDeprecationWarning)
55+
else:
56+
warnings.simplefilter("default", PipDeprecationWarning, append=True)
5257

5358
global _original_showwarning
5459

tests/functional/test_install.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,8 @@ def _patched_get_environment(lib_locations):
347347
)
348348
"""))
349349

350+
# Make sure PipDeprecationWarnings don't turn into errors
351+
script.environ["_PIP_TEST_ENV"] = ""
350352
result = script.run(
351353
"python", str(runner), str(wheel_path.parent), expect_stderr=True
352354
)

tests/functional/test_install_reqs.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,8 @@ def test_double_install_spurious_hash_mismatch(
629629
def test_install_with_extras_from_constraints(
630630
script: PipTestEnvironment, data: TestData, resolver_variant: ResolverVariant
631631
) -> None:
632+
# Make sure PipDeprecationWarnings don't turn into errors
633+
script.environ["_PIP_TEST_ENV"] = ""
632634
to_install = data.packages.joinpath("LocalExtras")
633635
file = script.temporary_file(
634636
"constraints.txt", f"LocalExtras[bar] @ {to_install.as_uri()}"
@@ -696,6 +698,8 @@ def test_install_with_extras_and_url_constraint(
696698
def test_install_with_extras_joined(
697699
script: PipTestEnvironment, data: TestData, resolver_variant: ResolverVariant
698700
) -> None:
701+
# Make sure PipDeprecationWarnings don't turn into errors
702+
script.environ["_PIP_TEST_ENV"] = ""
699703
to_install = data.packages.joinpath("LocalExtras")
700704
file = script.temporary_file(
701705
"constraints.txt", f"LocalExtras[bar] @ {to_install.as_uri()}"
@@ -762,6 +766,8 @@ def test_install_distribution_union_with_constraints(
762766
data: TestData,
763767
resolver_variant: ResolverVariant,
764768
) -> None:
769+
# Make sure PipDeprecationWarnings don't turn into errors
770+
script.environ["_PIP_TEST_ENV"] = ""
765771
to_install = data.packages.joinpath("LocalExtras")
766772
script.scratch_path.joinpath("constraints.txt").write_text(f"{to_install}[bar]")
767773
result = script.pip_install_local(

tests/functional/test_new_resolver.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,8 @@ def test_new_resolver_constraint_no_specifier(script: PipTestEnvironment) -> Non
733733
def test_new_resolver_constraint_reject_invalid(
734734
script: PipTestEnvironment, constraint: str, error: str
735735
) -> None:
736+
# Make sure PipDeprecationWarnings don't turn into errors
737+
script.environ["_PIP_TEST_ENV"] = ""
736738
create_basic_wheel_for_package(script, "pkg", "1.0")
737739
constraints_file = script.scratch_path / "constraints.txt"
738740
constraints_file.write_text(constraint)

tests/functional/test_warning.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,28 @@ def warnings_demo(tmpdir: Path) -> Path:
2525
def test_deprecation_warnings_are_correct(
2626
script: PipTestEnvironment, warnings_demo: Path
2727
) -> None:
28+
script.environ["_PIP_TEST_ENV"] = ""
2829
result = script.run("python", os.fspath(warnings_demo), expect_stderr=True)
2930
expected = "WARNING:pip._internal.deprecations:DEPRECATION: deprecated!\n"
3031
assert result.stderr == expected
3132

3233

34+
def test_deprecation_warnings_turn_into_errors_in_tests(
35+
script: PipTestEnvironment, warnings_demo: Path
36+
) -> None:
37+
result = script.run(
38+
"python", os.fspath(warnings_demo), expect_error=True, expect_stderr=True
39+
)
40+
assert result.stderr.startswith("Traceback")
41+
expected = "utils.deprecation.PipDeprecationWarning: DEPRECATION: deprecated!\n"
42+
assert result.stderr.endswith(expected)
43+
44+
3345
def test_deprecation_warnings_can_be_silenced(
3446
script: PipTestEnvironment, warnings_demo: Path
3547
) -> None:
3648
script.environ["PYTHONWARNINGS"] = "ignore"
49+
script.environ["_PIP_TEST_ENV"] = ""
3750
result = script.run("python", os.fspath(warnings_demo))
3851
assert result.stderr == ""
3952

tests/lib/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,8 @@ def __init__(
537537
environ["PYTHONDONTWRITEBYTECODE"] = "1"
538538
# Make sure we get UTF-8 on output, even on Windows...
539539
environ["PYTHONIOENCODING"] = "UTF-8"
540+
# Custom env flag so pip knows it's running in test environment
541+
environ["_PIP_TEST_ENV"] = "1"
540542

541543
# Whether all pip invocations should expect stderr
542544
# (useful for Python version deprecation)

0 commit comments

Comments
 (0)