chore: stricter mypy (#2053)
* chore: improve mypy Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * chore(types): type functions in tests Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * chore(types): No partial types in tests Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
This commit is contained in:
+1
-1
@@ -11,7 +11,7 @@ from cibuildwheel.util import detect_ci_provider, find_uv
|
||||
from .utils import EMULATED_ARCHS, platform
|
||||
|
||||
|
||||
def pytest_addoption(parser) -> None:
|
||||
def pytest_addoption(parser: pytest.Parser) -> None:
|
||||
parser.addoption(
|
||||
"--run-emulation",
|
||||
action="store",
|
||||
|
||||
@@ -33,10 +33,9 @@ def test(tmp_path, capfd):
|
||||
basic_project.generate(project_dir)
|
||||
|
||||
num_builds = len(utils.cibuildwheel_get_build_identifiers(project_dir))
|
||||
if num_builds > 1:
|
||||
expectation = pytest.raises(subprocess.CalledProcessError)
|
||||
else:
|
||||
expectation = does_not_raise()
|
||||
expectation = (
|
||||
pytest.raises(subprocess.CalledProcessError) if num_builds > 1 else does_not_raise()
|
||||
)
|
||||
|
||||
with expectation as exc_info:
|
||||
result = utils.cibuildwheel_run(
|
||||
@@ -48,6 +47,7 @@ def test(tmp_path, capfd):
|
||||
|
||||
captured = capfd.readouterr()
|
||||
if num_builds > 1:
|
||||
assert exc_info is not None
|
||||
assert "Build failed because a wheel named" in captured.err
|
||||
assert exc_info.value.returncode == 6
|
||||
else:
|
||||
|
||||
@@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
import platform
|
||||
import re
|
||||
import textwrap
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -46,8 +47,8 @@ build-backend = "setuptools.build_meta"
|
||||
VERSION_REGEX = r"([\w-]+)==([^\s]+)"
|
||||
|
||||
|
||||
def get_versions_from_constraint_file(constraint_file):
|
||||
constraint_file_text = constraint_file.read_text(encoding="utf8")
|
||||
def get_versions_from_constraint_file(constraint_file: Path) -> dict[str, str]:
|
||||
constraint_file_text = constraint_file.read_text(encoding="utf-8")
|
||||
|
||||
return dict(re.findall(VERSION_REGEX, constraint_file_text))
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import os
|
||||
import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
from collections.abc import Mapping
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
@@ -28,7 +29,11 @@ def make_sdist(project: TestProject, working_dir: Path) -> Path:
|
||||
return next(sdist_dir.glob("*.tar.gz"))
|
||||
|
||||
|
||||
def cibuildwheel_from_sdist_run(sdist_path, add_env=None, config_file=None):
|
||||
def cibuildwheel_from_sdist_run(
|
||||
sdist_path: Path | str,
|
||||
add_env: Mapping[str, str] | None = None,
|
||||
config_file: str | None = None,
|
||||
) -> list[str]:
|
||||
env = os.environ.copy()
|
||||
|
||||
if add_env:
|
||||
|
||||
@@ -8,7 +8,7 @@ from argparse import ArgumentParser
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def main():
|
||||
def main() -> None:
|
||||
parser = ArgumentParser(
|
||||
prog="python -m test.test_projects", description="Generate a test project to check it out"
|
||||
)
|
||||
|
||||
@@ -22,11 +22,11 @@ class TestProject:
|
||||
files: FilesDict
|
||||
template_context: TemplateContext
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self) -> None:
|
||||
self.files = {}
|
||||
self.template_context = {}
|
||||
|
||||
def generate(self, path: Path):
|
||||
def generate(self, path: Path) -> None:
|
||||
for filename, content in self.files.items():
|
||||
file_path = path / filename
|
||||
file_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
@@ -37,7 +37,7 @@ class TestProject:
|
||||
|
||||
f.write(content)
|
||||
|
||||
def copy(self):
|
||||
def copy(self) -> TestProject:
|
||||
other = TestProject()
|
||||
other.files = self.files.copy()
|
||||
other.template_context = self.template_context.copy()
|
||||
|
||||
@@ -78,13 +78,13 @@ version = 0.1.0
|
||||
|
||||
def new_c_project(
|
||||
*,
|
||||
spam_c_top_level_add="",
|
||||
spam_c_function_add="",
|
||||
setup_py_add="",
|
||||
setup_py_extension_args_add="",
|
||||
setup_py_setup_args_add="",
|
||||
setup_cfg_add="",
|
||||
):
|
||||
spam_c_top_level_add: str = "",
|
||||
spam_c_function_add: str = "",
|
||||
setup_py_add: str = "",
|
||||
setup_py_extension_args_add: str = "",
|
||||
setup_py_setup_args_add: str = "",
|
||||
setup_cfg_add: str = "",
|
||||
) -> TestProject:
|
||||
project = TestProject()
|
||||
|
||||
project.files.update(
|
||||
|
||||
@@ -155,7 +155,7 @@ def test_failing_test(tmp_path):
|
||||
@pytest.mark.parametrize("test_runner", ["pytest", "unittest"])
|
||||
def test_bare_pytest_invocation(
|
||||
tmp_path: Path, capfd: pytest.CaptureFixture[str], test_runner: str
|
||||
):
|
||||
) -> None:
|
||||
"""Check that if a user runs pytest in the the test cwd, it raises a helpful error"""
|
||||
project_dir = tmp_path / "project"
|
||||
output_dir = tmp_path / "output"
|
||||
|
||||
@@ -11,7 +11,7 @@ from . import test_projects, utils
|
||||
basic_project = test_projects.new_c_project()
|
||||
|
||||
|
||||
def skip_if_no_msvc(arm64=False):
|
||||
def skip_if_no_msvc(arm64: bool = False) -> None:
|
||||
programfiles = os.getenv("PROGRAMFILES(X86)", "") or os.getenv("PROGRAMFILES", "")
|
||||
if not programfiles:
|
||||
pytest.skip("Requires %PROGRAMFILES(X86)% variable to be set")
|
||||
|
||||
+29
-25
@@ -10,8 +10,10 @@ import os
|
||||
import platform as pm
|
||||
import subprocess
|
||||
import sys
|
||||
from collections.abc import Mapping, Sequence
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
from typing import Final
|
||||
from typing import Any, Final
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -37,7 +39,9 @@ else:
|
||||
raise Exception(msg)
|
||||
|
||||
|
||||
def cibuildwheel_get_build_identifiers(project_path, env=None, *, prerelease_pythons=False):
|
||||
def cibuildwheel_get_build_identifiers(
|
||||
project_path: Path, env: dict[str, str] | None = None, *, prerelease_pythons: bool = False
|
||||
) -> list[str]:
|
||||
"""
|
||||
Returns the list of build identifiers that cibuildwheel will try to build
|
||||
for the current platform.
|
||||
@@ -75,14 +79,14 @@ def _update_pip_cache_dir(env: dict[str, str]) -> None:
|
||||
|
||||
|
||||
def cibuildwheel_run(
|
||||
project_path,
|
||||
package_dir=".",
|
||||
env=None,
|
||||
add_env=None,
|
||||
output_dir=None,
|
||||
add_args=None,
|
||||
single_python=False,
|
||||
):
|
||||
project_path: str | Path,
|
||||
package_dir: str | Path = ".",
|
||||
env: dict[str, str] | None = None,
|
||||
add_env: Mapping[str, str] | None = None,
|
||||
output_dir: Path | None = None,
|
||||
add_args: Sequence[str] | None = None,
|
||||
single_python: bool = False,
|
||||
) -> list[str]:
|
||||
"""
|
||||
Runs cibuildwheel as a subprocess, building the project at project_path.
|
||||
|
||||
@@ -144,17 +148,17 @@ def _floor_macosx(*args: str) -> str:
|
||||
|
||||
|
||||
def expected_wheels(
|
||||
package_name,
|
||||
package_version,
|
||||
manylinux_versions=None,
|
||||
musllinux_versions=None,
|
||||
macosx_deployment_target="10.9",
|
||||
machine_arch=None,
|
||||
python_abi_tags=None,
|
||||
include_universal2=False,
|
||||
single_python=False,
|
||||
single_arch=False,
|
||||
):
|
||||
package_name: str,
|
||||
package_version: str,
|
||||
manylinux_versions: list[str] | None = None,
|
||||
musllinux_versions: list[str] | None = None,
|
||||
macosx_deployment_target: str = "10.9",
|
||||
machine_arch: str | None = None,
|
||||
python_abi_tags: list[str] | None = None,
|
||||
include_universal2: bool = False,
|
||||
single_python: bool = False,
|
||||
single_arch: bool = False,
|
||||
) -> list[str]:
|
||||
"""
|
||||
Returns a list of expected wheels from a run of cibuildwheel.
|
||||
"""
|
||||
@@ -307,7 +311,7 @@ def expected_wheels(
|
||||
return wheels
|
||||
|
||||
|
||||
def get_macos_version():
|
||||
def get_macos_version() -> tuple[int, int]:
|
||||
"""
|
||||
Returns the macOS major/minor version, as a tuple, e.g. (10, 15) or (11, 0)
|
||||
|
||||
@@ -316,10 +320,10 @@ def get_macos_version():
|
||||
(11, 2) <= (11, 0) != True
|
||||
"""
|
||||
version_str, _, _ = pm.mac_ver()
|
||||
return tuple(map(int, version_str.split(".")[:2]))
|
||||
return tuple(map(int, version_str.split(".")[:2])) # type: ignore[return-value]
|
||||
|
||||
|
||||
def skip_if_pyodide(reason: str):
|
||||
def skip_if_pyodide(reason: str) -> Any:
|
||||
return pytest.mark.skipif(platform == "pyodide", reason=reason)
|
||||
|
||||
|
||||
@@ -330,7 +334,7 @@ def invoke_pytest() -> str:
|
||||
return "pytest"
|
||||
|
||||
|
||||
def arch_name_for_linux(arch: str):
|
||||
def arch_name_for_linux(arch: str) -> str:
|
||||
"""
|
||||
Archs have different names on different platforms, but it's useful to be
|
||||
able to run linux tests on dev machines. This function translates between
|
||||
|
||||
Reference in New Issue
Block a user