tox.ini
[tox]
envlist =
py{37,38,39,dev}-test{,-alldeps,-oldestdeps,-devdeps}{,-cov}{,-clocale}
py{37,38,39,dev}-test-numpy{,117,118,119}
py{37,38,39,dev}-test-astropy{40,lts}
build_docs
linkcheck
codestyle
requires =
setuptools >= 30.3.0
pip >= 19.3.1
tox-pypi-filter >= 0.12
isolated_build = true
indexserver =
NIGHTLY = https://pypi.anaconda.org/scipy-wheels-nightly/simple
[testenv]
# Pass through the following environment variables which are needed for the CI
passenv = HOME WINDIR LC_ALL LC_CTYPE CC CI TRAVIS TEST_READ_HUGE_FILE
# For coverage, we need to pass extra options to the C compiler
setenv =
cov: CFLAGS = --coverage -fno-inline-functions -O0
image: MPLFLAGS = --mpl
!image: MPLFLAGS =
clocale: LC_CTYPE = C.ascii
clocale: LC_ALL = C
# TODO Suppress display of matplotlib plots generated during docs build
# setenv = MPLBACKEND=agg
# Run the tests in a temporary directory to make sure that we don't import
# this package from the source tree
changedir = .tmp/{envname}
# tox environments are constructed with so-called 'factors' (or terms)
# separated by hyphens, e.g. test-devdeps-cov. Lines below starting with factor:
# will only take effect if that factor is included in the environment name. To
# see a list of example environments that can be run, along with a description,
# run:
#
# tox -l -v
#
description =
run tests
alldeps: with all optional dependencies
devdeps: with the latest developer version of key dependencies
oldestdeps: with the oldest supported version of key dependencies
cov: and test coverage
numpy117: with numpy 1.17.*
numpy118: with numpy 1.18.*
numpy119: with numpy 1.19.*
astropy40: with astropy 4.0.*
astropylts: with the latest astropy LTS
image: with image tests
mpldev: with the latest developer version of matplotlib
double: twice in a row to check for global state changes
# The following provides some specific pinnings for key packages
deps =
numpy117: numpy==1.17.*
numpy118: numpy==1.18.*
numpy119: numpy==1.19.*
astropy40: astropy==4.0.*
astropylts: astropy==4.0.*
image: pytest-mpl
# The oldestdeps factor is intended to be used to install the oldest versions of all
# dependencies that have a minimum version.
# pytest-openfiles pinned because of https://github.com/astropy/astropy/issues/10160
oldestdeps: numpy==1.17.*
oldestdeps: matplotlib==3.0.*
oldestdeps: asdf==2.6.*
oldestdeps: scipy==1.2.*
oldestdeps: pyyaml==3.13
# The devdeps factor is intended to be used to install the latest developer version
# or nightly wheel of key dependencies.
devdeps: :NIGHTLY:numpy
devdeps,mpldev: git+https://github.com/matplotlib/matplotlib.git#egg=matplotlib
devdeps: git+https://github.com/astropy/astropy.git#egg=astropy
devdeps: git+https://github.com/spacetelescope/asdf.git#egg=asdf
devdeps: git+https://github.com/liberfa/pyerfa.git#egg=pyerfa
# Linkcheck is broken with cryptic error with Sphinx 3.1.0
# https://github.com/astropy/astropy/issues/10489
# It also emits a warning from BLS docstring that we cannot banish with numpydoc 1.1.0
linkcheck: sphinx<3.1
linkcheck: numpydoc<1.1.0
# The following indicates which extras_require from setup.cfg will be installed
extras =
test
alldeps: all
commands =
pip freeze
!cov-!double: pytest --pyargs utilipy {toxinidir}/docs {env:MPLFLAGS} {posargs}
cov-!double: pytest --pyargs utilipy {toxinidir}/docs {env:MPLFLAGS} --cov utilipy --cov-config={toxinidir}/setup.cfg {posargs}
double: python -c 'import sys; from utilipy import test; test(); sys.exit(test())'
cov: coverage xml -o {toxinidir}/coverage.xml
# This lets developers to use tox to build docs and ignores warnings.
# This is not used in CI; For that, we have RTD PR builder.
[testenv:build_docs]
changedir = docs
description = invoke sphinx-build to build the HTML docs
extras = docs
commands =
pip freeze
sphinx-build -j auto -b html . _build/html
[testenv:linkcheck]
changedir = docs
description = check the links in the HTML docs
extras = docs
commands =
pip freeze
sphinx-build -W -b linkcheck . _build/html
[testenv:codestyle]
# We list the warnings/errors to check for here rather than in setup.cfg because
# we don't want these options to apply whenever anyone calls flake8 from the
# command-line or their code editor - in this case all warnings/errors should be
# checked for. The warnings/errors we check for here are:
# E101 - mix of tabs and spaces
# W191 - use of tabs
# W291 - trailing whitespace
# W292 - no newline at end of file
# W293 - trailing whitespace
# W391 - blank line at end of file
# E111 - 4 spaces per indentation level
# E112 - 4 spaces per indentation level
# E113 - 4 spaces per indentation level
# E301 - expected 1 blank line, found 0
# E302 - expected 2 blank lines, found 0
# E303 - too many blank lines (3)
# E304 - blank lines found after function decorator
# E305 - expected 2 blank lines after class or function definition
# E306 - expected 1 blank line before a nested definition
# E502 - the backslash is redundant between brackets
# E722 - do not use bare except
# E901 - SyntaxError or IndentationError
# E902 - IOError
# E999: SyntaxError -- failed to compile a file into an Abstract Syntax Tree
# F822: undefined name in __all__
# F823: local variable name referenced before assignment
skip_install = true
changedir = .
description = check code style, e.g. with flake8
deps = flake8
exclude =
*/_astropy_init.py
docs/conf.py
commands = flake8 utilipy --count --max-line-length=100
[testenv:unused_code]
basepython=python
deps = vulture
changedir = .
commands = vulture ./utilipy --min-confidence=80 --exclude utilipy/extern/
[testenv:mypy]
basepython=python
deps = mypy
changedir = .
commands = mypy ./utilipy --ignore-missing-imports
[testenv:black]
skip_install = true
changedir = .
description = check code style, with black
deps = black
commands = black ./utilipy -l 79 --check
[flake8]
ignore = F401, W503, E203, E743, F403, E702
exclude =
utilipy/_astropy_init.py
docs/conf.py