From ce78e5f5f8271f60bfd679c22637f4c435456196 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 15:21:41 +0530 Subject: [PATCH 01/12] Allow `Sequence` for `setuptools.Extension` sources --- stubs/setuptools/setuptools/_distutils/extension.pyi | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/stubs/setuptools/setuptools/_distutils/extension.pyi b/stubs/setuptools/setuptools/_distutils/extension.pyi index 789bbf6ec3d1..30b508674ff7 100644 --- a/stubs/setuptools/setuptools/_distutils/extension.pyi +++ b/stubs/setuptools/setuptools/_distutils/extension.pyi @@ -1,6 +1,9 @@ +from _typeshed import StrPath +from collections.abc import Sequence + class Extension: name: str - sources: list[str] + sources: Sequence[StrPath] include_dirs: list[str] define_macros: list[tuple[str, str | None]] undef_macros: list[str] @@ -18,7 +21,7 @@ class Extension: def __init__( self, name: str, - sources: list[str], + sources: Sequence[StrPath], include_dirs: list[str] | None = None, define_macros: list[tuple[str, str | None]] | None = None, undef_macros: list[str] | None = None, From 5e156e3e80c99be2367250ecef135308acccf44b Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 15:21:51 +0530 Subject: [PATCH 02/12] Add some test cases --- stubs/setuptools/@tests/test_cases/check_extension.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 stubs/setuptools/@tests/test_cases/check_extension.py diff --git a/stubs/setuptools/@tests/test_cases/check_extension.py b/stubs/setuptools/@tests/test_cases/check_extension.py new file mode 100644 index 000000000000..95d32ee4d560 --- /dev/null +++ b/stubs/setuptools/@tests/test_cases/check_extension.py @@ -0,0 +1,8 @@ +from pathlib import Path + +from setuptools import Extension + +# Dummy extensions +ext1 = Extension(name="test1", sources=["file1.c", "file2.c"]) # list of str(s) +ext2 = Extension(name="test2", sources=[Path("file1.c"), Path("file2.c")]) # list of Path(s) +ext3 = Extension(name="test3", sources=[Path("file1.c"), "file2.c"]) # mixed str(s) and Path(s) From 88f1ad07df9baed6a6319c7a2b4d9ea88d030e74 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 16:20:58 +0530 Subject: [PATCH 03/12] Stick to `list[StrPath]` for `mypy_primer` checks --- stubs/setuptools/setuptools/_distutils/extension.pyi | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/stubs/setuptools/setuptools/_distutils/extension.pyi b/stubs/setuptools/setuptools/_distutils/extension.pyi index 30b508674ff7..bca3b09f4a61 100644 --- a/stubs/setuptools/setuptools/_distutils/extension.pyi +++ b/stubs/setuptools/setuptools/_distutils/extension.pyi @@ -1,9 +1,8 @@ from _typeshed import StrPath -from collections.abc import Sequence class Extension: name: str - sources: Sequence[StrPath] + sources: list[StrPath] include_dirs: list[str] define_macros: list[tuple[str, str | None]] undef_macros: list[str] @@ -21,7 +20,7 @@ class Extension: def __init__( self, name: str, - sources: Sequence[StrPath], + sources: list[StrPath], include_dirs: list[str] | None = None, define_macros: list[tuple[str, str | None]] | None = None, undef_macros: list[str] | None = None, From 13a04e1c299ca829f8f18ffce72b1e47df427189 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 16:30:49 +0530 Subject: [PATCH 04/12] Accept both `list[str]` and `list[StrPath]` --- stubs/setuptools/setuptools/_distutils/extension.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stubs/setuptools/setuptools/_distutils/extension.pyi b/stubs/setuptools/setuptools/_distutils/extension.pyi index bca3b09f4a61..7ac9f13ed07f 100644 --- a/stubs/setuptools/setuptools/_distutils/extension.pyi +++ b/stubs/setuptools/setuptools/_distutils/extension.pyi @@ -2,7 +2,7 @@ from _typeshed import StrPath class Extension: name: str - sources: list[StrPath] + sources: list[str] | list[StrPath] include_dirs: list[str] define_macros: list[tuple[str, str | None]] undef_macros: list[str] @@ -20,7 +20,7 @@ class Extension: def __init__( self, name: str, - sources: list[StrPath], + sources: list[str] | list[StrPath], include_dirs: list[str] | None = None, define_macros: list[tuple[str, str | None]] | None = None, undef_macros: list[str] | None = None, From 7932a4e8c775ffa9d72e05dd8eda13b1892885ea Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 17:13:50 +0530 Subject: [PATCH 05/12] Update `CCompiler.compile()` `sources` to allow `list[StrPath]` --- stubs/setuptools/setuptools/_distutils/ccompiler.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/setuptools/setuptools/_distutils/ccompiler.pyi b/stubs/setuptools/setuptools/_distutils/ccompiler.pyi index 2f6521aafe06..0700aa820ab3 100644 --- a/stubs/setuptools/setuptools/_distutils/ccompiler.pyi +++ b/stubs/setuptools/setuptools/_distutils/ccompiler.pyi @@ -67,7 +67,7 @@ class CCompiler: def set_executables(self, **args: str) -> None: ... def compile( self, - sources: list[str], + sources: list[str] | list[StrPath], output_dir: str | None = None, macros: list[_Macro] | None = None, include_dirs: list[str] | None = None, From 47e149ca611b70918811abef61a39df748ea14e0 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 18:08:56 +0530 Subject: [PATCH 06/12] Add a few tests for `CCompiler().compile` --- .../@tests/test_cases/check_distutils.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/stubs/setuptools/@tests/test_cases/check_distutils.py b/stubs/setuptools/@tests/test_cases/check_distutils.py index 78777f5888a2..268cd11b2ce2 100644 --- a/stubs/setuptools/@tests/test_cases/check_distutils.py +++ b/stubs/setuptools/@tests/test_cases/check_distutils.py @@ -1,3 +1,21 @@ +from __future__ import annotations + import distutils.command.sdist +from _typeshed import StrPath +from pathlib import Path +from typing import List + +from setuptools._distutils.ccompiler import CCompiler c = distutils.command.sdist.sdist + +# Test CCompiler().compile with varied sources + +compiler = CCompiler() +compiler.compile(sources=["file1.c", "file2.c"]) + +paths: List[StrPath] = [Path("file1.c"), Path("file2.c")] +compiler.compile(sources=paths) + +mixed: List[StrPath] = [Path("file1.c"), "file2.c"] +compiler.compile(sources=mixed) From 97c456c919119ab27e408ba3291c8dacef4a2076 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 23:36:34 +0530 Subject: [PATCH 07/12] Code review: `distutils` can use `Sequence[StrPath]` Co-Authored-By: Avasam --- stdlib/distutils/ccompiler.pyi | 4 ++-- stubs/setuptools/setuptools/_distutils/ccompiler.pyi | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/stdlib/distutils/ccompiler.pyi b/stdlib/distutils/ccompiler.pyi index e0f33f430e5a..56617d8a7b8d 100644 --- a/stdlib/distutils/ccompiler.pyi +++ b/stdlib/distutils/ccompiler.pyi @@ -1,5 +1,5 @@ from _typeshed import BytesPath, StrPath, Unused -from collections.abc import Callable, Iterable +from collections.abc import Callable, Iterable, Sequence from distutils.file_util import _BytesPathT, _StrPathT from typing import Literal, overload from typing_extensions import TypeAlias, TypeVarTuple, Unpack @@ -63,7 +63,7 @@ class CCompiler: def set_executables(self, **args: str) -> None: ... def compile( self, - sources: list[str], + sources: Sequence[StrPath], output_dir: str | None = None, macros: list[_Macro] | None = None, include_dirs: list[str] | None = None, diff --git a/stubs/setuptools/setuptools/_distutils/ccompiler.pyi b/stubs/setuptools/setuptools/_distutils/ccompiler.pyi index 0700aa820ab3..b0de290333e7 100644 --- a/stubs/setuptools/setuptools/_distutils/ccompiler.pyi +++ b/stubs/setuptools/setuptools/_distutils/ccompiler.pyi @@ -1,5 +1,5 @@ from _typeshed import BytesPath, StrPath, Unused -from collections.abc import Callable, Iterable +from collections.abc import Callable, Iterable, Sequence from typing import ClassVar, Literal, TypeVar, overload from typing_extensions import TypeAlias, TypeVarTuple, Unpack @@ -67,7 +67,7 @@ class CCompiler: def set_executables(self, **args: str) -> None: ... def compile( self, - sources: list[str] | list[StrPath], + sources: Sequence[StrPath], output_dir: str | None = None, macros: list[_Macro] | None = None, include_dirs: list[str] | None = None, From 477ae2aaaa3420381ff8687b07b0f597da5fa11a Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 23:48:50 +0530 Subject: [PATCH 08/12] Code review: accept all path-related args (for now) Co-Authored-By: Avasam --- stubs/setuptools/setuptools/_distutils/extension.pyi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stubs/setuptools/setuptools/_distutils/extension.pyi b/stubs/setuptools/setuptools/_distutils/extension.pyi index 7ac9f13ed07f..970c70a64437 100644 --- a/stubs/setuptools/setuptools/_distutils/extension.pyi +++ b/stubs/setuptools/setuptools/_distutils/extension.pyi @@ -1,4 +1,6 @@ from _typeshed import StrPath +from os import PathLike +from pathlib import Path class Extension: name: str @@ -20,7 +22,7 @@ class Extension: def __init__( self, name: str, - sources: list[str] | list[StrPath], + sources: list[str] | list[PathLike[str]] | list[Path] | list[StrPath], include_dirs: list[str] | None = None, define_macros: list[tuple[str, str | None]] | None = None, undef_macros: list[str] | None = None, From 4a9141a9dd4c8064eec01a12a4bc28632be1dea3 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Wed, 6 Nov 2024 23:53:36 +0530 Subject: [PATCH 09/12] Experiment with more combined types --- .../@tests/test_cases/check_distutils.py | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/stubs/setuptools/@tests/test_cases/check_distutils.py b/stubs/setuptools/@tests/test_cases/check_distutils.py index 268cd11b2ce2..cbd3e645c545 100644 --- a/stubs/setuptools/@tests/test_cases/check_distutils.py +++ b/stubs/setuptools/@tests/test_cases/check_distutils.py @@ -2,8 +2,8 @@ import distutils.command.sdist from _typeshed import StrPath +from os import PathLike from pathlib import Path -from typing import List from setuptools._distutils.ccompiler import CCompiler @@ -12,10 +12,20 @@ # Test CCompiler().compile with varied sources compiler = CCompiler() -compiler.compile(sources=["file1.c", "file2.c"]) -paths: List[StrPath] = [Path("file1.c"), Path("file2.c")] -compiler.compile(sources=paths) +str_list: list[str] = ["file1.c", "file2.c"] +compiler.compile(sources=str_list) + +path_list: list[Path] = [Path("file1.c"), Path("file2.c")] +compiler.compile(sources=path_list) + +pathlike_list: list[PathLike[str]] = [Path("file1.c"), Path("file2.c")] +compiler.compile(sources=pathlike_list) -mixed: List[StrPath] = [Path("file1.c"), "file2.c"] -compiler.compile(sources=mixed) +strpath_list: list[StrPath] = [Path("file1.c"), "file2.c"] +compiler.compile(sources=strpath_list) + +# Direct literals should also work +compiler.compile(sources=["file1.c", "file2.c"]) +compiler.compile(sources=[Path("file1.c"), Path("file2.c")]) +compiler.compile(sources=[Path("file1.c"), "file2.c"]) From f37183626dccd2a7e5a530652e464215283f9f9f Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Thu, 7 Nov 2024 00:01:23 +0530 Subject: [PATCH 10/12] Loosen `setuptools`'s sources arguments, update test --- .../setuptools/@tests/test_cases/check_extension.py | 13 ++++++++++--- stubs/setuptools/setuptools/extension.pyi | 4 +++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/stubs/setuptools/@tests/test_cases/check_extension.py b/stubs/setuptools/@tests/test_cases/check_extension.py index 95d32ee4d560..c798d4eb98ad 100644 --- a/stubs/setuptools/@tests/test_cases/check_extension.py +++ b/stubs/setuptools/@tests/test_cases/check_extension.py @@ -1,8 +1,15 @@ +from __future__ import annotations + +from os import PathLike from pathlib import Path from setuptools import Extension # Dummy extensions -ext1 = Extension(name="test1", sources=["file1.c", "file2.c"]) # list of str(s) -ext2 = Extension(name="test2", sources=[Path("file1.c"), Path("file2.c")]) # list of Path(s) -ext3 = Extension(name="test3", sources=[Path("file1.c"), "file2.c"]) # mixed str(s) and Path(s) +ext1 = Extension(name="test1", sources=["file1.c", "file2.c"]) # plain list[str] works + +path_sources: list[Path] = [Path("file1.c"), Path("file2.c")] +ext2 = Extension(name="test2", sources=path_sources) # list of Path(s) + +mixed_sources: list[str | PathLike[str]] = [Path("file1.c"), "file2.c"] # or list[StrPath] +ext3 = Extension(name="test3", sources=mixed_sources) # mixed types diff --git a/stubs/setuptools/setuptools/extension.pyi b/stubs/setuptools/setuptools/extension.pyi index ff352d3dc6c6..300a51b6a7b0 100644 --- a/stubs/setuptools/setuptools/extension.pyi +++ b/stubs/setuptools/setuptools/extension.pyi @@ -1,4 +1,6 @@ from _typeshed import StrPath +from os import PathLike +from pathlib import Path from ._distutils.extension import Extension as _Extension @@ -9,7 +11,7 @@ class Extension(_Extension): def __init__( self, name: str, - sources: list[StrPath], + sources: list[str] | list[PathLike[str]] | list[Path] | list[StrPath], include_dirs: list[str] | None = None, define_macros: list[tuple[str, str | None]] | None = None, undef_macros: list[str] | None = None, From b83d11e0d74681a9dddb81778e74c6b1a8ae8b8f Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Thu, 7 Nov 2024 00:48:36 +0530 Subject: [PATCH 11/12] Coherent hints for Extension class def and `__init__` --- stubs/setuptools/setuptools/_distutils/extension.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/setuptools/setuptools/_distutils/extension.pyi b/stubs/setuptools/setuptools/_distutils/extension.pyi index 970c70a64437..c349cf689161 100644 --- a/stubs/setuptools/setuptools/_distutils/extension.pyi +++ b/stubs/setuptools/setuptools/_distutils/extension.pyi @@ -4,7 +4,7 @@ from pathlib import Path class Extension: name: str - sources: list[str] | list[StrPath] + sources: list[str] | list[PathLike[str]] | list[Path] | list[StrPath] include_dirs: list[str] define_macros: list[tuple[str, str | None]] undef_macros: list[str] From ceaf190b24059e76bfa1245f06019c29d39225ab Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Thu, 7 Nov 2024 01:09:07 +0530 Subject: [PATCH 12/12] Revert "Coherent hints for Extension class def and `__init__`" This reverts commit b83d11e0d74681a9dddb81778e74c6b1a8ae8b8f. --- stubs/setuptools/setuptools/_distutils/extension.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/setuptools/setuptools/_distutils/extension.pyi b/stubs/setuptools/setuptools/_distutils/extension.pyi index c349cf689161..970c70a64437 100644 --- a/stubs/setuptools/setuptools/_distutils/extension.pyi +++ b/stubs/setuptools/setuptools/_distutils/extension.pyi @@ -4,7 +4,7 @@ from pathlib import Path class Extension: name: str - sources: list[str] | list[PathLike[str]] | list[Path] | list[StrPath] + sources: list[str] | list[StrPath] include_dirs: list[str] define_macros: list[tuple[str, str | None]] undef_macros: list[str]