From 15d956380b660ef14166f6585149432e5941f201 Mon Sep 17 00:00:00 2001 From: Dong Jun Date: Thu, 22 Jun 2017 15:02:12 +0800 Subject: [PATCH] Enable pylint 1.4.5 This patch enables pylint 1.4.5 checking in ovsdbapp. Script tools/coding-checks.sh is copied from neutron and adapted for ovsdbapp. .pylintrc is also copied from neutron, message options that do not need to be suppressed have been removed. This patch also adjusts code to fit pylint 1.7.1 Change-Id: If27c9a13798f20f3c22ca62a38cb93e7ad602a18 --- .pylintrc | 82 +++++++++++++++++++++++++ ovsdbapp/backend/ovs_idl/idlutils.py | 4 +- ovsdbapp/schema/open_vswitch/helpers.py | 3 +- test-requirements.txt | 1 + tools/coding-checks.sh | 66 ++++++++++++++++++++ tox.ini | 1 + 6 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 .pylintrc create mode 100755 tools/coding-checks.sh diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 00000000..69a9c58e --- /dev/null +++ b/.pylintrc @@ -0,0 +1,82 @@ +# The format of this file isn't really documented; just use --generate-rcfile +[MASTER] +# Add to the black list. It should be a base name, not a +# path. You may set this option multiple times. +ignore=.git,tests + +[MESSAGES CONTROL] +# NOTE: This list is copied from neutron, the options which do not need to be +# suppressed have been removed. +disable= +# "F" Fatal errors that prevent further processing +# "I" Informational noise +# "E" Error for important programming issues (likely bugs) + no-member, +# "W" Warnings for stylistic problems or minor programming issues + arguments-differ, + attribute-defined-outside-init, + broad-except, + fixme, + protected-access, + redefined-outer-name, + unused-argument, + useless-super-delegation, +# "C" Coding convention violations + bad-continuation, + invalid-name, + missing-docstring, +# "R" Refactor recommendations + no-self-use, + 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-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 +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)$ + +[FORMAT] +# Maximum number of characters on a single line. +max-line-length=79 + +[VARIABLES] +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +[CLASSES] +# List of interface methods to ignore, separated by a comma. +ignore-iface-methods= + +[IMPORTS] +# Deprecated modules which should not be used, separated by a comma +deprecated-modules= + +[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 + diff --git a/ovsdbapp/backend/ovs_idl/idlutils.py b/ovsdbapp/backend/ovs_idl/idlutils.py index 80d1cb7d..e24e5c0d 100644 --- a/ovsdbapp/backend/ovs_idl/idlutils.py +++ b/ovsdbapp/backend/ovs_idl/idlutils.py @@ -156,7 +156,7 @@ def get_column_value(row, col): val = getattr(row, col) # Idl returns lists of Rows where ovs-vsctl returns lists of UUIDs - if isinstance(val, list) and len(val): + if isinstance(val, list) and val: if isinstance(val[0], idl.Row): val = [v.uuid for v in val] col_type = row._table.columns[col].type @@ -205,7 +205,7 @@ def condition_match(row, condition): if isinstance(match, dict): for key in match: if op == '=': - if (key not in val or match[key] != val[key]): + if key not in val or match[key] != val[key]: matched = False break elif op == '!=': diff --git a/ovsdbapp/schema/open_vswitch/helpers.py b/ovsdbapp/schema/open_vswitch/helpers.py index c1fe3f45..435980ba 100644 --- a/ovsdbapp/schema/open_vswitch/helpers.py +++ b/ovsdbapp/schema/open_vswitch/helpers.py @@ -23,8 +23,7 @@ def _connection_to_manager_uri(conn_uri): if ':' in addr: ip, port = addr.split(':', 1) return 'p%s:%s:%s' % (proto, port, ip) - else: - return 'p%s:%s' % (proto, addr) + return 'p%s:%s' % (proto, addr) # TODO(jlibosva): Get rid of this runtime configuration and raise a message to diff --git a/test-requirements.txt b/test-requirements.txt index fe5852b2..dada285a 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -10,6 +10,7 @@ sphinx!=1.6.1,>=1.5.1 # BSD oslosphinx>=4.7.0 # Apache-2.0 oslotest>=1.10.0 # Apache-2.0 os-testr>=0.8.0 # Apache-2.0 +pylint==1.4.5 # GPLv2 testrepository>=0.0.18 # Apache-2.0/BSD testscenarios>=0.4 # Apache-2.0/BSD testtools>=1.4.0 # MIT diff --git a/tools/coding-checks.sh b/tools/coding-checks.sh new file mode 100755 index 00000000..0aa78490 --- /dev/null +++ b/tools/coding-checks.sh @@ -0,0 +1,66 @@ +#!/bin/sh +# This script is copied from neutron and adapted for ovsdbapp. +set -eu + +usage () { + echo "Usage: $0 [OPTION]..." + echo "Run ovsdbapp's coding check(s)" + echo "" + echo " -Y, --pylint [] Run pylint check on the entire ovsdbapp module or just files changed in basecommit (e.g. HEAD~1)" + echo " -h, --help Print this usage message" + echo + exit 0 +} + +join_args() { + if [ -z "$scriptargs" ]; then + scriptargs="$opt" + else + scriptargs="$scriptargs $opt" + fi +} + +process_options () { + i=1 + while [ $i -le $# ]; do + eval opt=\$$i + case $opt in + -h|--help) usage;; + -Y|--pylint) pylint=1;; + *) join_args;; + esac + i=$((i+1)) + done +} + +run_pylint () { + local target="${scriptargs:-all}" + + if [ "$target" = "all" ]; then + files="ovsdbapp" + else + case "$target" in + *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~1, this change only)..." + if [ -n "${files}" ]; then + pylint --rcfile=.pylintrc --output-format=colorized ${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 dfed0a59..b272fd1c 100644 --- a/tox.ini +++ b/tox.ini @@ -16,6 +16,7 @@ commands = python setup.py testr --slowest --testr-args='{posargs}' [testenv:pep8] commands = flake8 {posargs} + {toxinidir}/tools/coding-checks.sh --pylint '{posargs}' [testenv:venv] commands = {posargs}