# Tox (https://tox.readthedocs.io/) is a tool for running tests # in multiple virtualenvs. This configuration file will run the # test suite on all supported python versions. To use it, "pip install tox" # and then run "tox" from this directory. [tox] envlist = security,flake8,py minversion = 1.7.0 [testenv] deps = -rtests/requirements.txt # mitmproxy does not support PyPy # Python 3.9+ requires mitmproxy >= 5.3.0 # mitmproxy >= 5.3.0 requires h2 >= 4.0, Twisted 21.2 requires h2 < 4.0 #mitmproxy >= 5.3.0; python_version >= '3.9' and implementation_name != 'pypy' # The tests hang with mitmproxy 8.0.0: https://github.com/scrapy/scrapy/issues/5454 mitmproxy >= 4.0.4, < 8; python_version < '3.9' and implementation_name != 'pypy' # newer markupsafe is incompatible with deps of old mitmproxy (which we get on Python 3.7 and lower) markupsafe < 2.1.0; python_version < '3.8' and implementation_name != 'pypy' # Extras botocore>=1.4.87 passenv = S3_TEST_FILE_URI AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN GCS_TEST_FILE_URI GCS_PROJECT_ID #allow tox virtualenv to upgrade pip/wheel/setuptools download = true commands = pytest --cov=scrapy --cov-report=xml --cov-report= {posargs:--durations=10 docs scrapy tests} install_command = pip install -U -ctests/upper-constraints.txt {opts} {packages} [testenv:typing] basepython = python3 deps = lxml-stubs==0.2.0 mypy==0.982 types-attrs==19.1.0 types-pyOpenSSL==21.0.0 types-setuptools==57.0.0 commands = mypy --show-error-codes {posargs: scrapy tests} [testenv:security] basepython = python3 deps = bandit==1.7.4 commands = bandit -r -c .bandit.yml {posargs:scrapy} [testenv:flake8] basepython = python3 deps = {[testenv]deps} # Twisted[http2] is required to import some files Twisted[http2]>=17.9.0 flake8==5.0.4 commands = flake8 {posargs:docs scrapy tests} [testenv:pylint] # reppy does not support Python 3.9+ basepython = python3.8 deps = {[testenv:extra-deps]deps} pylint==2.15.3 commands = pylint conftest.py docs extras scrapy setup.py tests [testenv:twinecheck] basepython = python3 deps = twine==4.0.1 commands = python setup.py sdist twine check dist/* [pinned] deps = cryptography==3.3 cssselect==0.9.1 h2==3.0 itemadapter==0.1.0 parsel==1.5.0 Protego==0.1.15 pyOpenSSL==21.0.0 queuelib==1.4.2 service_identity==18.1.0 Twisted[http2]==18.9.0 w3lib==1.17.0 zope.interface==5.1.0 lxml==4.3.0 -rtests/requirements.txt # mitmproxy 4.0.4+ requires upgrading some of the pinned dependencies # above, hence we do not install it in pinned environments at the moment # Extras botocore==1.4.87 google-cloud-storage==1.29.0 Pillow==7.1.0 setenv = _SCRAPY_PINNED=true install_command = pip install -U {opts} {packages} [testenv:pinned] deps = {[pinned]deps} PyDispatcher==2.0.5 install_command = {[pinned]install_command} setenv = {[pinned]setenv} [testenv:windows-pinned] basepython = python3 deps = {[pinned]deps} PyDispatcher==2.0.5 install_command = {[pinned]install_command} setenv = {[pinned]setenv} [testenv:extra-deps] # reppy does not support Python 3.9+ basepython = python3.8 deps = {[testenv]deps} boto google-cloud-storage # Twisted[http2] currently forces old mitmproxy because of h2 version # restrictions in their deps, so we need to pin old markupsafe here too. markupsafe < 2.1.0 reppy robotexclusionrulesparser Pillow>=4.0.0 Twisted[http2]>=17.9.0 [testenv:asyncio] commands = {[testenv]commands} --reactor=asyncio [testenv:asyncio-pinned] deps = {[testenv:pinned]deps} commands = {[testenv:asyncio]commands} install_command = {[pinned]install_command} setenv = {[pinned]setenv} [testenv:pypy3] basepython = pypy3 commands = pytest {posargs:--durations=10 docs scrapy tests} [testenv:pypy3-pinned] basepython = {[testenv:pypy3]basepython} deps = {[pinned]deps} PyPyDispatcher==2.1.0 commands = {[testenv:pypy3]commands} install_command = {[pinned]install_command} setenv = {[pinned]setenv} [docs] changedir = docs deps = -rdocs/requirements.txt setenv = READTHEDOCS_PROJECT=scrapy READTHEDOCS_VERSION=master [testenv:docs] basepython = python3 changedir = {[docs]changedir} deps = {[docs]deps} setenv = {[docs]setenv} commands = sphinx-build -W -b html . {envtmpdir}/html [testenv:docs-coverage] basepython = python3 changedir = {[docs]changedir} deps = {[docs]deps} setenv = {[docs]setenv} commands = sphinx-build -b coverage . {envtmpdir}/coverage [testenv:docs-links] basepython = python3 changedir = {[docs]changedir} deps = {[docs]deps} setenv = {[docs]setenv} commands = sphinx-build -W -b linkcheck . {envtmpdir}/linkcheck