Merge pull request #1479 from henryiii/henryiii/fix/py37

fix: Python 3.7 support
This commit is contained in:
Joe Rickerby
2023-04-19 08:58:03 +01:00
committed by GitHub
24 changed files with 94 additions and 91 deletions
+3
View File
@@ -39,6 +39,9 @@ jobs:
matrix: matrix:
os: [ubuntu-20.04, windows-latest, macos-11] os: [ubuntu-20.04, windows-latest, macos-11]
python_version: ['3.11'] python_version: ['3.11']
include:
- os: ubuntu-22.04
python_version: '3.7'
timeout-minutes: 180 timeout-minutes: 180
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
+2 -8
View File
@@ -5,7 +5,6 @@ from __future__ import annotations
import copy import copy
import difflib import difflib
import logging import logging
import sys
from collections.abc import Mapping, MutableMapping from collections.abc import Mapping, MutableMapping
from pathlib import Path from pathlib import Path
from typing import Any, Union from typing import Any, Union
@@ -13,19 +12,14 @@ from typing import Any, Union
import click import click
import requests import requests
import rich import rich
if sys.version_info >= (3, 11):
import tomllib
else:
import tomli as tomllib
from packaging.specifiers import Specifier from packaging.specifiers import Specifier
from packaging.version import Version from packaging.version import Version
from rich.logging import RichHandler from rich.logging import RichHandler
from rich.syntax import Syntax from rich.syntax import Syntax
from cibuildwheel._compat import tomllib
from cibuildwheel._compat.typing import Final, Literal, TypedDict
from cibuildwheel.extra import dump_python_configurations from cibuildwheel.extra import dump_python_configurations
from cibuildwheel.typing import Final, Literal, TypedDict
log = logging.getLogger("cibw") log = logging.getLogger("cibw")
+2 -8
View File
@@ -5,23 +5,17 @@ from __future__ import annotations
import difflib import difflib
import logging import logging
import subprocess import subprocess
import sys
from dataclasses import dataclass from dataclasses import dataclass
from pathlib import Path from pathlib import Path
import click import click
import rich import rich
if sys.version_info >= (3, 11):
import tomllib
else:
import tomli as tomllib
from packaging.version import InvalidVersion, Version from packaging.version import InvalidVersion, Version
from rich.logging import RichHandler from rich.logging import RichHandler
from rich.syntax import Syntax from rich.syntax import Syntax
from cibuildwheel.typing import Final from cibuildwheel._compat import tomllib
from cibuildwheel._compat.typing import Final
log = logging.getLogger("cibw") log = logging.getLogger("cibw")
+3 -7
View File
@@ -16,15 +16,11 @@ import cibuildwheel.linux
import cibuildwheel.macos import cibuildwheel.macos
import cibuildwheel.util import cibuildwheel.util
import cibuildwheel.windows import cibuildwheel.windows
from cibuildwheel._compat.typing import Protocol, assert_never
from cibuildwheel.architecture import Architecture, allowed_architectures_check from cibuildwheel.architecture import Architecture, allowed_architectures_check
from cibuildwheel.logger import log from cibuildwheel.logger import log
from cibuildwheel.options import CommandLineArguments, Options, compute_options from cibuildwheel.options import CommandLineArguments, Options, compute_options
from cibuildwheel.typing import ( from cibuildwheel.typing import PLATFORMS, GenericPythonConfiguration, PlatformName
PLATFORMS,
GenericPythonConfiguration,
PlatformName,
assert_never,
)
from cibuildwheel.util import ( from cibuildwheel.util import (
CIBW_CACHE_PATH, CIBW_CACHE_PATH,
BuildSelector, BuildSelector,
@@ -244,7 +240,7 @@ def _compute_platform(args: CommandLineArguments) -> PlatformName:
return _compute_platform_ci() return _compute_platform_ci()
class PlatformModule(typing.Protocol): class PlatformModule(Protocol):
# note that as per PEP544, the self argument is ignored when the protocol # note that as per PEP544, the self argument is ignored when the protocol
# is applied to a module # is applied to a module
def get_python_configurations( def get_python_configurations(
+1
View File
@@ -0,0 +1 @@
from __future__ import annotations
+10
View File
@@ -0,0 +1,10 @@
from __future__ import annotations
import sys
if sys.version_info >= (3, 8):
from functools import cached_property
else:
from ._functools_cached_property_38 import cached_property
__all__ = ("cached_property",)
+10
View File
@@ -0,0 +1,10 @@
from __future__ import annotations
import sys
if sys.version_info >= (3, 11):
from tomllib import load # noqa: TID251
else:
from tomli import load # noqa: TID251
__all__ = ("load",)
+24
View File
@@ -0,0 +1,24 @@
from __future__ import annotations
import sys
if sys.version_info < (3, 8):
from typing_extensions import Final, Literal, OrderedDict, Protocol, TypedDict
else:
from typing import Final, Literal, OrderedDict, Protocol, TypedDict # noqa: TID251
if sys.version_info < (3, 11):
from typing_extensions import NotRequired, assert_never
else:
from typing import NotRequired, assert_never # noqa: TID251
__all__ = (
"Final",
"Literal",
"Protocol",
"Protocol",
"TypedDict",
"OrderedDict",
"assert_never",
"NotRequired",
)
+2 -1
View File
@@ -7,7 +7,8 @@ import sys
from collections.abc import Set from collections.abc import Set
from enum import Enum from enum import Enum
from .typing import Final, Literal, PlatformName, assert_never from ._compat.typing import Final, Literal, assert_never
from .typing import PlatformName
PRETTY_NAMES: Final = {"linux": "Linux", "macos": "macOS", "windows": "Windows"} PRETTY_NAMES: Final = {"linux": "Linux", "macos": "macOS", "windows": "Windows"}
+1 -2
View File
@@ -7,9 +7,8 @@ from typing import Any
import bashlex import bashlex
import bashlex.errors import bashlex.errors
from cibuildwheel.typing import Protocol
from . import bashlex_eval from . import bashlex_eval
from ._compat.typing import Protocol
class EnvironmentParseError(Exception): class EnvironmentParseError(Exception):
+1 -1
View File
@@ -7,7 +7,7 @@ from __future__ import annotations
from collections.abc import Mapping, Sequence from collections.abc import Mapping, Sequence
from io import StringIO from io import StringIO
from .typing import Protocol from ._compat.typing import Protocol
__all__ = ("Printable", "dump_python_configurations") __all__ = ("Printable", "dump_python_configurations")
+2 -1
View File
@@ -8,11 +8,12 @@ from dataclasses import dataclass
from pathlib import Path, PurePath, PurePosixPath from pathlib import Path, PurePath, PurePosixPath
from typing import Tuple from typing import Tuple
from ._compat.typing import OrderedDict, assert_never
from .architecture import Architecture from .architecture import Architecture
from .logger import log from .logger import log
from .oci_container import OCIContainer from .oci_container import OCIContainer
from .options import Options from .options import Options
from .typing import OrderedDict, PathOrStr, assert_never from .typing import PathOrStr
from .util import ( from .util import (
AlreadyBuiltWheelError, AlreadyBuiltWheelError,
BuildSelector, BuildSelector,
+2 -2
View File
@@ -7,8 +7,8 @@ import sys
import time import time
from typing import IO, AnyStr from typing import IO, AnyStr
from cibuildwheel.typing import Final from ._compat.typing import Final
from cibuildwheel.util import CIProvider, detect_ci_provider from .util import CIProvider, detect_ci_provider
DEFAULT_FOLD_PATTERN: Final = ("{name}", "") DEFAULT_FOLD_PATTERN: Final = ("{name}", "")
FOLD_PATTERNS: Final = { FOLD_PATTERNS: Final = {
+2 -1
View File
@@ -16,11 +16,12 @@ from typing import Tuple
from filelock import FileLock from filelock import FileLock
from ._compat.typing import Literal, assert_never
from .architecture import Architecture from .architecture import Architecture
from .environment import ParsedEnvironment from .environment import ParsedEnvironment
from .logger import log from .logger import log
from .options import Options from .options import Options
from .typing import Literal, PathOrStr, assert_never from .typing import PathOrStr
from .util import ( from .util import (
CIBW_CACHE_PATH, CIBW_CACHE_PATH,
AlreadyBuiltWheelError, AlreadyBuiltWheelError,
+3 -3
View File
@@ -15,9 +15,9 @@ from pathlib import Path, PurePath, PurePosixPath
from types import TracebackType from types import TracebackType
from typing import IO, Dict from typing import IO, Dict
from cibuildwheel.util import CIProvider, detect_ci_provider from ._compat.typing import Literal
from .typing import PathOrStr, PopenBytes
from .typing import Literal, PathOrStr, PopenBytes from .util import CIProvider, detect_ci_provider
ContainerEngine = Literal["docker", "podman"] ContainerEngine = Literal["docker", "podman"]
+3 -6
View File
@@ -15,19 +15,16 @@ from collections.abc import Callable, Generator, Iterable, Iterator, Mapping, Se
from pathlib import Path from pathlib import Path
from typing import Any, Dict, List, Union from typing import Any, Dict, List, Union
if sys.version_info >= (3, 11):
import tomllib
else:
import tomli as tomllib
from packaging.specifiers import SpecifierSet from packaging.specifiers import SpecifierSet
from ._compat import tomllib
from ._compat.typing import Literal, NotRequired, TypedDict
from .architecture import Architecture from .architecture import Architecture
from .environment import EnvironmentParseError, ParsedEnvironment, parse_environment from .environment import EnvironmentParseError, ParsedEnvironment, parse_environment
from .logger import log from .logger import log
from .oci_container import ContainerEngine from .oci_container import ContainerEngine
from .projectfiles import get_requires_python_str from .projectfiles import get_requires_python_str
from .typing import PLATFORMS, Literal, NotRequired, PlatformName, TypedDict from .typing import PLATFORMS, PlatformName
from .util import ( from .util import (
MANYLINUX_ARCHS, MANYLINUX_ARCHS,
MUSLLINUX_ARCHS, MUSLLINUX_ARCHS,
+1 -4
View File
@@ -7,10 +7,7 @@ import sys
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
if sys.version_info >= (3, 11): from ._compat import tomllib
import tomllib
else:
import tomli as tomllib
if sys.version_info < (3, 8): if sys.version_info < (3, 8):
Constant = ast.Str Constant = ast.Str
+4 -20
View File
@@ -2,37 +2,21 @@ from __future__ import annotations
import os import os
import subprocess import subprocess
import sys import typing
from typing import TYPE_CHECKING, Union from typing import Union
if sys.version_info < (3, 8): from ._compat.typing import Final, Literal, Protocol
from typing_extensions import Final, Literal, OrderedDict, Protocol, TypedDict
else:
from typing import Final, Literal, OrderedDict, Protocol, TypedDict
if sys.version_info < (3, 11):
from typing_extensions import NotRequired, assert_never
else:
from typing import NotRequired, assert_never
__all__ = ( __all__ = (
"Final",
"Literal",
"PLATFORMS", "PLATFORMS",
"PathOrStr", "PathOrStr",
"PlatformName", "PlatformName",
"Protocol",
"PLATFORMS", "PLATFORMS",
"PopenBytes", "PopenBytes",
"Protocol",
"TypedDict",
"OrderedDict",
"assert_never",
"NotRequired",
) )
if TYPE_CHECKING: if typing.TYPE_CHECKING:
PopenBytes = subprocess.Popen[bytes] PopenBytes = subprocess.Popen[bytes]
PathOrStr = Union[str, os.PathLike[str]] PathOrStr = Union[str, os.PathLike[str]]
else: else:
+4 -13
View File
@@ -23,12 +23,6 @@ from typing import Any, ClassVar, TextIO, TypeVar
import bracex import bracex
import certifi import certifi
if sys.version_info >= (3, 11):
import tomllib
else:
import tomli as tomllib
from filelock import FileLock from filelock import FileLock
from packaging.requirements import InvalidRequirement, Requirement from packaging.requirements import InvalidRequirement, Requirement
from packaging.specifiers import SpecifierSet from packaging.specifiers import SpecifierSet
@@ -36,7 +30,10 @@ from packaging.utils import parse_wheel_filename
from packaging.version import Version from packaging.version import Version
from platformdirs import user_cache_path from platformdirs import user_cache_path
from cibuildwheel.typing import Final, Literal, PathOrStr, PlatformName from ._compat import tomllib
from ._compat.functools import cached_property
from ._compat.typing import Final, Literal
from .typing import PathOrStr, PlatformName
__all__ = [ __all__ = [
"resources_dir", "resources_dir",
@@ -661,12 +658,6 @@ def find_compatible_wheel(wheels: Sequence[T], identifier: str) -> T | None:
return None return None
if sys.version_info >= (3, 8):
from functools import cached_property
else:
from .functools_cached_property_38 import cached_property
# Can be replaced by contextlib.chdir in Python 3.11 # Can be replaced by contextlib.chdir in Python 3.11
@contextlib.contextmanager @contextlib.contextmanager
def chdir(new_path: Path | str) -> Generator[None, None, None]: def chdir(new_path: Path | str) -> Generator[None, None, None]:
+2 -1
View File
@@ -16,11 +16,12 @@ from zipfile import ZipFile
from filelock import FileLock from filelock import FileLock
from packaging.version import Version from packaging.version import Version
from ._compat.typing import assert_never
from .architecture import Architecture from .architecture import Architecture
from .environment import ParsedEnvironment from .environment import ParsedEnvironment
from .logger import log from .logger import log
from .options import Options from .options import Options
from .typing import PathOrStr, assert_never from .typing import PathOrStr
from .util import ( from .util import (
CIBW_CACHE_PATH, CIBW_CACHE_PATH,
AlreadyBuiltWheelError, AlreadyBuiltWheelError,
+10 -1
View File
@@ -149,7 +149,7 @@ extend-ignore = [
"PT007", # False positive (fixed upstream) "PT007", # False positive (fixed upstream)
] ]
target-version = "py37" target-version = "py37"
typing-modules = ["cibuildwheel.typing"] typing-modules = ["cibuildwheel._compat.typing"]
flake8-unused-arguments.ignore-variadic-names = true flake8-unused-arguments.ignore-variadic-names = true
[tool.ruff.flake8-tidy-imports.banned-api] [tool.ruff.flake8-tidy-imports.banned-api]
@@ -158,6 +158,15 @@ flake8-unused-arguments.ignore-variadic-names = true
"typing.Iterator".msg = "Use collections.abc.Iterator instead." "typing.Iterator".msg = "Use collections.abc.Iterator instead."
"typing.Sequence".msg = "Use collections.abc.Sequence instead." "typing.Sequence".msg = "Use collections.abc.Sequence instead."
"typing.Set".msg = "Use collections.abc.Set instead." "typing.Set".msg = "Use collections.abc.Set instead."
"typing.Protocol".msg = "Use cibuildwheel._compat.typing.Protocol instead."
"typing.Final".msg = "Use cibuildwheel._compat.typing.Final instead."
"typing.Literal".msg = "Use cibuildwheel._compat.typing.Literal instead."
"typing.OrderedDict".msg = "Use cibuildwheel._compat.typing.OrderedDict instead."
"typing.TypedDict".msg = "Use cibuildwheel._compat.typing.TypedDict instead."
"typing.NotRequired".msg = "Use cibuildwheel._compat.typing.NotRequired instead."
"typing.assert_never".msg = "Use cibuildwheel._compat.typing.assert_never instead."
"tomllib".msg = "Use cibuildwheel._compat.tomllib instead."
"tomli".msg = "Use cibuildwheel._compat.tomllib instead."
[tool.ruff.per-file-ignores] [tool.ruff.per-file-ignores]
"unit_test/*" = ["PLC1901"] "unit_test/*" = ["PLC1901"]
+1 -7
View File
@@ -1,14 +1,8 @@
from __future__ import annotations from __future__ import annotations
import sys
if sys.version_info >= (3, 11):
import tomllib
else:
import tomli as tomllib
from packaging.version import Version from packaging.version import Version
from cibuildwheel._compat import tomllib
from cibuildwheel.extra import Printable, dump_python_configurations from cibuildwheel.extra import Printable, dump_python_configurations
from cibuildwheel.util import resources_dir from cibuildwheel.util import resources_dir
+1 -5
View File
@@ -6,12 +6,8 @@ from pathlib import Path
import pytest import pytest
if sys.version_info >= (3, 11):
import tomllib
else:
import tomli as tomllib
from cibuildwheel.__main__ import main from cibuildwheel.__main__ import main
from cibuildwheel._compat import tomllib
from cibuildwheel.environment import ParsedEnvironment from cibuildwheel.environment import ParsedEnvironment
from cibuildwheel.options import BuildOptions, _get_pinned_container_images from cibuildwheel.options import BuildOptions, _get_pinned_container_images
from cibuildwheel.util import BuildSelector, resources_dir, split_config_settings from cibuildwheel.util import BuildSelector, resources_dir, split_config_settings