diff --git a/bin/bump_version.py b/bin/bump_version.py index 2c56caff..71792113 100755 --- a/bin/bump_version.py +++ b/bin/bump_version.py @@ -7,7 +7,6 @@ from __future__ import annotations -import glob import os import subprocess import sys @@ -86,7 +85,7 @@ def bump_version() -> None: actions = [] for path_pattern, version_pattern in config: - paths = [Path(p) for p in glob.glob(path_pattern)] + paths = list(Path().glob(path_pattern)) if not paths: print(f"error: Pattern {path_pattern} didn't match any files") diff --git a/bin/make_dependency_update_pr.py b/bin/make_dependency_update_pr.py index 54796641..5482a847 100755 --- a/bin/make_dependency_update_pr.py +++ b/bin/make_dependency_update_pr.py @@ -56,7 +56,7 @@ def main() -> None: f""" Update the versions of our dependencies. - PR generated by `{os.path.basename(__file__)}`. + PR generated by `{Path(__file__).name}`. """ ) subprocess.run( diff --git a/bin/run_example_ci_configs.py b/bin/run_example_ci_configs.py index a2452951..7e8d226a 100755 --- a/bin/run_example_ci_configs.py +++ b/bin/run_example_ci_configs.py @@ -9,12 +9,13 @@ import sys import textwrap import time import typing -from glob import glob from pathlib import Path from urllib.parse import quote import click +DIR = Path(__file__).parent.resolve() + def shell(cmd: str, *, check: bool, **kwargs: object) -> subprocess.CompletedProcess[str]: return subprocess.run([cmd], shell=True, check=check, **kwargs) # type: ignore[call-overload, no-any-return] @@ -79,9 +80,8 @@ services = [ ] -def ci_service_for_config_file(config_file: str) -> CIService: - filename = Path(config_file).name - +def ci_service_for_config_file(config_file: Path) -> CIService: + filename = config_file.name try: return next(s for s in services if filename.startswith(s.name)) except StopIteration: @@ -98,16 +98,16 @@ def run_example_ci_configs(config_files=None): """ if len(config_files) == 0: - config_files = glob("examples/*-minimal.yml") + config_files = Path("examples").glob("*-minimal.yml") # check each CI service has at most 1 config file - configs_by_service = {} + configs_by_service = set() for config_file in config_files: service = ci_service_for_config_file(config_file) if service.name in configs_by_service: msg = "You cannot specify more than one config per CI service" raise Exception(msg) - configs_by_service[service.name] = config_file + configs_by_service.add(service.name) if git_repo_has_changes(): print("Your git repo has uncommitted changes. Commit or stash before continuing.") @@ -128,18 +128,17 @@ def run_example_ci_configs(config_files=None): for config_file in config_files: service = ci_service_for_config_file(config_file) - src_config_file = Path(config_file) dst_config_file = example_project / service.dst_config_path dst_config_file.parent.mkdir(parents=True, exist_ok=True) - shutil.copyfile(src_config_file, dst_config_file) + shutil.copyfile(config_file, dst_config_file) subprocess.run(["git", "add", example_project], check=True) message = textwrap.dedent( f"""\ Test example minimal configs - Testing files: {config_files} + Testing files: {[str(f) for f in config_files]} Generated from branch: {previous_branch} Time: {timestamp} """ @@ -174,6 +173,5 @@ def run_example_ci_configs(config_files=None): if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - os.chdir("..") + os.chdir(DIR) run_example_ci_configs(standalone_mode=True) diff --git a/cibuildwheel/pyodide.py b/cibuildwheel/pyodide.py index f651068e..3bdb6451 100644 --- a/cibuildwheel/pyodide.py +++ b/cibuildwheel/pyodide.py @@ -292,7 +292,7 @@ def build(options: Options, tmp_path: Path) -> None: # directory. oldmounts = "" extra_mounts = [str(identifier_tmp_dir)] - if str(Path.cwd()).startswith("/tmp"): + if Path.cwd().is_relative_to("/tmp"): extra_mounts.append(str(Path.cwd())) if "_PYODIDE_EXTRA_MOUNTS" in env: diff --git a/pyproject.toml b/pyproject.toml index 1e6173dc..166686d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -190,6 +190,7 @@ extend-select = [ "PIE", # flake8-pie "PL", # pylint "PT", # flake8-pytest-style + "PTH", # flake8-use-pathlib "RET", # flake8-return "RUF", # Ruff-specific "SIM", # flake8-simplify @@ -206,6 +207,7 @@ ignore = [ "PYI025", # Set as AbstractSet "ISC001", # Conflicts with formatter "EXE003", # Ruff doesn't like uv? + "PTH123", # open -> Path.open ] flake8-unused-arguments.ignore-variadic-names = true @@ -219,9 +221,10 @@ flake8-unused-arguments.ignore-variadic-names = true [tool.ruff.lint.per-file-ignores] "unit_test/*" = ["PLC1901"] "bin/*" = ["TID251"] +"cibuildwheel/resources/install_certifi.py" = ["PTH"] [tool.repo-review] ignore = ["PC170", "PP303"] [tool.check-wheel-contents] -ignore = ["W002"] # requirements-*.txt are allowed to be duplicates of one another +ignore = ["W002"] # constraints-*.txt are allowed to be duplicates of one another diff --git a/test/test_windows.py b/test/test_windows.py index 3ce50848..46f4cbb8 100644 --- a/test/test_windows.py +++ b/test/test_windows.py @@ -3,6 +3,7 @@ from __future__ import annotations import os import subprocess import textwrap +from pathlib import Path import pytest @@ -16,8 +17,8 @@ def skip_if_no_msvc(arm64: bool = False) -> None: if not programfiles: pytest.skip("Requires %PROGRAMFILES(X86)% variable to be set") - vswhere = os.path.join(programfiles, "Microsoft Visual Studio", "Installer", "vswhere.exe") - if not os.path.isfile(vswhere): + vswhere = Path(programfiles, "Microsoft Visual Studio", "Installer", "vswhere.exe") + if not vswhere.is_file(): pytest.skip("Requires Visual Studio installation") require = "Microsoft.VisualStudio.Component.VC.Tools.x86.x64"