From 12b57872347f36b2b35cb09648cb6874375016ef Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Sun, 29 Oct 2023 18:43:26 +0000 Subject: [PATCH 01/11] Add `distutils` as a top-level package included with `types-setuptools` --- pyproject.toml | 5 +++++ stubs/setuptools/@tests/test_cases/check_distutils.py | 4 ++++ stubs/setuptools/distutils/__init__.pyi | 1 + stubs/setuptools/distutils/archive_util.pyi | 1 + stubs/setuptools/distutils/ccompiler.pyi | 1 + stubs/setuptools/distutils/cmd.pyi | 1 + stubs/setuptools/distutils/command/bdist_rpm.pyi | 1 + stubs/setuptools/distutils/command/build.pyi | 1 + stubs/setuptools/distutils/command/build_clib.pyi | 1 + stubs/setuptools/distutils/command/build_ext.pyi | 1 + stubs/setuptools/distutils/command/build_py.pyi | 1 + stubs/setuptools/distutils/command/install.pyi | 1 + stubs/setuptools/distutils/command/install_scripts.pyi | 1 + stubs/setuptools/distutils/command/register.pyi | 1 + stubs/setuptools/distutils/command/sdist.pyi | 1 + stubs/setuptools/distutils/command/upload.pyi | 1 + stubs/setuptools/distutils/config.pyi | 1 + stubs/setuptools/distutils/dep_util.pyi | 1 + stubs/setuptools/distutils/dist.pyi | 1 + stubs/setuptools/distutils/errors.pyi | 1 + stubs/setuptools/distutils/extension.pyi | 1 + stubs/setuptools/distutils/filelist.pyi | 1 + stubs/setuptools/distutils/sysconfig.pyi | 1 + stubs/setuptools/distutils/util.pyi | 1 + 24 files changed, 31 insertions(+) create mode 100644 stubs/setuptools/@tests/test_cases/check_distutils.py create mode 100644 stubs/setuptools/distutils/__init__.pyi create mode 100644 stubs/setuptools/distutils/archive_util.pyi create mode 100644 stubs/setuptools/distutils/ccompiler.pyi create mode 100644 stubs/setuptools/distutils/cmd.pyi create mode 100644 stubs/setuptools/distutils/command/bdist_rpm.pyi create mode 100644 stubs/setuptools/distutils/command/build.pyi create mode 100644 stubs/setuptools/distutils/command/build_clib.pyi create mode 100644 stubs/setuptools/distutils/command/build_ext.pyi create mode 100644 stubs/setuptools/distutils/command/build_py.pyi create mode 100644 stubs/setuptools/distutils/command/install.pyi create mode 100644 stubs/setuptools/distutils/command/install_scripts.pyi create mode 100644 stubs/setuptools/distutils/command/register.pyi create mode 100644 stubs/setuptools/distutils/command/sdist.pyi create mode 100644 stubs/setuptools/distutils/command/upload.pyi create mode 100644 stubs/setuptools/distutils/config.pyi create mode 100644 stubs/setuptools/distutils/dep_util.pyi create mode 100644 stubs/setuptools/distutils/dist.pyi create mode 100644 stubs/setuptools/distutils/errors.pyi create mode 100644 stubs/setuptools/distutils/extension.pyi create mode 100644 stubs/setuptools/distutils/filelist.pyi create mode 100644 stubs/setuptools/distutils/sysconfig.pyi create mode 100644 stubs/setuptools/distutils/util.pyi diff --git a/pyproject.toml b/pyproject.toml index b877e7f19abe..dab962b557ac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,11 @@ select = [ "UP039", # don't use parens after a class definition with no bases ] +[tool.ruff.per-file-ignores] +# "Unused imports" in test cases might be there for a reason +"test_cases/**/check_*.py" = ["F401"] +"stubs/*/@tests/test_cases/check_*.py" = ["F401"] + [tool.ruff.isort] split-on-trailing-comma = false combine-as-imports = true diff --git a/stubs/setuptools/@tests/test_cases/check_distutils.py b/stubs/setuptools/@tests/test_cases/check_distutils.py new file mode 100644 index 000000000000..41df79a87066 --- /dev/null +++ b/stubs/setuptools/@tests/test_cases/check_distutils.py @@ -0,0 +1,4 @@ +import distutils +import distutils.command +import distutils.command.sdist +import distutils.config diff --git a/stubs/setuptools/distutils/__init__.pyi b/stubs/setuptools/distutils/__init__.pyi new file mode 100644 index 000000000000..c0c8ceb41bbf --- /dev/null +++ b/stubs/setuptools/distutils/__init__.pyi @@ -0,0 +1 @@ +from setuptools._distutils import * diff --git a/stubs/setuptools/distutils/archive_util.pyi b/stubs/setuptools/distutils/archive_util.pyi new file mode 100644 index 000000000000..115f30506461 --- /dev/null +++ b/stubs/setuptools/distutils/archive_util.pyi @@ -0,0 +1 @@ +from setuptools._distutils.archive_util import * diff --git a/stubs/setuptools/distutils/ccompiler.pyi b/stubs/setuptools/distutils/ccompiler.pyi new file mode 100644 index 000000000000..e1770cfdf09d --- /dev/null +++ b/stubs/setuptools/distutils/ccompiler.pyi @@ -0,0 +1 @@ +from setuptools._distutils.ccompiler import * diff --git a/stubs/setuptools/distutils/cmd.pyi b/stubs/setuptools/distutils/cmd.pyi new file mode 100644 index 000000000000..235ca5680913 --- /dev/null +++ b/stubs/setuptools/distutils/cmd.pyi @@ -0,0 +1 @@ +from setuptools._distutils.cmd import * diff --git a/stubs/setuptools/distutils/command/bdist_rpm.pyi b/stubs/setuptools/distutils/command/bdist_rpm.pyi new file mode 100644 index 000000000000..32e88d493a3f --- /dev/null +++ b/stubs/setuptools/distutils/command/bdist_rpm.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.bdist_rpm import * diff --git a/stubs/setuptools/distutils/command/build.pyi b/stubs/setuptools/distutils/command/build.pyi new file mode 100644 index 000000000000..1fe7d1e73415 --- /dev/null +++ b/stubs/setuptools/distutils/command/build.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.build import * diff --git a/stubs/setuptools/distutils/command/build_clib.pyi b/stubs/setuptools/distutils/command/build_clib.pyi new file mode 100644 index 000000000000..f60f41aa89f4 --- /dev/null +++ b/stubs/setuptools/distutils/command/build_clib.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.build_clib import * diff --git a/stubs/setuptools/distutils/command/build_ext.pyi b/stubs/setuptools/distutils/command/build_ext.pyi new file mode 100644 index 000000000000..c1967156809e --- /dev/null +++ b/stubs/setuptools/distutils/command/build_ext.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.build_ext import * diff --git a/stubs/setuptools/distutils/command/build_py.pyi b/stubs/setuptools/distutils/command/build_py.pyi new file mode 100644 index 000000000000..0d97b743f7de --- /dev/null +++ b/stubs/setuptools/distutils/command/build_py.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.build_py import * diff --git a/stubs/setuptools/distutils/command/install.pyi b/stubs/setuptools/distutils/command/install.pyi new file mode 100644 index 000000000000..6ef0aca09e23 --- /dev/null +++ b/stubs/setuptools/distutils/command/install.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.install import * diff --git a/stubs/setuptools/distutils/command/install_scripts.pyi b/stubs/setuptools/distutils/command/install_scripts.pyi new file mode 100644 index 000000000000..3cebd5543427 --- /dev/null +++ b/stubs/setuptools/distutils/command/install_scripts.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.install_scripts import * diff --git a/stubs/setuptools/distutils/command/register.pyi b/stubs/setuptools/distutils/command/register.pyi new file mode 100644 index 000000000000..83d12de0f28c --- /dev/null +++ b/stubs/setuptools/distutils/command/register.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.register import * diff --git a/stubs/setuptools/distutils/command/sdist.pyi b/stubs/setuptools/distutils/command/sdist.pyi new file mode 100644 index 000000000000..50a819163764 --- /dev/null +++ b/stubs/setuptools/distutils/command/sdist.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.sdist import * diff --git a/stubs/setuptools/distutils/command/upload.pyi b/stubs/setuptools/distutils/command/upload.pyi new file mode 100644 index 000000000000..640d7bf919d5 --- /dev/null +++ b/stubs/setuptools/distutils/command/upload.pyi @@ -0,0 +1 @@ +from setuptools._distutils.command.upload import * diff --git a/stubs/setuptools/distutils/config.pyi b/stubs/setuptools/distutils/config.pyi new file mode 100644 index 000000000000..ebd367c2d4ed --- /dev/null +++ b/stubs/setuptools/distutils/config.pyi @@ -0,0 +1 @@ +from setuptools._distutils.config import * diff --git a/stubs/setuptools/distutils/dep_util.pyi b/stubs/setuptools/distutils/dep_util.pyi new file mode 100644 index 000000000000..22008d8cf747 --- /dev/null +++ b/stubs/setuptools/distutils/dep_util.pyi @@ -0,0 +1 @@ +from setuptools._distutils.dep_util import * diff --git a/stubs/setuptools/distutils/dist.pyi b/stubs/setuptools/distutils/dist.pyi new file mode 100644 index 000000000000..b6cdf2bd9f2a --- /dev/null +++ b/stubs/setuptools/distutils/dist.pyi @@ -0,0 +1 @@ +from setuptools._distutils.dist import * diff --git a/stubs/setuptools/distutils/errors.pyi b/stubs/setuptools/distutils/errors.pyi new file mode 100644 index 000000000000..28a21bf13e2a --- /dev/null +++ b/stubs/setuptools/distutils/errors.pyi @@ -0,0 +1 @@ +from setuptools._distutils.errors import * diff --git a/stubs/setuptools/distutils/extension.pyi b/stubs/setuptools/distutils/extension.pyi new file mode 100644 index 000000000000..95b5cf764dfd --- /dev/null +++ b/stubs/setuptools/distutils/extension.pyi @@ -0,0 +1 @@ +from setuptools._distutils.extension import * diff --git a/stubs/setuptools/distutils/filelist.pyi b/stubs/setuptools/distutils/filelist.pyi new file mode 100644 index 000000000000..fe746bbdcfe4 --- /dev/null +++ b/stubs/setuptools/distutils/filelist.pyi @@ -0,0 +1 @@ +from setuptools._distutils.filelist import * diff --git a/stubs/setuptools/distutils/sysconfig.pyi b/stubs/setuptools/distutils/sysconfig.pyi new file mode 100644 index 000000000000..9b50b49872bc --- /dev/null +++ b/stubs/setuptools/distutils/sysconfig.pyi @@ -0,0 +1 @@ +from setuptools._distutils.sysconfig import * diff --git a/stubs/setuptools/distutils/util.pyi b/stubs/setuptools/distutils/util.pyi new file mode 100644 index 000000000000..b5723b79d9ff --- /dev/null +++ b/stubs/setuptools/distutils/util.pyi @@ -0,0 +1 @@ +from setuptools._distutils.util import * From 9811aab945b99e966d0147f8ff16bfc6361d767c Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Sun, 29 Oct 2023 18:50:33 +0000 Subject: [PATCH 02/11] fix pyright --- stubs/setuptools/distutils/__init__.pyi | 1 - 1 file changed, 1 deletion(-) delete mode 100644 stubs/setuptools/distutils/__init__.pyi diff --git a/stubs/setuptools/distutils/__init__.pyi b/stubs/setuptools/distutils/__init__.pyi deleted file mode 100644 index c0c8ceb41bbf..000000000000 --- a/stubs/setuptools/distutils/__init__.pyi +++ /dev/null @@ -1 +0,0 @@ -from setuptools._distutils import * From 53eb07c4bb79471aab0331d2cd30a73399e9d0ac Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Sun, 29 Oct 2023 18:57:58 +0000 Subject: [PATCH 03/11] Try to make the assorted linters happy --- pyproject.toml | 5 ----- stubs/setuptools/@tests/test_cases/check_distutils.py | 7 ++++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index dab962b557ac..b877e7f19abe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,11 +46,6 @@ select = [ "UP039", # don't use parens after a class definition with no bases ] -[tool.ruff.per-file-ignores] -# "Unused imports" in test cases might be there for a reason -"test_cases/**/check_*.py" = ["F401"] -"stubs/*/@tests/test_cases/check_*.py" = ["F401"] - [tool.ruff.isort] split-on-trailing-comma = false combine-as-imports = true diff --git a/stubs/setuptools/@tests/test_cases/check_distutils.py b/stubs/setuptools/@tests/test_cases/check_distutils.py index 41df79a87066..6b47b11532f4 100644 --- a/stubs/setuptools/@tests/test_cases/check_distutils.py +++ b/stubs/setuptools/@tests/test_cases/check_distutils.py @@ -1,4 +1,5 @@ -import distutils -import distutils.command -import distutils.command.sdist import distutils.config +import distutils.command.sdist + +d = distutils.config.PyPIRCCommand +c = distutils.command.sdist.sdist From 1e5ee1597326ed03574d4a925870c0021d1d4523 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 29 Oct 2023 18:58:39 +0000 Subject: [PATCH 04/11] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stubs/setuptools/@tests/test_cases/check_distutils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/setuptools/@tests/test_cases/check_distutils.py b/stubs/setuptools/@tests/test_cases/check_distutils.py index 6b47b11532f4..6cf41dc7cb71 100644 --- a/stubs/setuptools/@tests/test_cases/check_distutils.py +++ b/stubs/setuptools/@tests/test_cases/check_distutils.py @@ -1,5 +1,5 @@ -import distutils.config import distutils.command.sdist +import distutils.config d = distutils.config.PyPIRCCommand c = distutils.command.sdist.sdist From 743a3d3bc3c15f6b0eaaa6b2a88652236cb727e1 Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Mon, 30 Oct 2023 18:02:33 +0000 Subject: [PATCH 05/11] Get stubtest working (via some hacks) --- .../setuptools/@tests/stubtest_allowlist.txt | 95 ++++++++++++++++++- tests/stubtest_third_party.py | 26 ++++- 2 files changed, 116 insertions(+), 5 deletions(-) diff --git a/stubs/setuptools/@tests/stubtest_allowlist.txt b/stubs/setuptools/@tests/stubtest_allowlist.txt index 79dcad433a95..4770b040e8dc 100644 --- a/stubs/setuptools/@tests/stubtest_allowlist.txt +++ b/stubs/setuptools/@tests/stubtest_allowlist.txt @@ -42,6 +42,99 @@ setuptools._distutils.dist.Distribution.get_requires setuptools._distutils.dist.Distribution.get_provides setuptools._distutils.dist.Distribution.get_obsoletes +# Missing objects from setuptools._distutils +setuptools._distutils.archive_util.ARCHIVE_FORMATS +setuptools._distutils.archive_util.check_archive_formats +setuptools._distutils.ccompiler.CCompiler.EXECUTABLE +setuptools._distutils.ccompiler.CCompiler.SHARED_LIBRARY +setuptools._distutils.ccompiler.CCompiler.SHARED_OBJECT +setuptools._distutils.ccompiler.CCompiler.compiler_type +setuptools._distutils.ccompiler.CCompiler.obj_extension +setuptools._distutils.ccompiler.CCompiler.out_extensions +setuptools._distutils.ccompiler.CCompiler.set_executable +setuptools._distutils.ccompiler.compiler_class +setuptools._distutils.cmd.Command.dump_options +setuptools._distutils.command.bdist +setuptools._distutils.command.bdist_rpm +setuptools._distutils.command.build +setuptools._distutils.command.build_clib +setuptools._distutils.command.build_clib.show_compilers +setuptools._distutils.command.build_ext.extension_name_re +setuptools._distutils.command.build_ext.show_compilers +setuptools._distutils.command.build_ext +setuptools._distutils.command.build_py +setuptools._distutils.command.build_scripts +setuptools._distutils.command.check +setuptools._distutils.command.clean +setuptools._distutils.command.install +setuptools._distutils.command.install_data +setuptools._distutils.command.install_headers +setuptools._distutils.command.install_lib +setuptools._distutils.command.install_scripts +setuptools._distutils.command.install.HAS_USER_SITE +setuptools._distutils.command.install.INSTALL_SCHEMES +setuptools._distutils.command.install.SCHEME_KEYS +setuptools._distutils.command.install.WINDOWS_SCHEME +setuptools._distutils.command.install_lib.PYTHON_SOURCE_EXTENSION +setuptools._distutils.command.sdist +setuptools._distutils.command.sdist.show_formats +setuptools._distutils.command.register +setuptools._distutils.command.upload +setuptools._distutils.config.DEFAULT_PYPIRC +setuptools._distutils.dist.DistributionMetadata.set_classifiers +setuptools._distutils.dist.DistributionMetadata.set_keywords +setuptools._distutils.dist.DistributionMetadata.set_platforms +setuptools._distutils.dist.fix_help_options +setuptools._distutils.extension.read_setup_file +setuptools._distutils.filelist.findall +setuptools._distutils.filelist.glob_to_re +setuptools._distutils.filelist.translate_pattern +setuptools._distutils.sysconfig.BASE_EXEC_PREFIX +setuptools._distutils.sysconfig.BASE_PREFIX +setuptools._distutils.sysconfig.IS_PYPY +setuptools._distutils.sysconfig.build_flags +setuptools._distutils.sysconfig.expand_makefile_vars +setuptools._distutils.sysconfig.get_python_version +setuptools._distutils.sysconfig.parse_config_h +setuptools._distutils.sysconfig.parse_makefile +setuptools._distutils.sysconfig.project_base +setuptools._distutils.sysconfig.python_build +setuptools._distutils.util.MACOSX_VERSION_VAR + +# Missing submodules from setuptools._distutils +# (Many of these may be implementation details, +# but they can be added if people ask for them) +setuptools._distutils.bcppcompiler +setuptools._distutils.command.bdist +setuptools._distutils.command.bdist_dumb +setuptools._distutils.command.build_scripts +setuptools._distutils.command.check +setuptools._distutils.command.clean +setuptools._distutils.command.config +setuptools._distutils.command.install_data +setuptools._distutils.command.install_egg_info +setuptools._distutils.command.install_headers +setuptools._distutils.command.py37compat +setuptools._distutils.core +setuptools._distutils.cygwinccompiler +setuptools._distutils.debug +setuptools._distutils.dir_util +setuptools._distutils.fancy_getopt +setuptools._distutils.file_util +setuptools._distutils.log +setuptools._distutils.msvc9compiler +setuptools._distutils.msvccompiler +setuptools._distutils.py38compat +setuptools._distutils.py39compat +setuptools._distutils.spawn +setuptools._distutils.text_file +setuptools._distutils.unixccompiler +setuptools._distutils.version +setuptools._distutils.versionpredicate + +# Reexported from setuptools._distutils; problems should be fixed there +distutils\..+ + # Private modules setuptools.config._validate_pyproject.* setuptools.command.build_py.build_py.existing_egg_info_dir @@ -49,8 +142,6 @@ setuptools.command.build_py.build_py.existing_egg_info_dir # Loop variable leak setuptools.sandbox.AbstractSandbox.name -# Vendored and modified version of stdlib's distutils. Basically implementation details -setuptools._distutils.* # Other vendored code setuptools._vendor.* pkg_resources._vendor.* diff --git a/tests/stubtest_third_party.py b/tests/stubtest_third_party.py index 9b4e301d049e..d45966ced92a 100755 --- a/tests/stubtest_third_party.py +++ b/tests/stubtest_third_party.py @@ -4,10 +4,13 @@ from __future__ import annotations import argparse +import contextlib import os +import shutil import subprocess import sys import tempfile +from collections.abc import Iterator from pathlib import Path from textwrap import dedent from typing import NoReturn @@ -16,10 +19,23 @@ from utils import PYTHON_VERSION, colored, get_mypy_req, make_venv, print_error, print_success_msg +@contextlib.contextmanager +def temporarily_delete_stdlib_distutils(typeshed_dir: Path) -> Iterator[None]: + stdlib_distutils_dir = typeshed_dir / "stdlib" / "distutils" + with tempfile.TemporaryDirectory() as td: + shutil.copytree(stdlib_distutils_dir, td, dirs_exist_ok=True) + try: + shutil.rmtree(stdlib_distutils_dir) + yield + finally: + shutil.copytree(td, stdlib_distutils_dir, dirs_exist_ok=True) + + def run_stubtest( dist: Path, *, parser: argparse.ArgumentParser, verbose: bool = False, specified_platforms_only: bool = False ) -> bool: dist_name = dist.name + typeshed_dir = dist.parent.parent try: metadata = read_metadata(dist_name) except NoSuchStubError as e: @@ -41,8 +57,8 @@ def run_stubtest( print(colored(f"skipping (requires Python {metadata.requires_python})", "yellow")) return True - with tempfile.TemporaryDirectory() as tmp: - venv_dir = Path(tmp) + with contextlib.ExitStack() as stack: + venv_dir = Path(stack.enter_context(tempfile.TemporaryDirectory())) try: pip_exe, python_exe = make_venv(venv_dir) except Exception: @@ -83,7 +99,7 @@ def run_stubtest( "mypy.stubtest", # Use --custom-typeshed-dir in case we make linked changes to stdlib or _typeshed "--custom-typeshed-dir", - str(dist.parent.parent), + str(typeshed_dir), *ignore_missing_stub, *packages_to_check, *modules_to_check, @@ -111,6 +127,10 @@ def run_stubtest( if dist_name == "uWSGI": if not setup_uwsgi_stubtest_command(dist, venv_dir, stubtest_cmd): return False + # setuptools also requires special-casing, or stubtest gets confused + # between stdlib-distutils and setuptools-distutils + elif dist_name == "setuptools": + stack.enter_context(temporarily_delete_stdlib_distutils(typeshed_dir)) try: subprocess.run(stubtest_cmd, env=stubtest_env, check=True, capture_output=True) From 28eb4be362943f472ff261a4ff188ce1bd63c831 Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Mon, 30 Oct 2023 18:45:39 +0000 Subject: [PATCH 06/11] try to fix the meta-tests --- tests/stubtest_third_party.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/stubtest_third_party.py b/tests/stubtest_third_party.py index d45966ced92a..31004837ef8c 100755 --- a/tests/stubtest_third_party.py +++ b/tests/stubtest_third_party.py @@ -161,8 +161,8 @@ def run_stubtest( else: print_success_msg() - if verbose: - print_commands(dist, pip_cmd, stubtest_cmd, mypypath) + if verbose: + print_commands(dist, pip_cmd, stubtest_cmd, mypypath) return True From 6af45742d74bf08e2049b8b80f2bf76715e01fa0 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Tue, 6 Feb 2024 17:57:07 +0000 Subject: [PATCH 07/11] Update stubtest_allowlist.txt --- stubs/setuptools/@tests/stubtest_allowlist.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stubs/setuptools/@tests/stubtest_allowlist.txt b/stubs/setuptools/@tests/stubtest_allowlist.txt index 14d9bdab0b25..4939e168d57b 100644 --- a/stubs/setuptools/@tests/stubtest_allowlist.txt +++ b/stubs/setuptools/@tests/stubtest_allowlist.txt @@ -137,7 +137,9 @@ distutils\..+ # Is a functools.partial, so stubtest says "is not a function" setuptools.dep_util.newer_pairwise_group +setuptools._distutils.dep_util.newer_pairwise setuptools.modified.newer_pairwise_group +setuptools._distutils._modified.newer_pairwise_group # Private modules setuptools.config._validate_pyproject.* From e79d57384af3c54bedde79362fef6bf001d2703e Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Sat, 16 Mar 2024 14:46:26 +0000 Subject: [PATCH 08/11] unused allowlist entry --- stubs/setuptools/@tests/stubtest_allowlist.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/stubs/setuptools/@tests/stubtest_allowlist.txt b/stubs/setuptools/@tests/stubtest_allowlist.txt index bdbc67b3acde..1ab28e6f7e29 100644 --- a/stubs/setuptools/@tests/stubtest_allowlist.txt +++ b/stubs/setuptools/@tests/stubtest_allowlist.txt @@ -36,7 +36,6 @@ setuptools._distutils.ccompiler.CCompiler.EXECUTABLE setuptools._distutils.ccompiler.CCompiler.SHARED_LIBRARY setuptools._distutils.ccompiler.CCompiler.SHARED_OBJECT setuptools._distutils.ccompiler.CCompiler.compiler_type -setuptools._distutils.ccompiler.CCompiler.obj_extension setuptools._distutils.ccompiler.CCompiler.out_extensions setuptools._distutils.ccompiler.CCompiler.set_executable setuptools._distutils.ccompiler.compiler_class From 566352593aeebaa3f31cb09740b36643a471c810 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Sat, 16 Mar 2024 15:07:08 +0000 Subject: [PATCH 09/11] Update stubs/setuptools/@tests/test_cases/check_distutils.py Co-authored-by: Avasam --- stubs/setuptools/@tests/test_cases/check_distutils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stubs/setuptools/@tests/test_cases/check_distutils.py b/stubs/setuptools/@tests/test_cases/check_distutils.py index 6cf41dc7cb71..1af5707cbe68 100644 --- a/stubs/setuptools/@tests/test_cases/check_distutils.py +++ b/stubs/setuptools/@tests/test_cases/check_distutils.py @@ -1,5 +1,7 @@ import distutils.command.sdist import distutils.config +from distutils.util import split_version +s = split_version("") d = distutils.config.PyPIRCCommand c = distutils.command.sdist.sdist From 2783e7bc8c0178d9fa83308efaf95d761b8f91a6 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Sat, 16 Mar 2024 15:16:13 +0000 Subject: [PATCH 10/11] Revert "Update stubs/setuptools/@tests/test_cases/check_distutils.py" This reverts commit 566352593aeebaa3f31cb09740b36643a471c810. --- stubs/setuptools/@tests/test_cases/check_distutils.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/stubs/setuptools/@tests/test_cases/check_distutils.py b/stubs/setuptools/@tests/test_cases/check_distutils.py index 1af5707cbe68..6cf41dc7cb71 100644 --- a/stubs/setuptools/@tests/test_cases/check_distutils.py +++ b/stubs/setuptools/@tests/test_cases/check_distutils.py @@ -1,7 +1,5 @@ import distutils.command.sdist import distutils.config -from distutils.util import split_version -s = split_version("") d = distutils.config.PyPIRCCommand c = distutils.command.sdist.sdist From a7dd2eee5e68e41e32be9d4ccf1027c374732347 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Sat, 16 Mar 2024 15:49:47 +0000 Subject: [PATCH 11/11] has the stubtest issue also been magically fixed? --- tests/stubtest_third_party.py | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/tests/stubtest_third_party.py b/tests/stubtest_third_party.py index 7b564fb929cd..9fa21b2daaad 100755 --- a/tests/stubtest_third_party.py +++ b/tests/stubtest_third_party.py @@ -4,13 +4,10 @@ from __future__ import annotations import argparse -import contextlib import os -import shutil import subprocess import sys import tempfile -from collections.abc import Iterator from pathlib import Path from textwrap import dedent from typing import NoReturn @@ -19,23 +16,10 @@ from utils import PYTHON_VERSION, colored, get_mypy_req, print_error, print_success_msg -@contextlib.contextmanager -def temporarily_delete_stdlib_distutils(typeshed_dir: Path) -> Iterator[None]: - stdlib_distutils_dir = typeshed_dir / "stdlib" / "distutils" - with tempfile.TemporaryDirectory() as td: - shutil.copytree(stdlib_distutils_dir, td, dirs_exist_ok=True) - try: - shutil.rmtree(stdlib_distutils_dir) - yield - finally: - shutil.copytree(td, stdlib_distutils_dir, dirs_exist_ok=True) - - def run_stubtest( dist: Path, *, parser: argparse.ArgumentParser, verbose: bool = False, specified_platforms_only: bool = False ) -> bool: dist_name = dist.name - typeshed_dir = dist.parent.parent try: metadata = read_metadata(dist_name) except NoSuchStubError as e: @@ -57,8 +41,8 @@ def run_stubtest( print(colored(f"skipping (requires Python {metadata.requires_python})", "yellow")) return True - with contextlib.ExitStack() as stack: - venv_dir = Path(stack.enter_context(tempfile.TemporaryDirectory())) + with tempfile.TemporaryDirectory() as tmp: + venv_dir = Path(tmp) try: subprocess.run(["uv", "venv", venv_dir, "--seed"], capture_output=True, check=True) except subprocess.CalledProcessError as e: @@ -105,7 +89,7 @@ def run_stubtest( "mypy.stubtest", # Use --custom-typeshed-dir in case we make linked changes to stdlib or _typeshed "--custom-typeshed-dir", - str(typeshed_dir), + str(dist.parent.parent), *ignore_missing_stub, *packages_to_check, *modules_to_check, @@ -133,10 +117,6 @@ def run_stubtest( if dist_name == "uWSGI": if not setup_uwsgi_stubtest_command(dist, venv_dir, stubtest_cmd): return False - # setuptools also requires special-casing, or stubtest gets confused - # between stdlib-distutils and setuptools-distutils - elif dist_name == "setuptools": - stack.enter_context(temporarily_delete_stdlib_distutils(typeshed_dir)) try: subprocess.run(stubtest_cmd, env=stubtest_env, check=True, capture_output=True) @@ -167,8 +147,8 @@ def run_stubtest( else: print_success_msg() - if verbose: - print_commands(dist, pip_cmd, stubtest_cmd, mypypath) + if verbose: + print_commands(dist, pip_cmd, stubtest_cmd, mypypath) return True