Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@
('py:class', 'OptionDummy'), # undocumented
('py:class', 'setuptools.dist.Distribution'), # undocumented
('py:class', 'UnixCCompiler'), # undocumented
('py:class', 'StrPath'), # type import
('py:exc', 'CompileError'), # undocumented
('py:exc', 'DistutilsExecError'), # undocumented
('py:exc', 'DistutilsFileError'), # undocumented
Expand Down
12 changes: 9 additions & 3 deletions ruff.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ extend-select = [
"TRY", # tryceratops
"UP", # pyupgrade
"YTT", # flake8-2020
# Helps prevent circular imports, reduce runtime cost of typing symbols,
# and prevent leaking implementations details into modules
"TC", # flake8-type-checking
]
ignore = [
# upstream
Expand Down Expand Up @@ -67,14 +70,14 @@ ignore = [
"UP015", # redundant-open-modes, explicit is preferred
# Only enforcing return type annotations for public functions
"ANN202", # missing-return-type-private-function
# stdlib is not at risk of circular import, is clearly not public API,
# and assume it's gonna be included in the import chain at some point anyway
"TC003", # typing-only-standard-library-import
]

[lint.per-file-ignores]
# Suppress nuisance warnings about module-import-not-at-top-of-file (E402) due to workaround for #4476
"setuptools/__init__.py" = ["E402"]
# pkg_resources is due for removal, not worth fixing existing errors
"pkg_resources/__init__.py" = ["E402", "ANN204"]
"pkg_resources/tests/test_resources.py" = ["PT031"]

[lint.isort]
combine-as-imports = true
Expand All @@ -89,6 +92,9 @@ sections.delayed = ["distutils"]
[lint.flake8-annotations]
ignore-fully-untyped = true

[lint.flake8-type-checking]
quote-annotations = true

[format]
# Enable preview to get hugged parenthesis unwrapping and other nice surprises
# See https://github.com/jaraco/skeleton/pull/133#issuecomment-2239538373
Expand Down
6 changes: 4 additions & 2 deletions setuptools/command/_requirestxt.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@
from collections import defaultdict
from collections.abc import Mapping
from itertools import filterfalse
from typing import TypeVar
from typing import TYPE_CHECKING, TypeVar

from jaraco.text import yield_lines
from packaging.requirements import Requirement

from .. import _reqs
from .._reqs import _StrOrIter

if TYPE_CHECKING:
from .._reqs import _StrOrIter

# dict can work as an ordered set
_T = TypeVar("_T")
Expand Down
8 changes: 7 additions & 1 deletion setuptools/command/bdist_rpm.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
from ..dist import Distribution
from __future__ import annotations

from typing import TYPE_CHECKING

from ..warnings import SetuptoolsDeprecationWarning

import distutils.command.bdist_rpm as orig

if TYPE_CHECKING:
from ..dist import Distribution


class bdist_rpm(orig.bdist_rpm):
"""
Expand Down
12 changes: 8 additions & 4 deletions setuptools/command/bdist_wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from collections.abc import Iterable, Sequence
from email.generator import BytesGenerator
from glob import iglob
from typing import Literal, cast
from typing import TYPE_CHECKING, Literal, cast
from zipfile import ZIP_DEFLATED, ZIP_STORED

from packaging import tags, version as _packaging_version
Expand All @@ -26,10 +26,12 @@
from .._core_metadata import _safe_license_file
from .._normalization import safer_name
from ..warnings import SetuptoolsDeprecationWarning
from .egg_info import egg_info as egg_info_cls

from distutils import log

if TYPE_CHECKING:
from .egg_info import egg_info as egg_info_cls


def safe_version(version: str) -> str:
"""
Expand Down Expand Up @@ -233,7 +235,9 @@ def finalize_options(self) -> None:
self.bdist_dir = os.path.join(bdist_base, "wheel")

if self.dist_info_dir is None:
egg_info = cast(egg_info_cls, self.distribution.get_command_obj("egg_info"))
egg_info = cast(
"egg_info_cls", self.distribution.get_command_obj("egg_info")
)
egg_info.ensure_finalized() # needed for correct `wheel_dist_name`

self.data_dir = self.wheel_dist_name + ".data"
Expand Down Expand Up @@ -492,7 +496,7 @@ def license_paths(self) -> Iterable[str]:
metadata = self.distribution.get_option_dict("metadata")
if setuptools_major_version >= 42:
# Setuptools recognizes the license_files option but does not do globbing
patterns = cast(Sequence[str], self.distribution.metadata.license_files)
patterns = cast("Sequence[str]", self.distribution.metadata.license_files)
else:
# Prior to those, wheel is entirely responsible for handling license files
if "license_files" in metadata:
Expand Down
7 changes: 4 additions & 3 deletions setuptools/command/build.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from __future__ import annotations

from typing import Protocol

from ..dist import Distribution
from typing import TYPE_CHECKING, Protocol

from distutils.command.build import build as _build

if TYPE_CHECKING:
from ..dist import Distribution

_ORIGINAL_SUBCOMMANDS = {"build_py", "build_clib", "build_ext", "build_scripts"}


Expand Down
8 changes: 7 additions & 1 deletion setuptools/command/build_clib.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
from ..dist import Distribution
from __future__ import annotations

from typing import TYPE_CHECKING

from ..modified import newer_pairwise_group

import distutils.command.build_clib as orig
from distutils import log
from distutils.errors import DistutilsSetupError

if TYPE_CHECKING:
from ..dist import Distribution


class build_clib(orig.build_clib):
"""
Expand Down
3 changes: 2 additions & 1 deletion setuptools/command/build_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
from pathlib import Path
from typing import TYPE_CHECKING

from setuptools.dist import Distribution
from setuptools.errors import BaseError
from setuptools.extension import Extension, Library

Expand All @@ -20,6 +19,8 @@
from distutils.sysconfig import customize_compiler, get_config_var

if TYPE_CHECKING:
from setuptools.dist import Distribution

# Cython not installed on CI tests, causing _build_ext to be `Any`
from distutils.command.build_ext import build_ext as _build_ext
else:
Expand Down
8 changes: 5 additions & 3 deletions setuptools/command/build_py.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,20 @@
from functools import partial
from glob import glob
from pathlib import Path
from typing import Any
from typing import TYPE_CHECKING, Any

from more_itertools import unique_everseen

from .._path import StrPath, StrPathT
from ..dist import Distribution
from ..warnings import SetuptoolsDeprecationWarning

import distutils.command.build_py as orig
import distutils.errors
from distutils.util import convert_path

if TYPE_CHECKING:
from .._path import StrPath, StrPathT
from ..dist import Distribution

_IMPLICIT_DATA_FILES = ('*.pyi', 'py.typed')


Expand Down
2 changes: 1 addition & 1 deletion setuptools/command/develop.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class develop(Command):
def run(self) -> None:
# Casting because mypy doesn't understand bool mult conditionals
cmd = cast(
list[str],
"list[str]",
[sys.executable, '-m', 'pip', 'install', '-e', '.', '--use-pep517']
+ ['--target', self.install_dir] * bool(self.install_dir)
+ ['--no-deps'] * self.no_deps
Expand Down
8 changes: 5 additions & 3 deletions setuptools/command/dist_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,17 @@
import shutil
from contextlib import contextmanager
from pathlib import Path
from typing import cast
from typing import TYPE_CHECKING, cast

from .. import _normalization
from .._shutil import rmdir as _rm
from .egg_info import egg_info as egg_info_cls

from distutils import log
from distutils.core import Command

if TYPE_CHECKING:
from .egg_info import egg_info as egg_info_cls


class dist_info(Command):
"""
Expand Down Expand Up @@ -54,7 +56,7 @@ def finalize_options(self) -> None:
project_dir = dist.src_root or os.curdir
self.output_dir = Path(self.output_dir or project_dir)

egg_info = cast(egg_info_cls, self.reinitialize_command("egg_info"))
egg_info = cast("egg_info_cls", self.reinitialize_command("egg_info"))
egg_info.egg_base = str(self.output_dir)

if self.tag_date:
Expand Down
30 changes: 16 additions & 14 deletions setuptools/command/editable_wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,24 +29,25 @@
from typing import TYPE_CHECKING, Protocol, TypeVar, cast

from .. import Command, _normalization, _path, _shutil, errors, namespaces
from .._path import StrPath
from ..compat import py310, py312
from ..discovery import find_package_path
from ..dist import Distribution
from ..warnings import InformationOnly, SetuptoolsDeprecationWarning
from .build import build as build_cls
from .build_py import build_py as build_py_cls
from .dist_info import dist_info as dist_info_cls
from .egg_info import egg_info as egg_info_cls
from .install import install as install_cls
from .install_scripts import install_scripts as install_scripts_cls

if TYPE_CHECKING:
from typing_extensions import Self

from .._path import StrPath
from .._vendor.wheel.wheelfile import WheelFile
from ..dist import Distribution
from .build import build as build_cls
from .dist_info import dist_info as dist_info_cls
from .egg_info import egg_info as egg_info_cls
from .install import install as install_cls
from .install_scripts import install_scripts as install_scripts_cls

_P = TypeVar("_P", bound=StrPath)

_P = TypeVar("_P", bound=StrPath)
_logger = logging.getLogger(__name__)


Expand Down Expand Up @@ -150,7 +151,7 @@ def run(self) -> None:

def _ensure_dist_info(self):
if self.dist_info_dir is None:
dist_info = cast(dist_info_cls, self.reinitialize_command("dist_info"))
dist_info = cast("dist_info_cls", self.reinitialize_command("dist_info"))
dist_info.output_dir = self.dist_dir
dist_info.ensure_finalized()
dist_info.run()
Expand Down Expand Up @@ -198,16 +199,17 @@ def _configure_build(

# egg-info may be generated again to create a manifest (used for package data)
egg_info = cast(
egg_info_cls, dist.reinitialize_command("egg_info", reinit_subcommands=True)
"egg_info_cls",
dist.reinitialize_command("egg_info", reinit_subcommands=True),
)
egg_info.egg_base = str(tmp_dir)
egg_info.ignore_egg_info_in_manifest = True

build = cast(
build_cls, dist.reinitialize_command("build", reinit_subcommands=True)
"build_cls", dist.reinitialize_command("build", reinit_subcommands=True)
)
install = cast(
install_cls, dist.reinitialize_command("install", reinit_subcommands=True)
"install_cls", dist.reinitialize_command("install", reinit_subcommands=True)
)

build.build_platlib = build.build_purelib = build.build_lib = build_lib
Expand All @@ -222,13 +224,13 @@ def _configure_build(
build_scripts.executable = 'python'

install_scripts = cast(
install_scripts_cls, dist.get_command_obj("install_scripts")
"install_scripts_cls", dist.get_command_obj("install_scripts")
)
install_scripts.no_ep = True

build.build_temp = str(tmp_dir)

build_py = cast(build_py_cls, dist.get_command_obj("build_py"))
build_py = cast("build_py_cls", dist.get_command_obj("build_py"))
build_py.compile = False
build_py.existing_egg_info_dir = self._find_egg_info_dir()

Expand Down
6 changes: 1 addition & 5 deletions setuptools/command/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,13 @@
from collections.abc import Callable
from typing import TYPE_CHECKING, Any, ClassVar

from ..dist import Distribution
from ..warnings import SetuptoolsDeprecationWarning, SetuptoolsWarning

import distutils.command.install as orig
from distutils.errors import DistutilsArgError

if TYPE_CHECKING:
# This is only used for a type-cast, don't import at runtime or it'll cause deprecation warnings
from .easy_install import easy_install as easy_install_cls
else:
easy_install_cls = None
from ..dist import Distribution


def __getattr__(name: str): # pragma: no cover
Expand Down
8 changes: 5 additions & 3 deletions setuptools/command/install_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import os
import sys
from itertools import product, starmap

from .._path import StrPath
from ..dist import Distribution
from typing import TYPE_CHECKING

import distutils.command.install_lib as orig

if TYPE_CHECKING:
from .._path import StrPath
from ..dist import Distribution


class install_lib(orig.install_lib):
"""Don't add compiled flags to filenames of non-Python files"""
Expand Down
5 changes: 4 additions & 1 deletion setuptools/command/install_scripts.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@

import os
import sys
from typing import TYPE_CHECKING

from .._path import ensure_directory
from ..dist import Distribution

import distutils.command.install_scripts as orig
from distutils import log

if TYPE_CHECKING:
from ..dist import Distribution


class install_scripts(orig.install_scripts):
"""Do normal script install, plus any egg_info wrapper scripts"""
Expand Down
6 changes: 4 additions & 2 deletions setuptools/command/sdist.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@
import re
from collections.abc import Iterator
from itertools import chain
from typing import ClassVar
from typing import TYPE_CHECKING, ClassVar

from .._importlib import metadata
from ..dist import Distribution
from .build import _ORIGINAL_SUBCOMMANDS

import distutils.command.sdist as orig
from distutils import log

if TYPE_CHECKING:
from ..dist import Distribution

_default_revctrl = list


Expand Down
2 changes: 1 addition & 1 deletion setuptools/config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def _wrapper(*args, **kwargs):
)
return fn(*args, **kwargs)

return cast(Fn, _wrapper)
return cast("Fn", _wrapper)


read_configuration = _deprecation_notice(setupcfg.read_configuration)
Expand Down
Loading
Loading