fix(tests): escape the regex in test_verify_pdf's docstring and compile-check tests/*.py (#503)

FindNonAsciiDateRangesTests' docstring (from #498) quotes the regex `\s*`
in a non-raw string. `\s` is an invalid escape sequence, so Python 3.12+
prints a SyntaxWarning for it (CPython gh-98401) when
tests/test_verify_pdf.py is compiled. It is in this repo's own CI log
for a45bbd1 on 3.12, 3.13 and 3.14, at tests/test_verify_pdf.py:75, while
the run stays green. Under `-W error::SyntaxWarning` the module fails to
import and the whole test_verify_pdf suite drops out of the run.

Escaped in the docstring. ToolsCompileWithoutWarnings (#480) only compiled
tools/*.py, which is why this got through; it now compiles tests/*.py too.
With the unescaped docstring it fails naming tests/test_verify_pdf.py, and
it passes with the fix.

Verification on Python 3.10, 3.11, 3.12, 3.13 and 3.14, from a clean
bytecode cache: `python -W error::SyntaxWarning -m unittest discover -s
tests -t .` OK (501 tests, the same count as master),
`tools/lint_skills.py`, `tools/check_framework_version.py`,
`tools/security_guards.py`.
This commit is contained in:
Yang authored and GitHub committed 2026-09-29 20:15:19 +02:00
1 parent a45bbd1a2a
commit 97e2575795
3 files changed
+17 -5

No files matched your search

+8
View File
@@ -105,6 +105,14 @@ per-file diff commands.
### Fixed
- **The compile-warning check covers `tests/*.py` too** (`tests/test_verify_pdf.py`,
`tests/test_verify_layout.py`) - `FindNonAsciiDateRangesTests`' docstring quotes the regex
`\s*` unescaped, so Python 3.12+ prints a `SyntaxWarning` for the invalid escape `\s` when
the test module is compiled. It shows up in this repo's own CI log on 3.12, 3.13 and 3.14 while
the run stays green, and under `-W error::SyntaxWarning` the module fails to import. Escaped
in the docstring; `ToolsCompileWithoutWarnings` now compiles `tests/*.py` as well as
`tools/*.py` and fails on the unescaped version.
- **`linkedin-search detail` no longer fetches an unrelated posting for a URL on another
host** - `normalizeId` took the first 6+-digit path segment from *any* URL, so a
Greenhouse or Lever apply link (the kind a posting's own page hands out, and what a user
+8 -4
View File
@@ -177,15 +177,19 @@ class ToolsCompileWithoutWarnings(unittest.TestCase):
the warning lands in the middle of a verification report. Compiling is a
pure `compile()` over the source text - no cache file, no temp file - so the
check costs nothing and covers every `tools/*.py`, guarding the next
docstring that quotes a macro too.
docstring that quotes a macro too. It covers `tests/*.py` as well: a test
docstring that quotes a regex (`\\s*` in `test_verify_pdf.py`) warned in CI
on every matrix Python while the run stayed green.
"""
def test_sources_have_no_invalid_escape_sequences(self):
import warnings
tools_dir = Path(verify_layout.__file__).resolve().parent
sources = sorted(tools_dir.glob("*.py"))
tests_dir = Path(__file__).resolve().parent
sources = sorted(tools_dir.glob("*.py")) + sorted(tests_dir.glob("*.py"))
self.assertIn(Path(verify_layout.__file__).resolve(), sources)
self.assertIn(Path(__file__).resolve(), sources)
offenders: dict[str, list[str]] = {}
for source in sources:
with warnings.catch_warnings(record=True) as caught:
@@ -197,8 +201,8 @@ class ToolsCompileWithoutWarnings(unittest.TestCase):
if issubclass(w.category, (SyntaxWarning, DeprecationWarning))
]
if syntax:
offenders[source.name] = syntax
self.assertEqual({}, offenders, "tools/*.py warn about invalid escapes when compiled")
offenders[f"{source.parent.name}/{source.name}"] = syntax
self.assertEqual({}, offenders, "tools/*.py or tests/*.py warn about invalid escapes when compiled")
if __name__ == "__main__":
+1 -1
View File
@@ -72,7 +72,7 @@ class FindNonAsciiDateRangesTests(unittest.TestCase):
The fold that makes `--contains "2016-2024"` pass on that layer (#458) is
what makes `--contains` unable to detect it - so this check never folds.
The newline cases are yang2632's finding on the PR: `\s*` between year and
The newline cases are yang2632's finding on the PR: `\\s*` between year and
dash also matched a line break, so a heading ending in an ASCII date joined
a dash that merely opened the next line.
"""