Drop Python 2 support in third-party stubs (#7703)

This commit is contained in:
Sebastian Rittau
2022-04-27 14:32:17 +02:00
committed by GitHub
parent 2d468966f5
commit f7aa41245e
19 changed files with 17 additions and 67 deletions

View File

@@ -18,7 +18,7 @@ import re
import tomli
consistent_files = [{"stdlib/@python2/builtins.pyi", "stdlib/@python2/__builtin__.pyi"}]
metadata_keys = {"version", "python2", "requires", "extra_description", "obsolete_since", "stubtest", "stubtest_apt_dependencies"}
metadata_keys = {"version", "requires", "extra_description", "obsolete_since", "stubtest", "stubtest_apt_dependencies"}
allowed_files = {"README.md"}
@@ -162,7 +162,6 @@ def check_metadata():
assert re.fullmatch(r"\d+(\.\d+)+|\d+(\.\d+)*\.\*", version), msg
for key in data:
assert key in metadata_keys, f"Unexpected key {key} for {distribution}"
assert isinstance(data.get("python2", False), bool), f"Invalid python2 value for {distribution}"
assert isinstance(data.get("requires", []), list), f"Invalid requires value for {distribution}"
for dep in data.get("requires", []):
assert isinstance(dep, str), f"Invalid dependency {dep} for {distribution}"

View File

@@ -5,15 +5,10 @@ import sys
from itertools import chain
from pathlib import Path
STUBS_SUPPORTING_PYTHON_2 = frozenset(
path.parent for path in Path("stubs").rglob("METADATA.toml") if "python2 = true" in path.read_text().splitlines()
)
def check_new_syntax(tree: ast.AST, path: Path, stub: str) -> list[str]:
errors = []
sourcelines = stub.splitlines()
python_2_support_required = any(directory in path.parents for directory in STUBS_SUPPORTING_PYTHON_2)
class AnnotationUnionFinder(ast.NodeVisitor):
def visit_Subscript(self, node: ast.Subscript) -> None:
@@ -103,10 +98,9 @@ def check_new_syntax(tree: ast.AST, path: Path, stub: str) -> list[str]:
)
self.generic_visit(node)
if not python_2_support_required:
ObjectClassdefFinder().visit(tree)
if path != Path("stdlib/typing_extensions.pyi"):
TextFinder().visit(tree)
ObjectClassdefFinder().visit(tree)
if path != Path("stdlib/typing_extensions.pyi"):
TextFinder().visit(tree)
OldSyntaxFinder().visit(tree)
IfFinder().visit(tree)

View File

@@ -15,7 +15,6 @@ import os
import re
import sys
import tempfile
from glob import glob
from pathlib import Path
from typing import Dict, NamedTuple
@@ -93,20 +92,6 @@ def parse_version(v_str):
return int(m.group(1)), int(m.group(2))
def is_supported(distribution_path: Path, major: int) -> bool:
data = dict(tomli.loads((distribution_path / "METADATA.toml").read_text()))
if major == 2:
# Python 2 is not supported by default.
return bool(data.get("python2", False))
# Python 3 is supported by default.
return has_py3_stubs(distribution_path)
# Keep this in sync with stubtest_third_party.py
def has_py3_stubs(dist: Path) -> bool:
return len(glob(f"{dist}/*.pyi")) > 0 or len(glob(f"{dist}/[!@]*/__init__.pyi")) > 0
def add_files(files, seen, root, name, args):
"""Add all files in package or module represented by 'name' located in 'root'."""
full = os.path.join(root, name)
@@ -326,22 +311,20 @@ def main():
files_checked += len(files)
# Test files of all third party distributions.
print("Running mypy " + " ".join(get_mypy_flags(args, major, minor, "/tmp/...")))
for distribution in sorted(os.listdir("stubs")):
if distribution == "SQLAlchemy":
continue # Crashes
if major != 2:
print("Running mypy " + " ".join(get_mypy_flags(args, major, minor, "/tmp/...")))
for distribution in sorted(os.listdir("stubs")):
if distribution == "SQLAlchemy":
continue # Crashes
distribution_path = Path("stubs", distribution)
distribution_path = Path("stubs", distribution)
if not is_probably_stubs_folder(distribution, distribution_path):
continue
if not is_probably_stubs_folder(distribution, distribution_path):
continue
if not is_supported(distribution_path, major):
continue
this_code, checked = test_third_party_distribution(distribution, major, minor, args)
code = max(code, this_code)
files_checked += checked
this_code, checked = test_third_party_distribution(distribution, major, minor, args)
code = max(code, this_code)
files_checked += checked
print()

View File

@@ -9,9 +9,8 @@ import subprocess
import sys
import tempfile
import venv
from glob import glob
from pathlib import Path
from typing import Any, NoReturn
from typing import NoReturn
import tomli
@@ -26,7 +25,7 @@ def run_stubtest(dist: Path) -> bool:
with open(dist / "METADATA.toml") as f:
metadata = dict(tomli.loads(f.read()))
if not run_stubtest_for(metadata, dist):
if not metadata.get("stubtest", True):
print(f"Skipping stubtest for {dist.name}\n\n")
return True
@@ -109,15 +108,6 @@ def run_stubtest(dist: Path) -> bool:
return True
def run_stubtest_for(metadata: dict[str, Any], dist: Path) -> bool:
return has_py3_stubs(dist) and metadata.get("stubtest", True)
# Keep this in sync with mypy_test.py
def has_py3_stubs(dist: Path) -> bool:
return len(glob(f"{dist}/*.pyi")) > 0 or len(glob(f"{dist}/[!@]*/__init__.pyi")) > 0
def main() -> NoReturn:
parser = argparse.ArgumentParser()
parser.add_argument("--num-shards", type=int, default=1)