From 1a92b1b05e7ed2a873dc7a1d554f0724fa2af904 Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Fri, 8 May 2015 16:20:39 -0700 Subject: [PATCH] Convert to using pocketlint for pylint rules Also cleanup some warnings. --- Makefile | 2 +- src/pylorax/__init__.py | 5 +- tests/pylint/pylint-false-positives | 3 - tests/pylint/pylint-one.sh | 32 ------- tests/pylint/runpylint.py | 38 ++++++++ tests/pylint/runpylint.sh | 139 ---------------------------- utils/filediff.py | 2 +- 7 files changed, 42 insertions(+), 179 deletions(-) delete mode 100644 tests/pylint/pylint-false-positives delete mode 100755 tests/pylint/pylint-one.sh create mode 100755 tests/pylint/runpylint.py delete mode 100755 tests/pylint/runpylint.sh diff --git a/Makefile b/Makefile index d9206693..017c008f 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ install: all check: @echo "*** Running pylint ***" - ./tests/pylint/runpylint.sh + PYTHONPATH=$(PYTHONPATH):./src/ ./tests/pylint/runpylint.py clean: -rm -rf build src/pylorax/version.py diff --git a/src/pylorax/__init__.py b/src/pylorax/__init__.py index c8ee96d8..e83635b7 100644 --- a/src/pylorax/__init__.py +++ b/src/pylorax/__init__.py @@ -154,8 +154,7 @@ class Lorax(BaseLoraxClass): add_templates=None, add_template_vars=None, add_arch_templates=None, - add_arch_template_vars=None, - template_tempdir=None): + add_arch_template_vars=None): assert self._configured @@ -295,7 +294,7 @@ class Lorax(BaseLoraxClass): logger.info("creating the runtime image") runtime = "images/install.img" compression = self.conf.get("compression", "type") - compressargs = self.conf.get("compression", "args").split() + compressargs = self.conf.get("compression", "args").split() # pylint: disable=no-member if self.conf.getboolean("compression", "bcj"): if self.arch.bcj: compressargs += ["-Xbcj", self.arch.bcj] diff --git a/tests/pylint/pylint-false-positives b/tests/pylint/pylint-false-positives deleted file mode 100644 index 449a192e..00000000 --- a/tests/pylint/pylint-false-positives +++ /dev/null @@ -1,3 +0,0 @@ -F0401 import-error Unable to import 'pylorax.version' -E0611 no-name-in-module No name 'version' in module 'pylorax' -E1101 no-member Module 'pylorax' has no 'version' member diff --git a/tests/pylint/pylint-one.sh b/tests/pylint/pylint-one.sh deleted file mode 100755 index dc34e8ee..00000000 --- a/tests/pylint/pylint-one.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# -# $1 -- python source to run pylint on -# - -if [ $# -lt 1 ]; then - # no source, just exit - exit 1 -fi - -file_suffix="$(eval echo \$$#|sed s?/?_?g)" - -pylint_output="$(python3-pylint \ - --msg-template='{path}:{line}: {msg_id} {symbol} {msg}' \ - -r n --disable=C,R --rcfile=/dev/null \ - --dummy-variables-rgx=_ \ - --ignored-classes=Popen,TransactionSet \ - --defining-attr-methods=__init__,_grabObjects,initialize,reset,start,setUp \ - $DISABLED_WARN_OPTIONS \ - $DISABLED_ERR_OPTIONS \ - $NON_STRICT_OPTIONS "$@" 2>&1 | \ - egrep -v -f "$FALSE_POSITIVES" \ - )" - -# I0011 is the informational "Locally disabling ...." message -if [ -n "$(echo "$pylint_output" | fgrep -v '************* Module ' |\ - grep -v '^I0011:')" ]; then - # Replace the Module line with the actual filename - pylint_output="$(echo "$pylint_output" | sed "s|\* Module .*|* Module $(eval echo \$$#)|")" - echo "$pylint_output" > pylint-out_$file_suffix - touch "pylint-$file_suffix-failed" -fi diff --git a/tests/pylint/runpylint.py b/tests/pylint/runpylint.py new file mode 100755 index 00000000..a3e2cac0 --- /dev/null +++ b/tests/pylint/runpylint.py @@ -0,0 +1,38 @@ +#!/usr/bin/python3 + +import sys + +from pocketlint import FalsePositive, PocketLintConfig, PocketLinter + +class LoraxLintConfig(PocketLintConfig): + def __init__(self): + PocketLintConfig.__init__(self) + + self.falsePositives = [ FalsePositive(r"No name 'version' in module 'pylorax'"), + FalsePositive(r"Module 'pylorax' has no 'version' member"), + FalsePositive(r"Instance of 'int' has no .* member"), + FalsePositive(r"ImageMinimizer.remove_rpm.runCallback: Unused argument .*") + ] + + @property + def disabledOptions(self): + return [ "I0011", # Locally disabling %s + "W0511", # FIXME/TODO/XXX + "W0141", # Used builtin function %s + ] + + @property + def pylintPlugins(self): + retval = super(LoraxLintConfig, self).pylintPlugins + # Not using threads so we can skip these + retval.remove("pocketlint.checkers.environ") + retval.remove("pocketlint.checkers.eintr") + # No markup used + retval.remove("pocketlint.checkers.markup") + return retval + +if __name__ == "__main__": + conf = LoraxLintConfig() + linter = PocketLinter(conf) + rc = linter.run() + sys.exit(rc) diff --git a/tests/pylint/runpylint.sh b/tests/pylint/runpylint.sh deleted file mode 100755 index aab61d93..00000000 --- a/tests/pylint/runpylint.sh +++ /dev/null @@ -1,139 +0,0 @@ -#!/bin/bash -# This script will check the project for any pylint warning and errors using a set -# of options minimizing false positives, in combination with filtering of any -# warning regularexpressions listed in pylint-false-positives. -# -# If any warnings are found they will be stored in pylint-log and printed -# to stdout and this script will exit with a status of 1, if no (non filtered) -# warnings are found it exits with a status of 0 - -# XDG_RUNTIME_DIR is "required" to be set, so make one up in case something -# actually tries to do something with it -if [ -z "$XDG_RUNTIME_DIR" ]; then - export XDG_RUNTIME_DIR="$(mktemp -d)" - trap "rm -rf \"$XDG_RUNTIME_DIR\"" EXIT -fi - -# If $top_srcdir is set, assume this is being run from automake and we don't -# need to keep a separate log -export pylint_log=0 -if [ -z "$top_srcdir" ]; then - export pylint_log=1 -fi - -# Unset TERM so that things that use readline don't output terminal garbage -unset TERM - -# Don't try to connect to the accessibility socket -export NO_AT_BRIDGE=1 - -# Force the GDK backend to X11. Otherwise if no display can be found, Gdk -# tries every backend type, which includes "broadway," which prints an error -# and keeps changing the content of said error. -export GDK_BACKEND=x11 - -# If $top_srcdir has not been set by automake, import the test environment -if [ -z "$top_srcdir" ]; then - top_srcdir="$(dirname "$0")/../.." - . ${top_srcdir}/tests/testenv.sh -fi - -. ${top_srcdir}/tests/lib/testlib.sh - -srcdir="${top_srcdir}/tests/pylint" -builddir="${top_builddir}/tests/pylint" - -# Need to add the pylint module directory to PYTHONPATH as well. -export PYTHONPATH="${PYTHONPATH}:${srcdir}" - -# Save analysis data in the pylint directory -export PYLINTHOME="${builddir}/.pylint.d" -[ -d "$PYLINTHOME" ] || mkdir "$PYLINTHOME" - -export FALSE_POSITIVES="${srcdir}"/pylint-false-positives - -# W0212 - Access to a protected member %s of a client class -export NON_STRICT_OPTIONS="--disable=W0212" - -# E1103 - %s %r has no %r member (but some types could not be inferred) -export DISABLED_ERR_OPTIONS="--disable=E1103" - -# W0110 - map/filter on lambda could be replaced by comprehension -# W0123 - Use of eval -# W0141 - Used builtin function %r -# W0142 - Used * or ** magic -# W0511 - Used when a warning note as FIXME or XXX is detected. -# W0603 - Using the global statement -# W0613 - Unused argument %r -# W0614 - Unused import %s from wildcard import -# I0011 - Locally disabling %s (i.e., pylint: disable) -# I0012 - Locally enabling %s (i.e., pylint: enable) -# I0013 - Ignoring entire file (i.e., pylint: skip-file) -export DISABLED_WARN_OPTIONS="--disable=W0110,W0123,W0141,W0142,W0511,W0603,W0613,W0614,I0011,I0012,I0013" - -usage () { - echo "usage: `basename $0` [--strict] [--help] [files...]" - exit $1 -} - -# Separate the module parameters from the files list -ARGS= -FILES= -while [ $# -gt 0 ]; do - case $1 in - --strict) - export NON_STRICT_OPTIONS= - ;; - --help) - usage 0 - ;; - -*) - ARGS="$ARGS $1" - ;; - *) - FILES=$@ - break - esac - shift -done - -exit_status=0 - -if [ -s pylint-log ]; then - rm pylint-log -fi - -# run pylint one file / module at a time, otherwise it sometimes gets -# confused -if [ -z "$FILES" ]; then - # Test any file that either ends in .py or contains #!/usr/bin/python in - # the first line. Scan everything except old_tests - FILES=$(findtestfiles \( -name '*.py' -o \ - -exec /bin/sh -c "head -1 {} | grep -q '#!/usr/bin/python'" \; \) -print | \ - egrep -v '(|/)old_tests/') -fi - -num_cpus=$(getconf _NPROCESSORS_ONLN) -# run pylint in paralel -echo $FILES | xargs --max-procs=$num_cpus -n 1 "$srcdir"/pylint-one.sh $ARGS || exit 1 - -for file in $(find -name 'pylint-out*'); do - cat "$file" >> pylint-log - rm "$file" -done - -fails=$(find -name 'pylint*failed' -print -exec rm '{}' \;) -if [ -z "$fails" ]; then - exit_status=0 -else - exit_status=1 -fi - -if [ -s pylint-log ]; then - echo "pylint reports the following issues:" - cat pylint-log -elif [ -e pylint-log ]; then - rm pylint-log -fi - -exit "$exit_status" diff --git a/utils/filediff.py b/utils/filediff.py index b5543aca..37ce65c8 100644 --- a/utils/filediff.py +++ b/utils/filediff.py @@ -2,7 +2,7 @@ import sys import os import magic import difflib -import yum +import yum # pylint: disable=import-error import operator