From 90c90a3204f5d96919dfeeccbe6215ad4c65c3f5 Mon Sep 17 00:00:00 2001 From: Avasam Date: Thu, 17 Oct 2024 16:39:57 -0400 Subject: [PATCH 1/3] Statically alias distutils-stubs to setuptools._distutils --- tools/update_distutils_stubs.py | 32 +++++++++++++++++++ typings/distutils-stubs/__init__.pyi | 2 ++ typings/distutils-stubs/_log.pyi | 2 ++ typings/distutils-stubs/_macos_compat.pyi | 2 ++ typings/distutils-stubs/_modified.pyi | 2 ++ typings/distutils-stubs/_msvccompiler.pyi | 2 ++ typings/distutils-stubs/archive_util.pyi | 2 ++ typings/distutils-stubs/ccompiler.pyi | 2 ++ typings/distutils-stubs/cmd.pyi | 2 ++ typings/distutils-stubs/command/__init__.pyi | 2 ++ .../command/_framework_compat.pyi | 2 ++ typings/distutils-stubs/command/bdist.pyi | 2 ++ .../distutils-stubs/command/bdist_dumb.pyi | 2 ++ typings/distutils-stubs/command/bdist_rpm.pyi | 2 ++ typings/distutils-stubs/command/build.pyi | 2 ++ .../distutils-stubs/command/build_clib.pyi | 2 ++ typings/distutils-stubs/command/build_ext.pyi | 2 ++ typings/distutils-stubs/command/build_py.pyi | 2 ++ .../distutils-stubs/command/build_scripts.pyi | 2 ++ typings/distutils-stubs/command/check.pyi | 2 ++ typings/distutils-stubs/command/clean.pyi | 2 ++ typings/distutils-stubs/command/config.pyi | 2 ++ typings/distutils-stubs/command/install.pyi | 2 ++ .../distutils-stubs/command/install_data.pyi | 2 ++ .../command/install_egg_info.pyi | 2 ++ .../command/install_headers.pyi | 2 ++ .../distutils-stubs/command/install_lib.pyi | 2 ++ .../command/install_scripts.pyi | 2 ++ typings/distutils-stubs/command/sdist.pyi | 2 ++ typings/distutils-stubs/compat/__init__.pyi | 2 ++ typings/distutils-stubs/compat/py38.pyi | 2 ++ typings/distutils-stubs/compat/py39.pyi | 2 ++ typings/distutils-stubs/core.pyi | 2 ++ typings/distutils-stubs/cygwinccompiler.pyi | 2 ++ typings/distutils-stubs/debug.pyi | 2 ++ typings/distutils-stubs/dep_util.pyi | 2 ++ typings/distutils-stubs/dir_util.pyi | 2 ++ typings/distutils-stubs/dist.pyi | 2 ++ typings/distutils-stubs/errors.pyi | 2 ++ typings/distutils-stubs/extension.pyi | 2 ++ typings/distutils-stubs/fancy_getopt.pyi | 2 ++ typings/distutils-stubs/file_util.pyi | 2 ++ typings/distutils-stubs/filelist.pyi | 2 ++ typings/distutils-stubs/log.pyi | 2 ++ typings/distutils-stubs/ruff.toml | 3 ++ typings/distutils-stubs/spawn.pyi | 2 ++ typings/distutils-stubs/sysconfig.pyi | 2 ++ typings/distutils-stubs/text_file.pyi | 2 ++ typings/distutils-stubs/unixccompiler.pyi | 2 ++ typings/distutils-stubs/util.pyi | 2 ++ typings/distutils-stubs/version.pyi | 2 ++ typings/distutils-stubs/versionpredicate.pyi | 2 ++ typings/distutils-stubs/zosccompiler.pyi | 2 ++ 53 files changed, 137 insertions(+) create mode 100644 tools/update_distutils_stubs.py create mode 100644 typings/distutils-stubs/__init__.pyi create mode 100644 typings/distutils-stubs/_log.pyi create mode 100644 typings/distutils-stubs/_macos_compat.pyi create mode 100644 typings/distutils-stubs/_modified.pyi create mode 100644 typings/distutils-stubs/_msvccompiler.pyi create mode 100644 typings/distutils-stubs/archive_util.pyi create mode 100644 typings/distutils-stubs/ccompiler.pyi create mode 100644 typings/distutils-stubs/cmd.pyi create mode 100644 typings/distutils-stubs/command/__init__.pyi create mode 100644 typings/distutils-stubs/command/_framework_compat.pyi create mode 100644 typings/distutils-stubs/command/bdist.pyi create mode 100644 typings/distutils-stubs/command/bdist_dumb.pyi create mode 100644 typings/distutils-stubs/command/bdist_rpm.pyi create mode 100644 typings/distutils-stubs/command/build.pyi create mode 100644 typings/distutils-stubs/command/build_clib.pyi create mode 100644 typings/distutils-stubs/command/build_ext.pyi create mode 100644 typings/distutils-stubs/command/build_py.pyi create mode 100644 typings/distutils-stubs/command/build_scripts.pyi create mode 100644 typings/distutils-stubs/command/check.pyi create mode 100644 typings/distutils-stubs/command/clean.pyi create mode 100644 typings/distutils-stubs/command/config.pyi create mode 100644 typings/distutils-stubs/command/install.pyi create mode 100644 typings/distutils-stubs/command/install_data.pyi create mode 100644 typings/distutils-stubs/command/install_egg_info.pyi create mode 100644 typings/distutils-stubs/command/install_headers.pyi create mode 100644 typings/distutils-stubs/command/install_lib.pyi create mode 100644 typings/distutils-stubs/command/install_scripts.pyi create mode 100644 typings/distutils-stubs/command/sdist.pyi create mode 100644 typings/distutils-stubs/compat/__init__.pyi create mode 100644 typings/distutils-stubs/compat/py38.pyi create mode 100644 typings/distutils-stubs/compat/py39.pyi create mode 100644 typings/distutils-stubs/core.pyi create mode 100644 typings/distutils-stubs/cygwinccompiler.pyi create mode 100644 typings/distutils-stubs/debug.pyi create mode 100644 typings/distutils-stubs/dep_util.pyi create mode 100644 typings/distutils-stubs/dir_util.pyi create mode 100644 typings/distutils-stubs/dist.pyi create mode 100644 typings/distutils-stubs/errors.pyi create mode 100644 typings/distutils-stubs/extension.pyi create mode 100644 typings/distutils-stubs/fancy_getopt.pyi create mode 100644 typings/distutils-stubs/file_util.pyi create mode 100644 typings/distutils-stubs/filelist.pyi create mode 100644 typings/distutils-stubs/log.pyi create mode 100644 typings/distutils-stubs/ruff.toml create mode 100644 typings/distutils-stubs/spawn.pyi create mode 100644 typings/distutils-stubs/sysconfig.pyi create mode 100644 typings/distutils-stubs/text_file.pyi create mode 100644 typings/distutils-stubs/unixccompiler.pyi create mode 100644 typings/distutils-stubs/util.pyi create mode 100644 typings/distutils-stubs/version.pyi create mode 100644 typings/distutils-stubs/versionpredicate.pyi create mode 100644 typings/distutils-stubs/zosccompiler.pyi diff --git a/tools/update_distutils_stubs.py b/tools/update_distutils_stubs.py new file mode 100644 index 0000000000..1d90387a35 --- /dev/null +++ b/tools/update_distutils_stubs.py @@ -0,0 +1,32 @@ +import os +import shutil +from pathlib import Path + +_vendored_distutils_path = Path(__file__).parent.parent / "setuptools" / "_distutils" +_distutils_stubs_path = Path(__file__).parent.parent / "typings" / "distutils-stubs" + +DONT_TOUCH_COMMENT = "# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py\n" + + +def main(): + if _distutils_stubs_path.exists(): + shutil.rmtree(_distutils_stubs_path) + _distutils_stubs_path.mkdir(parents=True) + (_distutils_stubs_path / "ruff.toml").write_text( + f'{DONT_TOUCH_COMMENT}[lint]\nignore = ["F403"]' + ) + for path in _vendored_distutils_path.rglob("*.py"): + relative_path = path.relative_to(_vendored_distutils_path) + if relative_path.parts[0] == "tests": + continue + stub_path = (_distutils_stubs_path / relative_path).with_suffix(".pyi") + stub_path.parent.mkdir(exist_ok=True) + module = ( + "setuptools._distutils." + + str(relative_path.with_suffix("")).replace(os.sep, ".") + ).removesuffix(".__init__") + stub_path.write_text(f"{DONT_TOUCH_COMMENT}from {module} import *\n") + + +if __name__ == "__main__": + main() diff --git a/typings/distutils-stubs/__init__.pyi b/typings/distutils-stubs/__init__.pyi new file mode 100644 index 0000000000..38bd4dc1bd --- /dev/null +++ b/typings/distutils-stubs/__init__.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils import * diff --git a/typings/distutils-stubs/_log.pyi b/typings/distutils-stubs/_log.pyi new file mode 100644 index 0000000000..779bd8fdb7 --- /dev/null +++ b/typings/distutils-stubs/_log.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils._log import * diff --git a/typings/distutils-stubs/_macos_compat.pyi b/typings/distutils-stubs/_macos_compat.pyi new file mode 100644 index 0000000000..6fe7460b4d --- /dev/null +++ b/typings/distutils-stubs/_macos_compat.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils._macos_compat import * diff --git a/typings/distutils-stubs/_modified.pyi b/typings/distutils-stubs/_modified.pyi new file mode 100644 index 0000000000..c4b18e8f97 --- /dev/null +++ b/typings/distutils-stubs/_modified.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils._modified import * diff --git a/typings/distutils-stubs/_msvccompiler.pyi b/typings/distutils-stubs/_msvccompiler.pyi new file mode 100644 index 0000000000..015417ba8e --- /dev/null +++ b/typings/distutils-stubs/_msvccompiler.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils._msvccompiler import * diff --git a/typings/distutils-stubs/archive_util.pyi b/typings/distutils-stubs/archive_util.pyi new file mode 100644 index 0000000000..b7700fce41 --- /dev/null +++ b/typings/distutils-stubs/archive_util.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.archive_util import * diff --git a/typings/distutils-stubs/ccompiler.pyi b/typings/distutils-stubs/ccompiler.pyi new file mode 100644 index 0000000000..485de3e36a --- /dev/null +++ b/typings/distutils-stubs/ccompiler.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.ccompiler import * diff --git a/typings/distutils-stubs/cmd.pyi b/typings/distutils-stubs/cmd.pyi new file mode 100644 index 0000000000..3f46691517 --- /dev/null +++ b/typings/distutils-stubs/cmd.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.cmd import * diff --git a/typings/distutils-stubs/command/__init__.pyi b/typings/distutils-stubs/command/__init__.pyi new file mode 100644 index 0000000000..c25e29e484 --- /dev/null +++ b/typings/distutils-stubs/command/__init__.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command import * diff --git a/typings/distutils-stubs/command/_framework_compat.pyi b/typings/distutils-stubs/command/_framework_compat.pyi new file mode 100644 index 0000000000..cde7a97494 --- /dev/null +++ b/typings/distutils-stubs/command/_framework_compat.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command._framework_compat import * diff --git a/typings/distutils-stubs/command/bdist.pyi b/typings/distutils-stubs/command/bdist.pyi new file mode 100644 index 0000000000..c503d81e11 --- /dev/null +++ b/typings/distutils-stubs/command/bdist.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.bdist import * diff --git a/typings/distutils-stubs/command/bdist_dumb.pyi b/typings/distutils-stubs/command/bdist_dumb.pyi new file mode 100644 index 0000000000..58d1add93c --- /dev/null +++ b/typings/distutils-stubs/command/bdist_dumb.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.bdist_dumb import * diff --git a/typings/distutils-stubs/command/bdist_rpm.pyi b/typings/distutils-stubs/command/bdist_rpm.pyi new file mode 100644 index 0000000000..bf96bc6573 --- /dev/null +++ b/typings/distutils-stubs/command/bdist_rpm.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.bdist_rpm import * diff --git a/typings/distutils-stubs/command/build.pyi b/typings/distutils-stubs/command/build.pyi new file mode 100644 index 0000000000..afb8b012bc --- /dev/null +++ b/typings/distutils-stubs/command/build.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.build import * diff --git a/typings/distutils-stubs/command/build_clib.pyi b/typings/distutils-stubs/command/build_clib.pyi new file mode 100644 index 0000000000..bda3b5aadb --- /dev/null +++ b/typings/distutils-stubs/command/build_clib.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.build_clib import * diff --git a/typings/distutils-stubs/command/build_ext.pyi b/typings/distutils-stubs/command/build_ext.pyi new file mode 100644 index 0000000000..a73d42b483 --- /dev/null +++ b/typings/distutils-stubs/command/build_ext.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.build_ext import * diff --git a/typings/distutils-stubs/command/build_py.pyi b/typings/distutils-stubs/command/build_py.pyi new file mode 100644 index 0000000000..a1fd817cb0 --- /dev/null +++ b/typings/distutils-stubs/command/build_py.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.build_py import * diff --git a/typings/distutils-stubs/command/build_scripts.pyi b/typings/distutils-stubs/command/build_scripts.pyi new file mode 100644 index 0000000000..0ecbefa713 --- /dev/null +++ b/typings/distutils-stubs/command/build_scripts.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.build_scripts import * diff --git a/typings/distutils-stubs/command/check.pyi b/typings/distutils-stubs/command/check.pyi new file mode 100644 index 0000000000..e0e96bdae3 --- /dev/null +++ b/typings/distutils-stubs/command/check.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.check import * diff --git a/typings/distutils-stubs/command/clean.pyi b/typings/distutils-stubs/command/clean.pyi new file mode 100644 index 0000000000..5e7cb61c15 --- /dev/null +++ b/typings/distutils-stubs/command/clean.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.clean import * diff --git a/typings/distutils-stubs/command/config.pyi b/typings/distutils-stubs/command/config.pyi new file mode 100644 index 0000000000..112fe358cc --- /dev/null +++ b/typings/distutils-stubs/command/config.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.config import * diff --git a/typings/distutils-stubs/command/install.pyi b/typings/distutils-stubs/command/install.pyi new file mode 100644 index 0000000000..78ec790669 --- /dev/null +++ b/typings/distutils-stubs/command/install.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.install import * diff --git a/typings/distutils-stubs/command/install_data.pyi b/typings/distutils-stubs/command/install_data.pyi new file mode 100644 index 0000000000..4d551e4bb0 --- /dev/null +++ b/typings/distutils-stubs/command/install_data.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.install_data import * diff --git a/typings/distutils-stubs/command/install_egg_info.pyi b/typings/distutils-stubs/command/install_egg_info.pyi new file mode 100644 index 0000000000..abc0cffb6a --- /dev/null +++ b/typings/distutils-stubs/command/install_egg_info.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.install_egg_info import * diff --git a/typings/distutils-stubs/command/install_headers.pyi b/typings/distutils-stubs/command/install_headers.pyi new file mode 100644 index 0000000000..d3543886b9 --- /dev/null +++ b/typings/distutils-stubs/command/install_headers.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.install_headers import * diff --git a/typings/distutils-stubs/command/install_lib.pyi b/typings/distutils-stubs/command/install_lib.pyi new file mode 100644 index 0000000000..8090013c52 --- /dev/null +++ b/typings/distutils-stubs/command/install_lib.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.install_lib import * diff --git a/typings/distutils-stubs/command/install_scripts.pyi b/typings/distutils-stubs/command/install_scripts.pyi new file mode 100644 index 0000000000..b6b3ec6a57 --- /dev/null +++ b/typings/distutils-stubs/command/install_scripts.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.install_scripts import * diff --git a/typings/distutils-stubs/command/sdist.pyi b/typings/distutils-stubs/command/sdist.pyi new file mode 100644 index 0000000000..bc5393c68f --- /dev/null +++ b/typings/distutils-stubs/command/sdist.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.command.sdist import * diff --git a/typings/distutils-stubs/compat/__init__.pyi b/typings/distutils-stubs/compat/__init__.pyi new file mode 100644 index 0000000000..af873aaa3b --- /dev/null +++ b/typings/distutils-stubs/compat/__init__.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.compat import * diff --git a/typings/distutils-stubs/compat/py38.pyi b/typings/distutils-stubs/compat/py38.pyi new file mode 100644 index 0000000000..e876c5b55a --- /dev/null +++ b/typings/distutils-stubs/compat/py38.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.compat.py38 import * diff --git a/typings/distutils-stubs/compat/py39.pyi b/typings/distutils-stubs/compat/py39.pyi new file mode 100644 index 0000000000..57882a55f9 --- /dev/null +++ b/typings/distutils-stubs/compat/py39.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.compat.py39 import * diff --git a/typings/distutils-stubs/core.pyi b/typings/distutils-stubs/core.pyi new file mode 100644 index 0000000000..6450329f3b --- /dev/null +++ b/typings/distutils-stubs/core.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.core import * diff --git a/typings/distutils-stubs/cygwinccompiler.pyi b/typings/distutils-stubs/cygwinccompiler.pyi new file mode 100644 index 0000000000..6d3152a442 --- /dev/null +++ b/typings/distutils-stubs/cygwinccompiler.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.cygwinccompiler import * diff --git a/typings/distutils-stubs/debug.pyi b/typings/distutils-stubs/debug.pyi new file mode 100644 index 0000000000..280a3240c8 --- /dev/null +++ b/typings/distutils-stubs/debug.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.debug import * diff --git a/typings/distutils-stubs/dep_util.pyi b/typings/distutils-stubs/dep_util.pyi new file mode 100644 index 0000000000..1fd67d2144 --- /dev/null +++ b/typings/distutils-stubs/dep_util.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.dep_util import * diff --git a/typings/distutils-stubs/dir_util.pyi b/typings/distutils-stubs/dir_util.pyi new file mode 100644 index 0000000000..f2c1a4ef52 --- /dev/null +++ b/typings/distutils-stubs/dir_util.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.dir_util import * diff --git a/typings/distutils-stubs/dist.pyi b/typings/distutils-stubs/dist.pyi new file mode 100644 index 0000000000..0c7f71481c --- /dev/null +++ b/typings/distutils-stubs/dist.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.dist import * diff --git a/typings/distutils-stubs/errors.pyi b/typings/distutils-stubs/errors.pyi new file mode 100644 index 0000000000..d2a231f48e --- /dev/null +++ b/typings/distutils-stubs/errors.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.errors import * diff --git a/typings/distutils-stubs/extension.pyi b/typings/distutils-stubs/extension.pyi new file mode 100644 index 0000000000..f022d55d65 --- /dev/null +++ b/typings/distutils-stubs/extension.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.extension import * diff --git a/typings/distutils-stubs/fancy_getopt.pyi b/typings/distutils-stubs/fancy_getopt.pyi new file mode 100644 index 0000000000..f2364f4460 --- /dev/null +++ b/typings/distutils-stubs/fancy_getopt.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.fancy_getopt import * diff --git a/typings/distutils-stubs/file_util.pyi b/typings/distutils-stubs/file_util.pyi new file mode 100644 index 0000000000..dd25cdb49c --- /dev/null +++ b/typings/distutils-stubs/file_util.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.file_util import * diff --git a/typings/distutils-stubs/filelist.pyi b/typings/distutils-stubs/filelist.pyi new file mode 100644 index 0000000000..c6d35e64ca --- /dev/null +++ b/typings/distutils-stubs/filelist.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.filelist import * diff --git a/typings/distutils-stubs/log.pyi b/typings/distutils-stubs/log.pyi new file mode 100644 index 0000000000..b04fa56fa8 --- /dev/null +++ b/typings/distutils-stubs/log.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.log import * diff --git a/typings/distutils-stubs/ruff.toml b/typings/distutils-stubs/ruff.toml new file mode 100644 index 0000000000..404604db33 --- /dev/null +++ b/typings/distutils-stubs/ruff.toml @@ -0,0 +1,3 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +[lint] +ignore = ["F403"] \ No newline at end of file diff --git a/typings/distutils-stubs/spawn.pyi b/typings/distutils-stubs/spawn.pyi new file mode 100644 index 0000000000..4769044a15 --- /dev/null +++ b/typings/distutils-stubs/spawn.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.spawn import * diff --git a/typings/distutils-stubs/sysconfig.pyi b/typings/distutils-stubs/sysconfig.pyi new file mode 100644 index 0000000000..75e04d3316 --- /dev/null +++ b/typings/distutils-stubs/sysconfig.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.sysconfig import * diff --git a/typings/distutils-stubs/text_file.pyi b/typings/distutils-stubs/text_file.pyi new file mode 100644 index 0000000000..7e31e97f8a --- /dev/null +++ b/typings/distutils-stubs/text_file.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.text_file import * diff --git a/typings/distutils-stubs/unixccompiler.pyi b/typings/distutils-stubs/unixccompiler.pyi new file mode 100644 index 0000000000..c242d42aa5 --- /dev/null +++ b/typings/distutils-stubs/unixccompiler.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.unixccompiler import * diff --git a/typings/distutils-stubs/util.pyi b/typings/distutils-stubs/util.pyi new file mode 100644 index 0000000000..87fab77f19 --- /dev/null +++ b/typings/distutils-stubs/util.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.util import * diff --git a/typings/distutils-stubs/version.pyi b/typings/distutils-stubs/version.pyi new file mode 100644 index 0000000000..74de5579be --- /dev/null +++ b/typings/distutils-stubs/version.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.version import * diff --git a/typings/distutils-stubs/versionpredicate.pyi b/typings/distutils-stubs/versionpredicate.pyi new file mode 100644 index 0000000000..d550e70d01 --- /dev/null +++ b/typings/distutils-stubs/versionpredicate.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.versionpredicate import * diff --git a/typings/distutils-stubs/zosccompiler.pyi b/typings/distutils-stubs/zosccompiler.pyi new file mode 100644 index 0000000000..2882c1febb --- /dev/null +++ b/typings/distutils-stubs/zosccompiler.pyi @@ -0,0 +1,2 @@ +# DO NOT MODIFY ! This file was automatically generated by tools/update_distutils_stubs.py +from setuptools._distutils.zosccompiler import * From 0f98b7e3dd4872ecde50e867bf23f7d7231bcf7c Mon Sep 17 00:00:00 2001 From: Avasam Date: Thu, 17 Oct 2024 16:38:40 -0400 Subject: [PATCH 2/3] Config and comments changes to use our custom stubs --- mypy.ini | 13 ++++--------- pyproject.toml | 4 ++++ pyrightconfig.json | 2 ++ ruff.toml | 3 +++ setuptools/__init__.py | 7 +------ setuptools/build_meta.py | 4 ++-- setuptools/command/build_ext.py | 2 +- setuptools/command/build_py.py | 4 ++-- setuptools/command/install_lib.py | 7 +++---- setuptools/command/setopt.py | 2 +- setuptools/config/setupcfg.py | 5 ++--- setuptools/dist.py | 2 +- setuptools/errors.py | 8 ++++---- setuptools/extension.py | 7 +------ setuptools/logging.py | 2 +- setuptools/monkey.py | 6 +++--- setuptools/tests/test_build_ext.py | 2 ++ 17 files changed, 37 insertions(+), 43 deletions(-) diff --git a/mypy.ini b/mypy.ini index c1d01a42c3..870745782c 100644 --- a/mypy.ini +++ b/mypy.ini @@ -5,7 +5,7 @@ strict = False # Early opt-in even when strict = False -# warn_unused_ignores = True # Disabled until we have distutils stubs for Python 3.12+ +warn_unused_ignores = True warn_redundant_casts = True enable_error_code = ignore-without-code @@ -18,6 +18,9 @@ disable_error_code = ## local +# Use our custom stubs for distutils +mypy_path = $MYPY_CONFIG_FILE_DIR/typings + # CI should test for all versions, local development gets hints for oldest supported # But our testing setup doesn't allow passing CLI arguments, so local devs have to set this manually. # python_version = 3.9 @@ -48,14 +51,6 @@ disable_error_code = [mypy-pkg_resources.tests.*] disable_error_code = import-not-found -# - distutils doesn't exist on Python 3.12, unfortunately, this means typing -# will be missing for subclasses of distutils on Python 3.12 until either: -# - support for `SETUPTOOLS_USE_DISTUTILS=stdlib` is dropped (#3625) -# for setuptools to import `_distutils` directly -# - or non-stdlib distutils typings are exposed -[mypy-distutils.*] -ignore_missing_imports = True - # - wheel: does not intend on exposing a programmatic API https://github.com/pypa/wheel/pull/610#issuecomment-2081687671 [mypy-wheel.*] follow_untyped_imports = True diff --git a/pyproject.toml b/pyproject.toml index dbb1352013..3a2bc64428 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -132,6 +132,8 @@ type = [ # local + # Referenced in distutils-stubs + "types-docutils", # pin mypy version so a new version doesn't suddenly cause the CI to fail, # until types-setuptools is removed from typeshed. # For help with static-typing issues, or mypy update, ping @Avasam @@ -202,6 +204,8 @@ include-package-data = true include = [ "setuptools*", "pkg_resources*", + # TODO: Include distutils stubs with package once we're confident in them + # "typings/distutils-stubs", "_distutils_hack*", ] exclude = [ diff --git a/pyrightconfig.json b/pyrightconfig.json index da3cd978ce..6123957847 100644 --- a/pyrightconfig.json +++ b/pyrightconfig.json @@ -12,6 +12,8 @@ ], // Our testing setup doesn't allow passing CLI arguments, so local devs have to set this manually. // "pythonVersion": "3.9", + // Allow using distutils-stubs on Python 3.12+ + "reportMissingModuleSource": false, // For now we don't mind if mypy's `type: ignore` comments accidentally suppresses pyright issues "enableTypeIgnoreComments": true, "typeCheckingMode": "basic", diff --git a/ruff.toml b/ruff.toml index 9f20438943..2a3225c9f1 100644 --- a/ruff.toml +++ b/ruff.toml @@ -45,6 +45,9 @@ ignore = [ # Only enforcing return type annotations for public functions "ANN202", # missing-return-type-private-function "ANN204", # missing-return-type-special-method + # Typeshed doesn't want complex or non-literal defaults for maintenance and testing reasons. + # This doesn't affect us, let's have more complete stubs. + "PYI011", # typed-argument-default-in-stub # https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules "W191", diff --git a/setuptools/__init__.py b/setuptools/__init__.py index 4f5c01708a..7f0e00c9f7 100644 --- a/setuptools/__init__.py +++ b/setuptools/__init__.py @@ -1,9 +1,4 @@ """Extensions to the 'distutils' for large or complex distributions""" -# mypy: disable_error_code=override -# Command.reinitialize_command has an extra **kw param that distutils doesn't have -# Can't disable on the exact line because distutils doesn't exists on Python 3.12 -# and mypy isn't aware of distutils_hack, causing distutils.core.Command to be Any, -# and a [unused-ignore] to be raised on 3.12+ from __future__ import annotations @@ -226,7 +221,7 @@ def reinitialize_command( ) -> _Command: cmd = _Command.reinitialize_command(self, command, reinit_subcommands) vars(cmd).update(kw) - return cmd # pyright: ignore[reportReturnType] # pypa/distutils#307 + return cmd @abstractmethod def initialize_options(self) -> None: diff --git a/setuptools/build_meta.py b/setuptools/build_meta.py index 00fa5e1f70..23471accb6 100644 --- a/setuptools/build_meta.py +++ b/setuptools/build_meta.py @@ -91,11 +91,11 @@ def patch(cls): for the duration of this context. """ orig = distutils.core.Distribution - distutils.core.Distribution = cls # type: ignore[misc] # monkeypatching + distutils.core.Distribution = cls try: yield finally: - distutils.core.Distribution = orig # type: ignore[misc] # monkeypatching + distutils.core.Distribution = orig @contextlib.contextmanager diff --git a/setuptools/command/build_ext.py b/setuptools/command/build_ext.py index e5c6b76b38..0e57e9b388 100644 --- a/setuptools/command/build_ext.py +++ b/setuptools/command/build_ext.py @@ -248,7 +248,7 @@ def setup_shlib_compiler(self): compiler.set_link_objects(self.link_objects) # hack so distutils' build_extension() builds a library instead - compiler.link_shared_object = link_shared_object.__get__(compiler) # type: ignore[method-assign] + compiler.link_shared_object = link_shared_object.__get__(compiler) def get_export_symbols(self, ext): if isinstance(ext, Library): diff --git a/setuptools/command/build_py.py b/setuptools/command/build_py.py index e7d60c6440..6ba2d3606f 100644 --- a/setuptools/command/build_py.py +++ b/setuptools/command/build_py.py @@ -48,7 +48,7 @@ def finalize_options(self): if 'data_files' in self.__dict__: del self.__dict__['data_files'] - def copy_file( # type: ignore[override] # No overload, no bytes support + def copy_file( self, infile: StrPath, outfile: StrPathT, @@ -135,7 +135,7 @@ def find_data_files(self, package, src_dir): ) return self.exclude_data_files(package, src_dir, files) - def get_outputs(self, include_bytecode: bool = True) -> list[str]: # type: ignore[override] # Using a real boolean instead of 0|1 + def get_outputs(self, include_bytecode: bool = True) -> list[str]: """See :class:`setuptools.commands.build.SubCommand`""" if self.editable_mode: return list(self.get_output_mapping().keys()) diff --git a/setuptools/command/install_lib.py b/setuptools/command/install_lib.py index 8e1e072710..ef76286d4f 100644 --- a/setuptools/command/install_lib.py +++ b/setuptools/command/install_lib.py @@ -95,10 +95,9 @@ def copy_tree( self, infile: StrPath, outfile: str, - # override: Using actual booleans - preserve_mode: bool = True, # type: ignore[override] - preserve_times: bool = True, # type: ignore[override] - preserve_symlinks: bool = False, # type: ignore[override] + preserve_mode: bool = True, + preserve_times: bool = True, + preserve_symlinks: bool = False, level: object = 1, ) -> list[str]: assert preserve_mode diff --git a/setuptools/command/setopt.py b/setuptools/command/setopt.py index 200cdff0f7..3eec9e4894 100644 --- a/setuptools/command/setopt.py +++ b/setuptools/command/setopt.py @@ -37,7 +37,7 @@ def edit_config(filename, settings, dry_run=False): """ log.debug("Reading configuration from %s", filename) opts = configparser.RawConfigParser() - opts.optionxform = lambda optionstr: optionstr # type: ignore[method-assign] # overriding method + opts.optionxform = lambda optionstr: optionstr _cfg_read_utf8_with_fallback(opts, filename) for section, options in settings.items(): diff --git a/setuptools/config/setupcfg.py b/setuptools/config/setupcfg.py index b35d0b00cd..5707ff19b2 100644 --- a/setuptools/config/setupcfg.py +++ b/setuptools/config/setupcfg.py @@ -17,7 +17,7 @@ from collections import defaultdict from collections.abc import Iterable, Iterator from functools import partial, wraps -from typing import TYPE_CHECKING, Any, Callable, ClassVar, Generic, TypeVar, cast +from typing import TYPE_CHECKING, Any, Callable, ClassVar, Generic, TypeVar from packaging.markers import default_environment as marker_env from packaging.requirements import InvalidRequirement, Requirement @@ -101,8 +101,7 @@ def _apply( filenames = [*other_files, filepath] try: - # TODO: Temporary cast until mypy 1.12 is released with upstream fixes from typeshed - _Distribution.parse_config_files(dist, filenames=cast(list[str], filenames)) + _Distribution.parse_config_files(dist, filenames=filenames) handlers = parse_configuration( dist, dist.command_options, ignore_option_errors=ignore_option_errors ) diff --git a/setuptools/dist.py b/setuptools/dist.py index 5b3175fb5b..996aca2479 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -723,7 +723,7 @@ def fetch_build_egg(self, req): return fetch_build_egg(self, req) - def get_command_class(self, command: str) -> type[distutils.cmd.Command]: # type: ignore[override] # Not doing complex overrides yet + def get_command_class(self, command: str) -> type[distutils.cmd.Command]: """Pluggable version of get_command_class()""" if command in self.cmdclass: return self.cmdclass[command] diff --git a/setuptools/errors.py b/setuptools/errors.py index 990ecbf4e2..61b0a55c72 100644 --- a/setuptools/errors.py +++ b/setuptools/errors.py @@ -30,15 +30,15 @@ BaseError = _distutils_errors.DistutilsError -class InvalidConfigError(OptionError): # type: ignore[valid-type, misc] # distutils imports are `Any` on python 3.12+ +class InvalidConfigError(OptionError): """Error used for invalid configurations.""" -class RemovedConfigError(OptionError): # type: ignore[valid-type, misc] # distutils imports are `Any` on python 3.12+ +class RemovedConfigError(OptionError): """Error used for configurations that were deprecated and removed.""" -class RemovedCommandError(BaseError, RuntimeError): # type: ignore[valid-type, misc] # distutils imports are `Any` on python 3.12+ +class RemovedCommandError(BaseError, RuntimeError): """Error used for commands that have been removed in setuptools. Since ``setuptools`` is built on ``distutils``, simply removing a command @@ -48,7 +48,7 @@ class RemovedCommandError(BaseError, RuntimeError): # type: ignore[valid-type, """ -class PackageDiscoveryError(BaseError, RuntimeError): # type: ignore[valid-type, misc] # distutils imports are `Any` on python 3.12+ +class PackageDiscoveryError(BaseError, RuntimeError): """Impossible to perform automatic discovery of packages and/or modules. The current project layout or given discovery options can lead to problems when diff --git a/setuptools/extension.py b/setuptools/extension.py index 76e03d9d6b..e6acf93c31 100644 --- a/setuptools/extension.py +++ b/setuptools/extension.py @@ -151,12 +151,7 @@ def __init__( # The *args is needed for compatibility as calls may use positional # arguments. py_limited_api may be set only via keyword. self.py_limited_api = py_limited_api - super().__init__( - name, - sources, # type: ignore[arg-type] # Vendored version of setuptools supports PathLike - *args, - **kw, - ) + super().__init__(name, sources, *args, **kw) def _convert_pyx_sources_to_lang(self): """ diff --git a/setuptools/logging.py b/setuptools/logging.py index 532da899f7..7601ded6e8 100644 --- a/setuptools/logging.py +++ b/setuptools/logging.py @@ -32,7 +32,7 @@ def configure() -> None: # and then loaded again when patched, # implying: id(distutils.log) != id(distutils.dist.log). # Make sure the same module object is used everywhere: - distutils.dist.log = distutils.log + distutils.dist.log = distutils.log # type: ignore[assignment] def set_threshold(level: int) -> int: diff --git a/setuptools/monkey.py b/setuptools/monkey.py index d8e30dbb80..07919722b8 100644 --- a/setuptools/monkey.py +++ b/setuptools/monkey.py @@ -73,7 +73,7 @@ def patch_all(): import setuptools # we can't patch distutils.cmd, alas - distutils.core.Command = setuptools.Command # type: ignore[misc,assignment] # monkeypatching + distutils.core.Command = setuptools.Command _patch_distribution_metadata() @@ -82,8 +82,8 @@ def patch_all(): module.Distribution = setuptools.dist.Distribution # Install the patched Extension - distutils.core.Extension = setuptools.extension.Extension # type: ignore[misc,assignment] # monkeypatching - distutils.extension.Extension = setuptools.extension.Extension # type: ignore[misc,assignment] # monkeypatching + distutils.core.Extension = setuptools.extension.Extension + distutils.extension.Extension = setuptools.extension.Extension if 'distutils.command.build_ext' in sys.modules: sys.modules[ 'distutils.command.build_ext' diff --git a/setuptools/tests/test_build_ext.py b/setuptools/tests/test_build_ext.py index d107a272e1..5ce96a66f7 100644 --- a/setuptools/tests/test_build_ext.py +++ b/setuptools/tests/test_build_ext.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import sys from importlib.util import cache_from_source as _compiled_file_name From 76158376a7ccf7216e0862fbceb576fc484920e4 Mon Sep 17 00:00:00 2001 From: Avasam Date: Mon, 24 Feb 2025 00:04:09 -0500 Subject: [PATCH 3/3] Revert unnecessary file change --- setuptools/tests/test_build_ext.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/setuptools/tests/test_build_ext.py b/setuptools/tests/test_build_ext.py index 5ce96a66f7..d107a272e1 100644 --- a/setuptools/tests/test_build_ext.py +++ b/setuptools/tests/test_build_ext.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import os import sys from importlib.util import cache_from_source as _compiled_file_name