From 603a7b5bded9d0c3f5063a6f03f668dcd345bab8 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Tue, 26 Oct 2021 15:56:35 -0400 Subject: [PATCH] style(types): use new bracex static typing support (#887) * style(types): use new bracex static typing support * style(types): add a bit more basic typing * style(types): globally ignore ghapi * style(types): include a bit more in the global ignores * fix(types): line invalid on Python 3.6 * fix: require typing_extensions 3.10 --- .pre-commit-config.yaml | 5 ++++- bin/inspect_all_known_projects.py | 2 +- cibuildwheel/__main__.py | 2 +- cibuildwheel/linux.py | 7 +++---- cibuildwheel/util.py | 16 ++++++++-------- pyproject.toml | 7 +++---- setup.cfg | 2 +- 7 files changed, 21 insertions(+), 20 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2a403cae..f8bd6a3c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -55,7 +55,9 @@ repos: exclude: ^(bin|cibuildwheel/resources|docs)/.*py$ args: ["--python-version=3.6", "--scripts-are-modules", "--show-error-codes"] additional_dependencies: &mypy-dependencies + - nox - packaging>=21.0 + - pygithub - rich - tomli - types-certifi @@ -64,9 +66,10 @@ repos: - types-jinja2 - types-pyyaml - types-requests + - bracex - id: mypy name: mypy 3.7+ on bin/ - files: ^((bin|docs)/.*py|noxfile.py)$ + files: ^((bin|docs)/.*py)$ args: ["--python-version=3.7", "--scripts-are-modules", "--show-error-codes"] additional_dependencies: *mypy-dependencies diff --git a/bin/inspect_all_known_projects.py b/bin/inspect_all_known_projects.py index ccbc9404..542e42b8 100755 --- a/bin/inspect_all_known_projects.py +++ b/bin/inspect_all_known_projects.py @@ -7,7 +7,7 @@ from typing import Iterator import click import yaml -from ghapi.core import GhApi, HTTP404NotFoundError # type: ignore[import] +from ghapi.core import GhApi, HTTP404NotFoundError from rich import print from cibuildwheel.projectfiles import Analyzer diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index a04d3e82..9c1af0f1 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -163,7 +163,7 @@ def main() -> None: os.environ["CIBUILDWHEEL"] = "1" # Python is buffering by default when running on the CI platforms, giving problems interleaving subprocess call output with unflushed calls to 'print' - sys.stdout = Unbuffered(sys.stdout) # type: ignore[no-untyped-call,assignment] + sys.stdout = Unbuffered(sys.stdout) # type: ignore[assignment] print_preamble(platform=platform, options=options, identifiers=identifiers) diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index eb00493e..4031e038 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -1,15 +1,14 @@ import subprocess import sys import textwrap -from collections import OrderedDict from pathlib import Path, PurePath -from typing import Iterator, List, NamedTuple, Set +from typing import Iterator, List, NamedTuple, Set, Tuple from .architecture import Architecture from .docker_container import DockerContainer from .logger import log from .options import Options -from .typing import PathOrStr, assert_never +from .typing import OrderedDict, PathOrStr, assert_never from .util import ( BuildSelector, NonPlatformWheelError, @@ -80,7 +79,7 @@ def get_build_steps( Groups PythonConfigurations into BuildSteps. Each BuildStep represents a separate Docker container. """ - steps: OrderedDict[tuple, BuildStep] = OrderedDict() # type: ignore[type-arg] + steps = OrderedDict[Tuple[str, str, str], BuildStep]() for config in python_configurations: _, platform_tag = config.identifier.split("-", 1) diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 3474d372..135ea1d9 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -12,7 +12,7 @@ import urllib.request from enum import Enum from pathlib import Path from time import sleep -from typing import Dict, Iterator, List, Optional +from typing import Any, Dict, Iterable, Iterator, List, Optional, TextIO import bracex import certifi @@ -84,9 +84,9 @@ def selector_matches(patterns: str, string: str) -> bool: expansion. For example, 'cp{36,37}-*' would match either of 'cp36-*' or 'cp37-*'. """ - patterns_list: List[str] = patterns.split() - patterns_list = itertools.chain.from_iterable(bracex.expand(p) for p in patterns_list) # type: ignore[assignment] - return any(fnmatch.fnmatch(string, pat) for pat in patterns_list) + patterns_list = patterns.split() + expanded_patterns = itertools.chain.from_iterable(bracex.expand(p) for p in patterns_list) + return any(fnmatch.fnmatch(string, pat) for pat in expanded_patterns) class IdentifierSelector: @@ -161,18 +161,18 @@ class TestSelector(IdentifierSelector): # Taken from https://stackoverflow.com/a/107717 class Unbuffered: - def __init__(self, stream): # type: ignore[no-untyped-def] + def __init__(self, stream: TextIO) -> None: self.stream = stream - def write(self, data): # type: ignore[no-untyped-def] + def write(self, data: str) -> None: self.stream.write(data) self.stream.flush() - def writelines(self, data): # type: ignore[no-untyped-def] + def writelines(self, data: Iterable[str]) -> None: self.stream.writelines(data) self.stream.flush() - def __getattr__(self, attr): # type: ignore[no-untyped-def] + def __getattr__(self, attr: str) -> Any: return getattr(self.stream, attr) diff --git a/pyproject.toml b/pyproject.toml index 7a7aa8f3..ab4ed941 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,8 @@ files = [ "cibuildwheel/*.py", "test/**/*.py", "unit_test/**/*.py", - "bin/*.py" + "bin/*.py", + "noxfile.py", ] warn_unused_configs = true warn_redundant_casts = true @@ -58,10 +59,8 @@ module = [ "setuptools", "pytest", # ignored in pre-commit to speed up check "bashlex", - "bracex", "importlib_resources", - "nox", - "github", + "ghapi.*", ] ignore_missing_imports = true diff --git a/setup.cfg b/setup.cfg index 073cad67..db9ee637 100644 --- a/setup.cfg +++ b/setup.cfg @@ -37,7 +37,7 @@ install_requires = packaging tomli dataclasses;python_version < '3.7' - typing_extensions;python_version < '3.8' + typing_extensions>=3.10.0.0;python_version < '3.8' python_requires = >=3.6 include_package_data = True zip_safe = False