![Monty Taylor](/assets/img/avatar_default.png)
python3 includes support for optional type annotations which can be used by static analysis tools to perform type checking. The mypy tool is a static type checking tool that can also infer type information in many cases, but which will use explicit type information if it is present. Add mypy to test-requirements and to the pep8 job so that our pep8 job can do more analysis work and less with the code style. To support this, there were a few places in the current codebase that needed an explicit type hint. For variables/attributes in 3.5 this is done via comments. There is a conditional import that was confusion that just got marked with an 'ignore'. Our ansible action and lookup plugins confuse mypi with the way they import the ansible base classes. That's ok - they confuse us with that too. The .pyi files are 'typeshed' files, which are a way that one can provide static type annotations without putting the information into the file itself. mypy will always prefer a .pyi file over a .py file (since the point of them is to be external annotion/interface description) So in order to get mypy to not barf on the ansible import weirdness, just add a corresponding empty .pyi file. We could potentially actually put interface descriptions in them - but I don't think there is very much value in that. It should be amusing to at least someone that we have to flake8: noqa an import from typing that was done to provide a type hint in a comment. Change-Id: I6c4ac3dcfc6fd990e6c6886749de147ad28389d1
61 lines
1.8 KiB
INI
61 lines
1.8 KiB
INI
[tox]
|
|
minversion = 1.6
|
|
skipsdist = True
|
|
envlist = pep8,py35
|
|
|
|
[testenv]
|
|
basepython = python3
|
|
# Set STATSD env variables so that statsd code paths are tested.
|
|
setenv = STATSD_HOST=127.0.0.1
|
|
STATSD_PORT=8125
|
|
VIRTUAL_ENV={envdir}
|
|
OS_TEST_TIMEOUT=120
|
|
passenv = ZUUL_TEST_ROOT OS_STDOUT_CAPTURE OS_STDERR_CAPTURE OS_LOG_CAPTURE OS_LOG_DEFAULTS
|
|
usedevelop = True
|
|
install_command = pip install {opts} {packages}
|
|
deps = -r{toxinidir}/requirements.txt
|
|
-r{toxinidir}/test-requirements.txt
|
|
commands =
|
|
python setup.py test --slowest --testr-args='{posargs}'
|
|
|
|
[testenv:bindep]
|
|
# Do not install any requirements. We want this to be fast and work even if
|
|
# system dependencies are missing, since it's used to tell you what system
|
|
# dependencies are missing! This also means that bindep must be installed
|
|
# separately, outside of the requirements files.
|
|
deps = bindep
|
|
commands = bindep test
|
|
|
|
[testenv:pep8]
|
|
# --ignore-missing-imports tells mypy to not try to follow imported modules
|
|
# out of the current tree. As you might expect, we don't want to run static
|
|
# type checking on the world - just on ourselves.
|
|
commands =
|
|
flake8 {posargs}
|
|
mypy --ignore-missing-imports zuul
|
|
|
|
[testenv:cover]
|
|
commands =
|
|
python setup.py test --coverage
|
|
|
|
[testenv:docs]
|
|
commands = python setup.py build_sphinx
|
|
|
|
[testenv:venv]
|
|
commands = {posargs}
|
|
|
|
[testenv:validate-layout]
|
|
commands = zuul-server -c etc/zuul.conf-sample -t -l {posargs}
|
|
|
|
[testenv:nodepool]
|
|
setenv =
|
|
OS_TEST_PATH = ./tests/nodepool
|
|
commands = python setup.py test --slowest --testr-args='--concurrency=1 {posargs}'
|
|
|
|
[flake8]
|
|
# These are ignored intentionally in openstack-infra projects;
|
|
# please don't submit patches that solely correct them or enable them.
|
|
ignore = E125,E129,E402,H,W503
|
|
show-source = True
|
|
exclude = .venv,.tox,dist,doc,build,*.egg
|