Merge pull request #10343 from RonnyPfannschmidt/fix-10342-warn-explicit-add-location

fix #10342: put location into warning exceptions
This commit is contained in:
Ronny Pfannschmidt 2022-10-07 13:04:32 +02:00 committed by GitHub
commit 24ef7c98e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 9 deletions

View File

@ -158,12 +158,15 @@ def warn_explicit_for(method: FunctionType, message: PytestWarning) -> None:
filename = inspect.getfile(method)
module = method.__module__
mod_globals = method.__globals__
warnings.warn_explicit(
message,
type(message),
filename=filename,
module=module,
registry=mod_globals.setdefault("__warningregistry__", {}),
lineno=lineno,
)
try:
warnings.warn_explicit(
message,
type(message),
filename=filename,
module=module,
registry=mod_globals.setdefault("__warningregistry__", {}),
lineno=lineno,
)
except Warning as w:
# If warnings are errors (e.g. -Werror), location information gets lost, so we add it to the message.
raise type(w)(f"{w}\n at {filename}:{lineno}") from None

View File

@ -36,3 +36,11 @@ def test_pytest_warnings_repr_integration_test(pytester: Pytester) -> None:
)
result = pytester.runpytest()
result.stdout.fnmatch_lines(["E pytest.PytestWarning: some warning"])
@pytest.mark.filterwarnings("error")
def test_warn_explicit_for_annotates_errors_with_location():
with pytest.raises(Warning, match="(?m)test\n at .*python_api.py:\\d+"):
warning_types.warn_explicit_for(
pytest.raises, warning_types.PytestWarning("test") # type: ignore
)