fix #10342: put location into warning exceptions

as the warning systems own warn_explicit looses the information
we add them explicitly to the warning exceptions
This commit is contained in:
Ronny Pfannschmidt 2022-10-06 11:44:05 +02:00
parent 2be1b8f355
commit 14919c4bbb
2 changed files with 19 additions and 9 deletions

View File

@ -158,12 +158,14 @@ def warn_explicit_for(method: FunctionType, message: PytestWarning) -> None:
filename = inspect.getfile(method) filename = inspect.getfile(method)
module = method.__module__ module = method.__module__
mod_globals = method.__globals__ mod_globals = method.__globals__
try:
warnings.warn_explicit( warnings.warn_explicit(
message, message,
type(message), type(message),
filename=filename, filename=filename,
module=module, module=module,
registry=mod_globals.setdefault("__warningregistry__", {}), registry=mod_globals.setdefault("__warningregistry__", {}),
lineno=lineno, lineno=lineno,
) )
except Warning as w:
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 = pytester.runpytest()
result.stdout.fnmatch_lines(["E pytest.PytestWarning: some warning"]) 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
)