Skip to content

Commit

Permalink
Merge pull request #1138 from nitzmahone/prerelease_python_test_fix
Browse files Browse the repository at this point in the history
ensure tests run on prerelease Pythons
  • Loading branch information
joerick authored Jun 15, 2022
2 parents 1d614c2 + 860b14f commit cd7ea91
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 14 deletions.
28 changes: 14 additions & 14 deletions cibuildwheel/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,21 +234,20 @@ def selector_matches(patterns: str, string: str) -> bool:

# Once we require Python 3.10+, we can add kw_only=True
@dataclasses.dataclass
class IdentifierSelector:
class BuildSelector:
"""
This class holds a set of build/skip patterns. You call an instance with a
build identifier, and it returns True if that identifier should be
included. Only call this on valid identifiers, ones that have at least 2
numeric digits before the first dash. If a pre-release version X.Y is present,
you can filter it with prerelease="XY".
numeric digits before the first dash.
"""

# a pattern that skips prerelease versions, when include_prereleases is False.
PRERELEASE_SKIP: ClassVar[str] = "cp311-*"

skip_config: str
build_config: str
skip_config: str
requires_python: Optional[SpecifierSet] = None

# a pattern that skips prerelease versions, when include_prereleases is False.
PRERELEASE_SKIP: ClassVar[str] = "cp311-*"
prerelease_pythons: bool = False

def __call__(self, build_id: str) -> bool:
Expand All @@ -272,15 +271,16 @@ def __call__(self, build_id: str) -> bool:


@dataclasses.dataclass
class BuildSelector(IdentifierSelector):
pass
class TestSelector:
"""
A build selector that can only skip tests according to a skip pattern.
"""

skip_config: str

# Note that requires-python is not needed for TestSelector, as you can't test
# what you can't build.
@dataclasses.dataclass
class TestSelector(IdentifierSelector):
build_config: str = "*"
def __call__(self, build_id: str) -> bool:
should_skip = selector_matches(self.skip_config, build_id)
return not should_skip


# Taken from https://stackoverflow.com/a/107717
Expand Down
11 changes: 11 additions & 0 deletions unit_test/build_selector_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,14 @@ def test_build_limited_python_patch():

assert build_selector("cp36-manylinux_x86_64")
assert build_selector("cp37-manylinux_x86_64")


def test_testing_selector():
# local import to avoid pytest trying to collect this as a test class!
from cibuildwheel.util import TestSelector

test_selector = TestSelector(skip_config="cp36-*")

assert not test_selector("cp36-win_amd64")
assert test_selector("cp37-manylinux_x86_64")
assert test_selector("cp311-manylinux_x86_64")

0 comments on commit cd7ea91

Please sign in to comment.