2017-03-25 05:00:42 +01:00
|
|
|
[tox]
|
|
|
|
envlist = py26,py27,py33,py34,py35,py36,py37,jython,pypy,pypy3,cov,type,lint
|
|
|
|
skipsdist = true
|
|
|
|
skip_missing_interpreters = true
|
|
|
|
|
|
|
|
[testenv]
|
|
|
|
deps =
|
|
|
|
pytest==3.0.7
|
|
|
|
coverage==4.3.4
|
|
|
|
colorama==0.3.7
|
|
|
|
setenv =
|
|
|
|
SSHAUDIT = {toxinidir}/ssh-audit.py
|
|
|
|
COVERAGE_FILE = {toxinidir}/.coverage.{envname}
|
|
|
|
commands =
|
|
|
|
coverage run --source ssh-audit -m -- pytest -v {posargs:test}
|
|
|
|
coverage report --show-missing
|
|
|
|
coverage html -d {toxinidir}/html/coverage.{envname}
|
|
|
|
|
|
|
|
[testenv:cov]
|
|
|
|
deps =
|
|
|
|
coverage==4.3.4
|
|
|
|
setenv =
|
|
|
|
COVERAGE_FILE = {toxinidir}/.coverage
|
|
|
|
commands =
|
|
|
|
coverage erase
|
|
|
|
coverage combine
|
|
|
|
coverage report --show-missing
|
|
|
|
coverage html -d {toxinidir}/html/coverage
|
|
|
|
ignore_outcome = true
|
|
|
|
|
|
|
|
[testenv:mypy]
|
|
|
|
basepython =
|
|
|
|
{env:MYPYBASE:python3.5}
|
|
|
|
deps =
|
|
|
|
colorama==0.3.7
|
|
|
|
mypy==0.501
|
|
|
|
lxml==3.7.3
|
|
|
|
setenv =
|
|
|
|
{[testenv]setenv}
|
|
|
|
MYPYPATH = {toxinidir}/test/stubs
|
|
|
|
MYPYHTML = {toxinidir}/html/mypy
|
|
|
|
commands =
|
|
|
|
mypy \
|
|
|
|
--show-error-context \
|
|
|
|
--config-file {toxinidir}/tox.ini \
|
|
|
|
--html-report {env:MYPYHTML}.py3 \
|
|
|
|
{posargs:{env:SSHAUDIT}}
|
|
|
|
mypy \
|
|
|
|
-2 \
|
|
|
|
--no-warn-incomplete-stub \
|
|
|
|
--show-error-context \
|
|
|
|
--config-file {toxinidir}/tox.ini \
|
|
|
|
--html-report {env:MYPYHTML}.py2 \
|
|
|
|
{posargs:{env:SSHAUDIT}}
|
|
|
|
|
|
|
|
[testenv:pylint]
|
|
|
|
deps =
|
|
|
|
mccabe
|
|
|
|
pylint
|
|
|
|
commands =
|
|
|
|
pylint \
|
|
|
|
--rcfile tox.ini \
|
|
|
|
--load-plugins=pylint.extensions.bad_builtin \
|
|
|
|
--load-plugins=pylint.extensions.check_elif \
|
|
|
|
--load-plugins=pylint.extensions.mccabe \
|
|
|
|
{posargs:{env:SSHAUDIT}}
|
|
|
|
|
|
|
|
[testenv:flake8]
|
|
|
|
deps =
|
|
|
|
flake8
|
|
|
|
commands =
|
|
|
|
flake8 {posargs:{env:SSHAUDIT}}
|
|
|
|
|
|
|
|
[testenv:vulture]
|
|
|
|
deps = vulture
|
|
|
|
commands =
|
|
|
|
python -c "import sys; from subprocess import Popen, PIPE; \
|
|
|
|
a = ['vulture'] + r'{posargs:{env:SSHAUDIT}}'.split(' '); \
|
|
|
|
o = Popen(a, shell=False, stdout=PIPE).communicate()[0]; \
|
2017-03-25 07:33:16 +01:00
|
|
|
l = [x for x in o.split(b'\n') if x and b'Unused import' not in x]; \
|
|
|
|
print(b'\n'.join(l).decode('utf-8')); \
|
2017-03-25 05:00:42 +01:00
|
|
|
sys.exit(1 if len(l) > 0 else 0)"
|
|
|
|
|
|
|
|
[testenv:type]
|
|
|
|
basepython =
|
|
|
|
{[testenv:mypy]basepython}
|
|
|
|
deps =
|
|
|
|
{[testenv:mypy]deps}
|
|
|
|
setenv =
|
|
|
|
{[testenv:mypy]setenv}
|
|
|
|
commands =
|
|
|
|
{[testenv:mypy]commands}
|
|
|
|
ignore_outcome = true
|
|
|
|
|
|
|
|
[testenv:lint]
|
|
|
|
deps =
|
|
|
|
{[testenv:pylint]deps}
|
|
|
|
{[testenv:flake8]deps}
|
|
|
|
{[testenv:vulture]deps}
|
|
|
|
commands =
|
|
|
|
{[testenv:pylint]commands}
|
|
|
|
{[testenv:flake8]commands}
|
|
|
|
{[testenv:vulture]commands}
|
|
|
|
ignore_outcome = true
|
|
|
|
|
|
|
|
|
|
|
|
[mypy]
|
|
|
|
ignore_missing_imports = False
|
|
|
|
follow_imports = error
|
|
|
|
disallow_untyped_calls = True
|
|
|
|
disallow_untyped_defs = True
|
|
|
|
check_untyped_defs = True
|
|
|
|
disallow_subclassing_any = True
|
|
|
|
warn_incomplete_stub = True
|
|
|
|
warn_redundant_casts = True
|
|
|
|
warn_return_any = True
|
|
|
|
warn_unused_ignores = True
|
|
|
|
strict_optional = True
|
|
|
|
#strict_boolean = False
|
|
|
|
|
|
|
|
[pylint]
|
|
|
|
reports = no
|
|
|
|
#output-format = colorized
|
|
|
|
indent-string = \t
|
|
|
|
disable = locally-disabled, bad-continuation, multiple-imports, invalid-name, trailing-whitespace, missing-docstring
|
|
|
|
max-complexity = 15
|
|
|
|
max-args = 8
|
|
|
|
max-locals = 20
|
|
|
|
max-returns = 6
|
|
|
|
max-branches = 15
|
|
|
|
max-statements = 60
|
|
|
|
max-parents = 7
|
|
|
|
max-attributes = 8
|
|
|
|
min-public-methods = 1
|
|
|
|
max-public-methods = 20
|
|
|
|
max-bool-expr = 5
|
|
|
|
max-nested-blocks = 6
|
|
|
|
max-line-length = 80
|
|
|
|
ignore-long-lines = ^\s*(#\s+type:\s+.*|[A-Z0-9_]+\s+=\s+.*|('.*':\s+)?\[.*\],?)$
|
|
|
|
max-module-lines = 2500
|
|
|
|
|
|
|
|
[flake8]
|
|
|
|
ignore =
|
|
|
|
# indentation contains tabs
|
|
|
|
W191,
|
|
|
|
# blank line contains whitespace
|
|
|
|
W293,
|
|
|
|
# indentation contains mixed spaces and tabs
|
|
|
|
E101,
|
|
|
|
# multiple spaces before operator
|
|
|
|
E221,
|
|
|
|
# multiple spaces after operator
|
|
|
|
E241,
|
|
|
|
# multiple imports on one line
|
|
|
|
E401,
|
|
|
|
# line too long
|
|
|
|
E501,
|
|
|
|
# module imported but unused
|
|
|
|
F401,
|
|
|
|
# undefined name
|
|
|
|
F821
|