* feat: requires-python refactor: updating to current proposal fix: add tests and fix a few issues docs: Update mostly from @joerick docs: update README from readthedocs * refactor: pull out config file reading * fix: always assume highest Python patch version * refactor: try new design * refactor: function and bump MyPy to 0.800 * fix: tighten AST to call only, add docs * fix: address review points from @joerick
104 lines
2.8 KiB
Python
104 lines
2.8 KiB
Python
import sys
|
|
import textwrap
|
|
|
|
import pytest
|
|
from packaging.specifiers import SpecifierSet
|
|
|
|
from cibuildwheel.__main__ import main
|
|
|
|
|
|
@pytest.fixture(autouse=True, scope="function")
|
|
def fake_package_dir(monkeypatch, tmp_path):
|
|
'''
|
|
Set up a fake project
|
|
'''
|
|
|
|
local_path = tmp_path / "tmp_project"
|
|
local_path.mkdir()
|
|
|
|
local_path.joinpath("setup.py").touch()
|
|
|
|
monkeypatch.setattr(sys, 'argv', ['cibuildwheel', str(local_path)])
|
|
|
|
return local_path
|
|
|
|
|
|
def test_no_override(platform, monkeypatch, intercepted_build_args):
|
|
|
|
main()
|
|
|
|
intercepted_build_selector = intercepted_build_args.args[0].build_selector
|
|
|
|
assert intercepted_build_selector('cp39-win32')
|
|
assert intercepted_build_selector('cp36-win32')
|
|
|
|
assert intercepted_build_selector.requires_python is None
|
|
|
|
|
|
def test_override_env(platform, monkeypatch, intercepted_build_args):
|
|
monkeypatch.setenv('CIBW_PROJECT_REQUIRES_PYTHON', '>=3.8')
|
|
|
|
main()
|
|
|
|
intercepted_build_selector = intercepted_build_args.args[0].build_selector
|
|
|
|
assert intercepted_build_selector.requires_python == SpecifierSet(">=3.8")
|
|
|
|
assert intercepted_build_selector('cp39-win32')
|
|
assert not intercepted_build_selector('cp36-win32')
|
|
|
|
|
|
def test_override_setup_cfg(platform, monkeypatch, intercepted_build_args, fake_package_dir):
|
|
|
|
fake_package_dir.joinpath("setup.cfg").write_text(textwrap.dedent("""
|
|
[options]
|
|
python_requires = >=3.8
|
|
"""))
|
|
|
|
main()
|
|
|
|
intercepted_build_selector = intercepted_build_args.args[0].build_selector
|
|
|
|
assert intercepted_build_selector.requires_python == SpecifierSet(">=3.8")
|
|
|
|
assert intercepted_build_selector('cp39-win32')
|
|
assert not intercepted_build_selector('cp36-win32')
|
|
|
|
|
|
def test_override_pyproject_toml(platform, monkeypatch, intercepted_build_args, fake_package_dir):
|
|
|
|
fake_package_dir.joinpath("pyproject.toml").write_text(textwrap.dedent("""
|
|
[project]
|
|
requires-python = ">=3.8"
|
|
"""))
|
|
|
|
main()
|
|
|
|
intercepted_build_selector = intercepted_build_args.args[0].build_selector
|
|
|
|
assert intercepted_build_selector.requires_python == SpecifierSet(">=3.8")
|
|
|
|
assert intercepted_build_selector('cp39-win32')
|
|
assert not intercepted_build_selector('cp36-win32')
|
|
|
|
|
|
def test_override_setup_py_simple(platform, monkeypatch, intercepted_build_args, fake_package_dir):
|
|
|
|
fake_package_dir.joinpath("setup.py").write_text(textwrap.dedent("""
|
|
from setuptools import setup
|
|
|
|
setup(
|
|
name = "other",
|
|
python_requires = ">=3.7",
|
|
)
|
|
"""))
|
|
|
|
main()
|
|
|
|
intercepted_build_selector = intercepted_build_args.args[0].build_selector
|
|
|
|
assert intercepted_build_selector.requires_python == SpecifierSet(">=3.7")
|
|
|
|
assert intercepted_build_selector('cp39-win32')
|
|
assert not intercepted_build_selector('cp36-win32')
|