Skip to content

Commit

Permalink
Disallow blanket suppressions
Browse files Browse the repository at this point in the history
  • Loading branch information
Avasam committed Jul 30, 2024
1 parent 3595113 commit 94d4d75
Show file tree
Hide file tree
Showing 12 changed files with 31 additions and 22 deletions.
4 changes: 3 additions & 1 deletion mypy.ini
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ exclude = (?x)(
)
# Too many false-positives
disable_error_code = overload-overlap
enable_error_code = ignore-without-code

# Ignoring attr-defined because setuptools wraps a lot of distutils classes, adding new attributes,
# w/o updating all the attributes and return types from the base classes for type-checkers to understand
Expand All @@ -35,7 +36,8 @@ disable_error_code = import-not-found
# - All jaraco modules are still untyped
# - _validate_project sometimes complains about trove_classifiers (#4296)
# - wheel appears to be untyped
[mypy-distutils._modified,jaraco.*,trove_classifiers,wheel.*]
# - _aix_support is untyped
[mypy-distutils._modified,jaraco.*,trove_classifiers,wheel.*,_aix_support]
ignore_missing_imports = True

# Even when excluding a module, import issues can show up due to following import
Expand Down
2 changes: 1 addition & 1 deletion pkg_resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2767,7 +2767,7 @@ def load(
if require:
# We could pass `env` and `installer` directly,
# but keeping `*args` and `**kwargs` for backwards compatibility
self.require(*args, **kwargs) # type: ignore
self.require(*args, **kwargs) # type: ignore[arg-type]
return self.resolve()

def resolve(self) -> _ResolvedEntryPoint:
Expand Down
2 changes: 2 additions & 0 deletions ruff.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ extend-select = [
"UP", # pyupgrade
"TRY",
"YTT", # flake8-2020
"PGH", # pygrep-hooks (blanket-* rules)
"RUF100", # unused-noqa
]
ignore = [
"TRY003", # raise-vanilla-args, avoid multitude of exception classes
Expand Down
2 changes: 1 addition & 1 deletion setuptools/_distutils/compat/py38.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def removeprefix(self, prefix):

def aix_platform(osname, version, release):
try:
import _aix_support # type: ignore
import _aix_support

return _aix_support.aix_platform()
except ImportError:
Expand Down
2 changes: 1 addition & 1 deletion setuptools/command/build_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
get_config_var("LDSHARED")
# Not publicly exposed in typeshed distutils stubs, but this is done on purpose
# See https://github.com/pypa/setuptools/pull/4228#issuecomment-1959856400
from distutils.sysconfig import _config_vars as _CONFIG_VARS # type: ignore # noqa
from distutils.sysconfig import _config_vars as _CONFIG_VARS # noqa: E402


def _customize_compiler_for_shlib(compiler):
Expand Down
16 changes: 10 additions & 6 deletions setuptools/config/expand.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,8 @@ def _load_spec(spec: ModuleSpec, module_name: str) -> ModuleType:
return sys.modules[name]
module = importlib.util.module_from_spec(spec)
sys.modules[name] = module # cache (it also ensures `==` works on loaded items)
spec.loader.exec_module(module) # type: ignore
assert spec.loader is not None
spec.loader.exec_module(module)
return module


Expand Down Expand Up @@ -290,10 +291,10 @@ def find_packages(
from setuptools.discovery import construct_package_dir
from more_itertools import unique_everseen, always_iterable

if namespaces:
from setuptools.discovery import PEP420PackageFinder as PackageFinder
if not namespaces:
from setuptools.discovery import PackageFinder
else:
from setuptools.discovery import PackageFinder # type: ignore
from setuptools.discovery import PEP420PackageFinder as PackageFinder

root_dir = root_dir or os.curdir
where = kwargs.pop('where', ['.'])
Expand Down Expand Up @@ -357,14 +358,17 @@ def canonic_data_files(
]


def entry_points(text: str, text_source="entry-points") -> dict[str, dict]:
def entry_points(
text: str, text_source: str = "entry-points"
) -> dict[str, dict[str, str]]:
"""Given the contents of entry-points file,
process it into a 2-level dictionary (``dict[str, dict[str, str]]``).
The first level keys are entry-point groups, the second level keys are
entry-point names, and the second level values are references to objects
(that correspond to the entry-point value).
"""
parser = ConfigParser(default_section=None, delimiters=("=",)) # type: ignore
# TODO: Explain why passing None is fine here when ConfigParser.default_section expects to be str
parser = ConfigParser(default_section=None, delimiters=("=",)) # type: ignore[call-overload]
parser.optionxform = str # case sensitive
parser.read_string(text, text_source)
groups = {k: dict(v.items()) for k, v in parser.items()}
Expand Down
9 changes: 5 additions & 4 deletions setuptools/config/pyprojecttoml.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ def validate(config: dict, filepath: StrPath) -> bool:

trove_classifier = validator.FORMAT_FUNCTIONS.get("trove-classifier")
if hasattr(trove_classifier, "_disable_download"):
# Improve reproducibility by default. See issue 31 for validate-pyproject.
trove_classifier._disable_download() # type: ignore
# Improve reproducibility by default. See https://github.com/abravalheri/validate-pyproject/issues/31
trove_classifier._disable_download() # type: ignore[union-attr]

try:
return validator.validate(config)
Expand Down Expand Up @@ -322,7 +322,7 @@ def _obtain_readme(self, dist: Distribution) -> dict[str, str] | None:

def _obtain_entry_points(
self, dist: Distribution, package_dir: Mapping[str, str]
) -> dict[str, dict] | None:
) -> dict[str, dict[str, Any]] | None:
fields = ("entry-points", "scripts", "gui-scripts")
if not any(field in self.dynamic for field in fields):
return None
Expand All @@ -332,7 +332,8 @@ def _obtain_entry_points(
return None

groups = _expand.entry_points(text)
expanded = {"entry-points": groups}
# Any is str | dict[str, str], but causes variance issues
expanded: dict[str, dict[str, Any]] = {"entry-points": groups}

def _set_scripts(field: str, group: str):
if group in groups:
Expand Down
2 changes: 1 addition & 1 deletion setuptools/dist.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

from . import _entry_points
from . import _reqs
from . import command as _ # noqa -- imported for side-effects
from . import command as _ # noqa: F401 -- imported for side-effects
from ._importlib import metadata
from .config import setupcfg, pyprojecttoml
from .discovery import ConfigDiscovery
Expand Down
2 changes: 1 addition & 1 deletion setuptools/tests/config/test_apply_pyprojecttoml.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

from packaging.metadata import Metadata

import setuptools # noqa ensure monkey patch to metadata
import setuptools # noqa: F401 -- ensure monkey patch to metadata
from setuptools.dist import Distribution
from setuptools.config import setupcfg, pyprojecttoml
from setuptools.config import expand
Expand Down
2 changes: 1 addition & 1 deletion setuptools/tests/config/test_pyprojecttoml.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from setuptools.errors import OptionError


import setuptools # noqa -- force distutils.core to be patched
import setuptools # noqa: F401 -- force distutils.core to be patched
import distutils.core

EXAMPLE = """
Expand Down
2 changes: 1 addition & 1 deletion setuptools/tests/test_config_discovery.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from setuptools.discovery import find_package_path, find_parent_package
from setuptools.errors import PackageDiscoveryError

import setuptools # noqa -- force distutils.core to be patched
import setuptools # noqa: F401 -- force distutils.core to be patched
import distutils.core

import pytest
Expand Down
8 changes: 4 additions & 4 deletions setuptools/tests/test_editable_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -878,18 +878,18 @@ class TestOverallBehaviour:
"otherfile.py": "",
"mypkg": {
"__init__.py": "",
"mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"], # type: ignore
"mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"], # type: ignore[index]
},
"other": FLAT_LAYOUT["mypkg"]["subpackage"], # type: ignore
"other": FLAT_LAYOUT["mypkg"]["subpackage"], # type: ignore[index]
},
"namespace": {
"pyproject.toml": dedent(PYPROJECT),
"MANIFEST.in": EXAMPLE["MANIFEST.in"],
"otherfile.py": "",
"src": {
"mypkg": {
"mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"], # type: ignore
"subpackage": FLAT_LAYOUT["mypkg"]["subpackage"], # type: ignore
"mod1.py": FLAT_LAYOUT["mypkg"]["mod1.py"], # type: ignore[index]
"subpackage": FLAT_LAYOUT["mypkg"]["subpackage"], # type: ignore[index]
},
},
},
Expand Down

0 comments on commit 94d4d75

Please sign in to comment.