tox.ini: pinned, typing → min, mypy (#7595)

This commit is contained in:
Adrian 2026-06-11 09:10:48 +02:00 committed by GitHub
parent 93a627ba1c
commit 2d0a898e2d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 74 additions and 50 deletions

View File

@ -22,10 +22,10 @@ jobs:
TOXENV: pylint
- python-version: "3.10"
env:
TOXENV: typing
TOXENV: mypy
- python-version: "3.10"
env:
TOXENV: typing-tests
TOXENV: mypy-tests
# Keep in sync with pyproject.toml tool.sphinx-scrapy.python-version.
- python-version: "3.14"
env:

View File

@ -45,26 +45,26 @@ jobs:
env:
TOXENV: pypy3
# pinned deps
# min deps
- python-version: "3.10.19"
env:
TOXENV: pinned
TOXENV: min
- python-version: "3.10.19"
env:
TOXENV: default-reactor-pinned
TOXENV: min-default-reactor
- python-version: "3.10.19"
env:
TOXENV: no-reactor-pinned
TOXENV: min-no-reactor
# pinned due to https://github.com/pypy/pypy/issues/5388
- python-version: pypy3.11-7.3.20
env:
TOXENV: pypy3-pinned
TOXENV: min-pypy3
- python-version: "3.10.19"
env:
TOXENV: extra-deps-pinned
TOXENV: min-extra-deps
- python-version: "3.10.19"
env:
TOXENV: botocore-pinned
TOXENV: min-botocore
- python-version: "3.14"
env:
@ -92,7 +92,7 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install system libraries
if: contains(matrix.python-version, 'pypy') || contains(matrix.env.TOXENV, 'pinned')
if: contains(matrix.python-version, 'pypy') || contains(matrix.env.TOXENV, 'min')
run: |
sudo apt-get update
sudo apt-get install libxml2-dev libxslt-dev

View File

@ -41,13 +41,13 @@ jobs:
env:
TOXENV: no-reactor
# pinned deps
# min deps
- python-version: "3.10.11"
env:
TOXENV: pinned
TOXENV: min
- python-version: "3.10.11"
env:
TOXENV: extra-deps-pinned
TOXENV: min-extra-deps
- python-version: "3.14"
env:

View File

@ -15,14 +15,14 @@ class TestScrapyUtils:
See https://github.com/scrapy/scrapy/pull/4814#issuecomment-706230011
"""
if not os.environ.get("_SCRAPY_PINNED", None):
pytest.skip("Not in a pinned environment")
if not os.environ.get("_SCRAPY_MIN", None):
pytest.skip("Not in a min environment")
tox_config_file_path = Path(__file__).parent / ".." / "tox.ini"
config_parser = ConfigParser()
config_parser.read(tox_config_file_path)
pattern = r"Twisted==([\d.]+)"
match = re.search(pattern, config_parser["pinned"]["deps"])
match = re.search(pattern, config_parser["min"]["deps"])
pinned_twisted_version_string = match[1]
assert twisted_version.short() == pinned_twisted_version_string

92
tox.ini
View File

@ -6,7 +6,31 @@
[tox]
requires =
sphinx-scrapy[tox] @ git+https://github.com/scrapy/sphinx-scrapy.git@0.8.6
envlist = pre-commit,pylint,typing,py,docs
envlist =
pre-commit
pylint
mypy
mypy-tests
twinecheck
docs
docs-tests
docs-links
docs-coverage
min
min-extra-deps
min-default-reactor
min-no-reactor
min-botocore
min-pypy3
py{310,311,312,313,314}
extra-deps
default-reactor
no-reactor
no-reactor-extra-deps
botocore
mitmproxy
pypy3
pypy3-extra-deps
minversion = 1.7.0
[test-requirements]
@ -41,7 +65,7 @@ download = true
commands =
pytest {posargs:--cov-config=pyproject.toml --cov=scrapy --cov-report= --cov-report=term-missing --cov-report=xml --junitxml=testenv.junit.xml -o junit_family=legacy --durations=10 scrapy tests --doctest-modules}
[testenv:typing]
[testenv:mypy]
basepython = python3.10
deps =
mypy==2.1.0
@ -71,11 +95,11 @@ deps =
commands =
mypy {posargs:scrapy tests}
[testenv:typing-tests]
[testenv:mypy-tests]
basepython = python3.10
deps =
{[test-requirements]deps}
{[testenv:typing]deps}
{[testenv:mypy]deps}
pytest-mypy-testing==0.2.0
commands =
pytest {posargs:tests_typing}
@ -105,7 +129,7 @@ commands =
python -m build --sdist
twine check dist/*
[pinned]
[min]
basepython = python3.10
deps =
# pytest 8.4.1 adds support for Twisted 25.5.0 but drops support for Twisted < 24.10.0
@ -125,18 +149,18 @@ deps =
zope.interface==5.1.0
{[test-requirements]deps}
setenv =
_SCRAPY_PINNED=true
_SCRAPY_MIN=true
commands =
pytest {posargs:--cov-config=pyproject.toml --cov=scrapy --cov-report=xml --cov-report= --junitxml=pinned.junit.xml -o junit_family=legacy --durations=10 scrapy tests}
pytest {posargs:--cov-config=pyproject.toml --cov=scrapy --cov-report=xml --cov-report= --junitxml=min.junit.xml -o junit_family=legacy --durations=10 scrapy tests}
[testenv:pinned]
basepython = {[pinned]basepython}
[testenv:min]
basepython = {[min]basepython}
deps =
{[pinned]deps}
{[min]deps}
PyDispatcher==2.0.5
setenv =
{[pinned]setenv}
commands = {[pinned]commands}
{[min]setenv}
commands = {[min]commands}
[testenv:extra-deps]
basepython = python3
@ -155,10 +179,10 @@ deps =
uvloop; platform_system != "Windows" and implementation_name != "pypy"
zstandard; implementation_name != "pypy" # optional for HTTP compress downloader middleware tests
[testenv:extra-deps-pinned]
basepython = {[pinned]basepython}
[testenv:min-extra-deps]
basepython = {[min]basepython}
deps =
{[pinned]deps}
{[min]deps}
Pillow==8.3.2
Twisted[http2]==21.7.0
boto3==1.20.0
@ -172,19 +196,19 @@ deps =
uvloop==0.16.0; platform_system != "Windows" and implementation_name != "pypy"
zstandard==0.16.0; implementation_name != "pypy"
setenv =
{[pinned]setenv}
commands = {[pinned]commands}
{[min]setenv}
commands = {[min]commands}
[testenv:default-reactor]
commands =
{[testenv]commands} --reactor=default
[testenv:default-reactor-pinned]
basepython = {[pinned]basepython}
deps = {[testenv:pinned]deps}
commands = {[pinned]commands} --reactor=default
[testenv:min-default-reactor]
basepython = {[min]basepython}
deps = {[testenv:min]deps}
commands = {[min]commands} --reactor=default
setenv =
{[pinned]setenv}
{[min]setenv}
[testenv:no-reactor]
deps =
@ -200,14 +224,14 @@ deps =
commands =
{[testenv]commands} -p no:twisted --reactor=none
[testenv:no-reactor-pinned]
basepython = {[pinned]basepython}
[testenv:min-no-reactor]
basepython = {[min]basepython}
deps =
{[testenv:pinned]deps}
{[testenv:min]deps}
pytest-asyncio
commands = {[pinned]commands} -p no:twisted --reactor=none
commands = {[min]commands} -p no:twisted --reactor=none
setenv =
{[pinned]setenv}
{[min]setenv}
[testenv:pypy3]
basepython = pypy3
@ -221,7 +245,7 @@ deps =
{[testenv:extra-deps]deps}
commands = {[testenv:pypy3]commands}
[testenv:pypy3-pinned]
[testenv:min-pypy3]
basepython = pypy3.11
deps =
PyPyDispatcher==2.1.0
@ -248,7 +272,7 @@ commands =
; disabling coverage
pytest {posargs:--durations=10 scrapy tests}
setenv =
{[pinned]setenv}
{[min]setenv}
[testenv:docs-tests]
changedir = docs
@ -283,17 +307,17 @@ deps =
commands =
pytest {posargs:--cov-config=pyproject.toml --cov=scrapy --cov-report=xml --cov-report= tests --junitxml=botocore.junit.xml -o junit_family=legacy} -m requires_botocore
[testenv:botocore-pinned]
basepython = {[pinned]basepython}
[testenv:min-botocore]
basepython = {[min]basepython}
deps =
{[pinned]deps}
{[min]deps}
botocore==1.13.45
# botocore 1.13.45 requires urllib3>=1.20,<1.26; requests 2.33.0 requires urllib3>=1.26,<3
requests<2.33.0
setenv =
{[pinned]setenv}
{[min]setenv}
commands =
pytest {posargs:--cov-config=pyproject.toml --cov=scrapy --cov-report=xml --cov-report= tests --junitxml=botocore-pinned.junit.xml -o junit_family=legacy} -m requires_botocore
pytest {posargs:--cov-config=pyproject.toml --cov=scrapy --cov-report=xml --cov-report= tests --junitxml=min-botocore.junit.xml -o junit_family=legacy} -m requires_botocore
# Run proxy tests that use mitmproxy in a separate env to avoid installing