aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.pylintrc152
-rwxr-xr-xdocs/testing/developer/devguide/devguide.rst2
-rwxr-xr-xrun_tests.sh22
-rw-r--r--tools/coding-checks.sh59
-rw-r--r--tox.ini22
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
diff --git a/tox.ini b/tox.ini
index 6c568f3fe..882543d0c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -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 =