diff options
-rw-r--r-- | .pylintrc | 152 | ||||
-rwxr-xr-x | docs/testing/developer/devguide/devguide.rst | 2 | ||||
-rwxr-xr-x | run_tests.sh | 22 | ||||
-rw-r--r-- | tools/coding-checks.sh | 59 | ||||
-rw-r--r-- | tox.ini | 22 |
5 files changed, 221 insertions, 36 deletions
diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 000000000..c72427220 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,152 @@ +[MASTER] + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Use multiple processes to speed up Pylint. +jobs=1 + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist= + + +[MESSAGES CONTROL] + +# --disable=W" +disable= +# "F" Fatal errors that prevent further processing + import-error, +# "I" Informational noise + locally-disabled, +# "E" Error for important programming issues (likely bugs) + access-member-before-definition, + no-member, + no-method-argument, + no-self-argument, + not-an-iterable, +# "W" Warnings for stylistic problems or minor programming issues + abstract-method, + arguments-differ, + attribute-defined-outside-init, + bad-builtin, + bad-indentation, + dangerous-default-value, + deprecated-lambda, + expression-not-assigned, + global-statement, + literal-comparison, + no-init, + non-parent-init-called, + not-callable, + redefined-builtin, + redefined-outer-name, + signature-differs, + star-args, + super-init-not-called, + super-on-old-class, + unpacking-non-sequence, + useless-super-delegation, + nonstandard-exception, +# "C" Coding convention violations + bad-continuation, + consider-iterating-dictionary, + consider-using-enumerate, + invalid-name, + len-as-condition, + misplaced-comparison-constant, + singleton-comparison, + superfluous-parens, + ungrouped-imports, + wrong-import-order, +# "R" Refactor recommendations + abstract-class-little-used, + abstract-class-not-used, + consider-merging-isinstance, + consider-using-ternary, + duplicate-code, + interface-not-implemented, + no-else-return, + no-self-use, + redefined-argument-from-local, + simplifiable-if-statement, + too-few-public-methods, + too-many-ancestors, + too-many-arguments, + too-many-branches, + too-many-instance-attributes, + too-many-lines, + too-many-locals, + too-many-nested-blocks, + too-many-public-methods, + too-many-return-statements, + too-many-statements + +[BASIC] +# Variable names can be 1 to 31 characters long, with lowercase and underscores +variable-rgx=[a-z_][a-z0-9_]{0,30}$ + +# Argument names can be 2 to 31 characters long, with lowercase and underscores +argument-rgx=[a-z_][a-z0-9_]{1,30}$ + +# Method names should be at least 3 characters long +# and be lowercased with underscores +method-rgx=([a-z_][a-z0-9_]{2,}|setUp|tearDown)$ + +# Module names matching neutron-* are ok (files in bin/) +module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Don't require docstrings on tests. +no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$ + +dummy-variables-rgx=(_+[a-zA-Z0-9]*?$)|dummy|args + +[FORMAT] +# Maximum number of characters on a single line. +max-line-length=99 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + + +[VARIABLES] +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +# _ is used by our localization +additional-builtins=_ + + +[CLASSES] +# List of interface methods to ignore, separated by a comma. +ignore-iface-methods= + + +[TYPECHECK] +# List of module names for which member attributes should not be checked +ignored-modules=six.moves,_MovedItems + + +[REPORTS] +# Tells whether to display a full report or only the messages +reports=no + +# Set the output format. Available formats are text, parseable, colorized, msvs +# (visual studio) and html. You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=colorized + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME,XXX,TODO diff --git a/docs/testing/developer/devguide/devguide.rst b/docs/testing/developer/devguide/devguide.rst index da7629add..4f69456fc 100755 --- a/docs/testing/developer/devguide/devguide.rst +++ b/docs/testing/developer/devguide/devguide.rst @@ -372,7 +372,7 @@ directory using the ``cd`` command. Assume that ``YARDSTICK_REPO_DIR`` is the pa Verify your patch:: - ./run_tests.sh + tox It is used in CI but also by the CLI. diff --git a/run_tests.sh b/run_tests.sh index b3cbfb127..097935890 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -22,27 +22,6 @@ export PY_VER COVER_DIR_NAME="./tests/ci/" export COVER_DIR_NAME -run_flake8() { - echo "Running flake8 ... " - logfile=test_results.log - if [ $FILE_OPTION == "f" ]; then - flake8 yardstick > $logfile - else - flake8 yardstick - fi - - if [ $? -ne 0 ]; then - echo "FAILED" - if [ $FILE_OPTION == "f" ]; then - echo "Results in $logfile" - fi - exit 1 - else - echo "OK" - fi -} - - run_tests() { echo "Get external libs needed for unit test" @@ -90,7 +69,6 @@ run_functional_test() { } -run_flake8 run_tests run_coverage run_functional_test diff --git a/tools/coding-checks.sh b/tools/coding-checks.sh new file mode 100644 index 000000000..4ee909988 --- /dev/null +++ b/tools/coding-checks.sh @@ -0,0 +1,59 @@ +#!/bin/sh +# source: https://github.com/openstack/neutron/blob/master/tools/coding-checks.sh + +set -eu + +usage () { + echo "Usage: $0 [OPTION]..." + echo "Run Yardstick's coding check(s)" + echo "" + echo " -Y, --pylint [<basecommit>] Run pylint check on the entire neutron module or just files changed in basecommit (e.g. HEAD~1)" + echo " -h, --help Print this usage message" + echo + exit 0 +} + +process_options () { + i=1 + while [ $i -le $# ]; do + eval opt=\$$i + case $opt in + -h|--help) usage;; + -Y|--pylint) pylint=1;; + *) scriptargs="$scriptargs $opt" + esac + i=$((i+1)) + done +} + +run_pylint () { + local target="${scriptargs:-all}" + + if [ "$target" = "all" ]; then + files="ansible api tests yardstick" + else + case "$target" in + *HEAD*|*HEAD~[0-9]*) files=$(git diff --diff-filter=AM --name-only $target -- "*.py");; + *) echo "$target is an unrecognized basecommit"; exit 1;; + esac + fi + + echo "Running pylint..." + echo "You can speed this up by running it on 'HEAD~[0-9]' (e.g. HEAD~0, this change only)..." + if [ -n "${files}" ]; then + pylint --rcfile=.pylintrc ${files} + else + echo "No python changes in this commit, pylint check not required." + exit 0 + fi +} + +scriptargs= +pylint=1 + +process_options $@ + +if [ $pylint -eq 1 ]; then + run_pylint + exit 0 +fi @@ -1,7 +1,7 @@ [tox] minversion = 2.0 skipsdist = True -envlist = py27,py3 +envlist = py27,py3,pep8 [testenv] usedevelop=True @@ -12,24 +12,20 @@ deps = commands = /bin/bash ./run_tests.sh whitelist_externals = /bin/bash - [testenv:py27] # don't re-run coverage on both py27 py3, it takes too long setenv = SKIP_COVERAGE=1 -[flake8] -# E125 is deliberately excluded. See https://github.com/jcrocholl/pep8/issues/126 -# The rest of the ignores are TODOs -# New from hacking 0.9: E129, E131, H407, H405 -# E251 Skipped due to https://github.com/jcrocholl/pep8/issues/301 +[testenv:pep8] +# for gate testing, scans only the files changed in the last commit +commands = + /bin/bash tools/coding-checks.sh --pylint HEAD~ '{posargs}' -# nova flake8 ignores -#ignore = E121,E122,E123,E124,E125,E126,E127,E128,E129,E131,E251,H405 -# dovetail flake8 ignores -ignore = E123,E125,H803 -max-line-length = 99 -exclude = .venv,.git,.tox,dist,docs,*egg,build +[testenv:pep8-full] +# For manual testing, scans the whole codebase +commands = + /bin/bash tools/coding-checks.sh --pylint '{posargs}' [testenv:os-requirements] commands = |