mirror of https://github.com/python/cpython
gh-126209: Fix inconsistency of `skip_file_prefixes` in `warnings.warn`'s C and Python implementations (GH-126329)
Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> Co-authored-by: Kirill Podoprigora <kirill.bast9@mail.ru>
This commit is contained in:
parent
f223efb2a2
commit
0ef84b0e2b
|
@ -533,6 +533,18 @@ class WarnTests(BaseTest):
|
||||||
warning_tests.package("prefix02", stacklevel=3)
|
warning_tests.package("prefix02", stacklevel=3)
|
||||||
self.assertIn("unittest", w[-1].filename)
|
self.assertIn("unittest", w[-1].filename)
|
||||||
|
|
||||||
|
def test_skip_file_prefixes_file_path(self):
|
||||||
|
# see: gh-126209
|
||||||
|
with warnings_state(self.module):
|
||||||
|
skipped = warning_tests.__file__
|
||||||
|
with original_warnings.catch_warnings(
|
||||||
|
record=True, module=self.module,
|
||||||
|
) as w:
|
||||||
|
warning_tests.outer("msg", skip_file_prefixes=(skipped,))
|
||||||
|
|
||||||
|
self.assertEqual(len(w), 1)
|
||||||
|
self.assertNotEqual(w[-1].filename, skipped)
|
||||||
|
|
||||||
def test_skip_file_prefixes_type_errors(self):
|
def test_skip_file_prefixes_type_errors(self):
|
||||||
with warnings_state(self.module):
|
with warnings_state(self.module):
|
||||||
warn = warning_tests.warnings.warn
|
warn = warning_tests.warnings.warn
|
||||||
|
|
|
@ -4,11 +4,13 @@
|
||||||
import warnings
|
import warnings
|
||||||
from test.test_warnings.data import package_helper
|
from test.test_warnings.data import package_helper
|
||||||
|
|
||||||
def outer(message, stacklevel=1):
|
|
||||||
inner(message, stacklevel)
|
|
||||||
|
|
||||||
def inner(message, stacklevel=1):
|
def outer(message, stacklevel=1, skip_file_prefixes=()):
|
||||||
warnings.warn(message, stacklevel=stacklevel)
|
inner(message, stacklevel, skip_file_prefixes)
|
||||||
|
|
||||||
|
def inner(message, stacklevel=1, skip_file_prefixes=()):
|
||||||
|
warnings.warn(message, stacklevel=stacklevel,
|
||||||
|
skip_file_prefixes=skip_file_prefixes)
|
||||||
|
|
||||||
def package(message, *, stacklevel):
|
def package(message, *, stacklevel):
|
||||||
package_helper.inner_api(message, stacklevel=stacklevel,
|
package_helper.inner_api(message, stacklevel=stacklevel,
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Fix an issue with ``skip_file_prefixes`` parameter which resulted in an inconsistent
|
||||||
|
behaviour between the C and Python implementations of :func:`warnings.warn`.
|
||||||
|
Patch by Daehee Kim.
|
|
@ -803,7 +803,8 @@ is_filename_to_skip(PyObject *filename, PyTupleObject *skip_file_prefixes)
|
||||||
for (Py_ssize_t idx = 0; idx < prefixes; ++idx)
|
for (Py_ssize_t idx = 0; idx < prefixes; ++idx)
|
||||||
{
|
{
|
||||||
PyObject *prefix = PyTuple_GET_ITEM(skip_file_prefixes, idx);
|
PyObject *prefix = PyTuple_GET_ITEM(skip_file_prefixes, idx);
|
||||||
Py_ssize_t found = PyUnicode_Tailmatch(filename, prefix, 0, -1, -1);
|
Py_ssize_t found = PyUnicode_Tailmatch(filename, prefix,
|
||||||
|
0, PY_SSIZE_T_MAX, -1);
|
||||||
if (found == 1) {
|
if (found == 1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue