stubtest_stdlib: fail if there are unused allowlist entries (#6424)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Akuli
2021-12-01 12:10:27 +02:00
committed by GitHub
parent deaa764915
commit bdf906e2bc
6 changed files with 4 additions and 117 deletions

View File

@@ -124,9 +124,6 @@ tkinter.EventType.__new__
_markupbase.ParserBase.error
asyncio.proactor_events._ProactorReadPipeTransport.__init__
distutils.command.bdist_wininst
logging.Formatter.__init__
logging.LoggerAdapter.__init__
logging.PercentStyle.__init__
py_compile.main
pyclbr.Class.__init__
pyclbr.Function.__init__

View File

@@ -57,7 +57,8 @@ def run_stubtest(typeshed_dir: Path) -> int:
"\nCommand run was: {}\n".format(" ".join(cmd)),
file=sys.stderr,
)
print("stubtest failed", file=sys.stderr)
print("\n\n", file=sys.stderr)
print(f'To fix "unused allowlist" errors, remove the corresponding entries from {allowlist_dir}', file=sys.stderr)
return e.returncode
else:
print("stubtest succeeded", file=sys.stderr)

View File

@@ -1,50 +0,0 @@
#!/usr/bin/env python3
# Runs stubtest and prints each unused allowlist entry with filename.
import subprocess
import sys
from pathlib import Path
from typing import List, Tuple
_UNUSED_NOTE = "note: unused allowlist entry "
_ALLOWLIST_PATH = Path("tests") / "stubtest_allowlists"
def main() -> None:
unused = run_stubtest()
with_filenames = []
for uu in unused:
with_filenames.extend(unused_files(uu))
for file, uu in with_filenames:
print(file + ":" + uu)
def run_stubtest() -> List[str]:
proc = subprocess.run([sys.executable, "tests/stubtest_stdlib.py"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = proc.stdout.decode("utf-8").splitlines()
return [line[len(_UNUSED_NOTE) :].strip() for line in output if line.startswith(_UNUSED_NOTE)]
def unused_files(unused: str) -> List[Tuple[str, str]]:
version = "py{}{}".format(sys.version_info[0], sys.version_info[1])
files = ["py3_common.txt", version + ".txt", sys.platform + ".txt", sys.platform + "-" + version + ".txt"]
found = []
for file in files:
path = _ALLOWLIST_PATH / file
if find_unused_in_file(unused, path):
found.append((path.as_posix(), unused))
if not found:
raise ValueError("unused item {} not found in any allowlist file".format(unused))
return found
def find_unused_in_file(unused: str, path: Path) -> bool:
try:
with open(path) as f:
return any(line.strip().split(" ")[0] == unused for line in f)
except FileNotFoundError:
return False
if __name__ == "__main__":
main()