cros lint: upgrade to pylint-1.7
This includes some more Python 3 related compat checks.
Disable the no-else-return check as we're OK with the style.
BUG=chromium:980619
TEST=`cros lint` is unchanged
Change-Id: I4ed3c3877795ea00db89fcf3f005e397e8ed784f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1849355
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Chris McDonald <cjmcdonald@chromium.org>
diff --git a/api/field_handler.py b/api/field_handler.py
index e6c1418..a9caff1 100644
--- a/api/field_handler.py
+++ b/api/field_handler.py
@@ -21,7 +21,10 @@
from chromite.lib import cros_logging as logging
from chromite.lib import osutils
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import message as protobuf_message
+# pylint: enable=no-name-in-module
class Error(Exception):
diff --git a/api/router.py b/api/router.py
index 32f7b98..db0403a 100644
--- a/api/router.py
+++ b/api/router.py
@@ -14,8 +14,11 @@
import importlib
import os
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import json_format
from google.protobuf import symbol_database
+# pylint: enable=no-name-in-module
from chromite.api import controller
from chromite.api import field_handler
diff --git a/api/router_unittest.py b/api/router_unittest.py
index 742ed69..2375e73 100644
--- a/api/router_unittest.py
+++ b/api/router_unittest.py
@@ -9,7 +9,10 @@
import os
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import json_format
+# pylint: enable=no-name-in-module
from chromite.api import api_config
from chromite.api import router
diff --git a/api/validate.py b/api/validate.py
index f924d11..f3659b8 100644
--- a/api/validate.py
+++ b/api/validate.py
@@ -19,7 +19,10 @@
from chromite.lib import cros_build_lib
from chromite.lib import cros_logging as logging
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import message as protobuf_message
+# pylint: enable=no-name-in-module
def _value(field, message):
diff --git a/cbuildbot/commands.py b/cbuildbot/commands.py
index eeea3f6..7071fa7 100644
--- a/cbuildbot/commands.py
+++ b/cbuildbot/commands.py
@@ -52,7 +52,10 @@
from chromite.scripts import pushimage
from chromite.service import artifacts as artifacts_service
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import json_format
+# pylint: enable=no-name-in-module
_PACKAGE_FILE = '%(buildroot)s/src/scripts/cbuildbot_package.list'
diff --git a/cbuildbot/stages/artifact_stages.py b/cbuildbot/stages/artifact_stages.py
index 3b80342..4ee4dc4 100644
--- a/cbuildbot/stages/artifact_stages.py
+++ b/cbuildbot/stages/artifact_stages.py
@@ -41,6 +41,8 @@
class NothingToArchiveException(Exception):
"""Thrown if ArchiveStage found nothing to archive."""
+ # We duplicate __init__ to specify a default for message.
+ # pylint: disable=useless-super-delegation
def __init__(self, message='No images found to archive.'):
super(NothingToArchiveException, self).__init__(message)
diff --git a/cbuildbot/stages/completion_stages_unittest.py b/cbuildbot/stages/completion_stages_unittest.py
index 29e7bdd..c75f8af 100644
--- a/cbuildbot/stages/completion_stages_unittest.py
+++ b/cbuildbot/stages/completion_stages_unittest.py
@@ -538,7 +538,7 @@
BOT_ID = 'master-release'
# We duplicate __init__ to specify a default for bot_id.
- # pylint: disable=arguments-differ
+ # pylint: disable=arguments-differ,useless-super-delegation
def _Prepare(self, bot_id=BOT_ID, **kwargs):
super(CanaryCompletionStageTest, self)._Prepare(bot_id, **kwargs)
diff --git a/cli/cros/cros_lint.py b/cli/cros/cros_lint.py
index 3025c01..a7ac77e 100644
--- a/cli/cros/cros_lint.py
+++ b/cli/cros/cros_lint.py
@@ -159,7 +159,7 @@
def _PylintFile(path, output_format, debug):
"""Returns result of running pylint on |path|."""
- pylint = os.path.join(constants.DEPOT_TOOLS_DIR, 'pylint-1.6')
+ pylint = os.path.join(constants.DEPOT_TOOLS_DIR, 'pylint-1.7')
pylintrc = _GetPylintrc(path)
cmd = [pylint, '--rcfile=%s' % pylintrc]
if output_format != 'default':
diff --git a/cli/cros/lint.py b/cli/cros/lint.py
index 20a101d..611533e 100644
--- a/cli/cros/lint.py
+++ b/cli/cros/lint.py
@@ -596,7 +596,7 @@
if name == 'print_function':
self.seen_print_func = True
- def visit_from(self, node):
+ def visit_importfrom(self, node):
"""Process 'from' statements"""
self.saw_imports = True
self._check_print_function(node)
@@ -646,11 +646,11 @@
def visit_module(self, node):
"""Called when the whole file has been read"""
- stream = node.file_stream
- st = os.fstat(stream.fileno())
- self._check_shebang(node, stream, st)
- self._check_encoding(node, stream, st)
- self._check_module_name(node)
+ with node.stream() as stream:
+ st = os.fstat(stream.fileno())
+ self._check_shebang(node, stream, st)
+ self._check_encoding(node, stream, st)
+ self._check_module_name(node)
def _check_shebang(self, _node, stream, st):
"""Verify the shebang is version specific"""
diff --git a/cli/deploy.py b/cli/deploy.py
index c8a66f1..97306b2 100644
--- a/cli/deploy.py
+++ b/cli/deploy.py
@@ -1092,6 +1092,8 @@
lsb_release = None
sysroot = None
try:
+ # Somewhat confusing to clobber, but here we are.
+ # pylint: disable=redefined-argument-from-local
with remote_access.ChromiumOSDeviceHandler(
hostname, port=port, username=username, private_key=ssh_private_key,
base_dir=_DEVICE_BASE_DIR, ping=ping) as device:
diff --git a/config/config_skew_unittest.py b/config/config_skew_unittest.py
index 5dbc9a4..5dae44c 100644
--- a/config/config_skew_unittest.py
+++ b/config/config_skew_unittest.py
@@ -14,7 +14,12 @@
from chromite.lib import constants
from chromite.lib import cros_test_lib
from chromite.lib import osutils
+
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import json_format
+# pylint: enable=no-name-in-module
+
BUILDER_CONFIG_FILENAME = os.path.join(
constants.SOURCE_ROOT, 'infra/config/generated/builder_configs.cfg')
diff --git a/lib/buildbot_annotations.py b/lib/buildbot_annotations.py
index 2caa7ff..b1b25ca 100644
--- a/lib/buildbot_annotations.py
+++ b/lib/buildbot_annotations.py
@@ -62,6 +62,9 @@
"""STEP_LINK annotation."""
ANNOTATION_NAME = 'STEP_LINK'
+ # Some callers pass in text/url by kwarg. We leave the full signature here
+ # so the API is a bit cleaner/more obvious.
+ # pylint: disable=useless-super-delegation
def __init__(self, text, url):
super(StepLink, self).__init__(text, url)
diff --git a/lib/buildbucket_v2.py b/lib/buildbucket_v2.py
index 9de1d35..467689c 100644
--- a/lib/buildbucket_v2.py
+++ b/lib/buildbucket_v2.py
@@ -17,7 +17,10 @@
import ast
import socket
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import field_mask_pb2
+# pylint: enable=no-name-in-module
from chromite.lib import constants
from chromite.lib import cros_logging as logging
diff --git a/lib/buildbucket_v2_unittest.py b/lib/buildbucket_v2_unittest.py
index 32f1d56..a823911 100644
--- a/lib/buildbucket_v2_unittest.py
+++ b/lib/buildbucket_v2_unittest.py
@@ -9,9 +9,12 @@
from datetime import datetime, date
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import field_mask_pb2
from google.protobuf.struct_pb2 import Struct, Value
from google.protobuf.timestamp_pb2 import Timestamp
+# pylint: enable=no-name-in-module
from chromite.lib import buildbucket_v2
from chromite.lib import constants
diff --git a/lib/cloud_trace.py b/lib/cloud_trace.py
index 4a3b8f5..9bf78bd 100644
--- a/lib/cloud_trace.py
+++ b/lib/cloud_trace.py
@@ -14,7 +14,10 @@
import random
import re
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
import google.protobuf.internal.well_known_types as types
+# pylint: enable=no-name-in-module
from infra_libs import ts_mon
from chromite.lib import cros_logging as log
diff --git a/lib/cros_test_lib.py b/lib/cros_test_lib.py
index ebe0562..8b49da1 100644
--- a/lib/cros_test_lib.py
+++ b/lib/cros_test_lib.py
@@ -1367,6 +1367,8 @@
SORT_STATS_KEYS = ()
def run(self, test):
+ # TODO(vapier): Drop this after we upgrade past pylint-1.7.
+ # pylint: disable=bad-python3-import
import cProfile
profiler = cProfile.Profile(**self.PROFILE_KWARGS)
ret = profiler.runcall(unittest.TextTestRunner.run, self, test)
diff --git a/lib/gob_util.py b/lib/gob_util.py
index 2c3f0a8..8dd01a6 100644
--- a/lib/gob_util.py
+++ b/lib/gob_util.py
@@ -222,7 +222,7 @@
except httplib2.ServerNotFoundError as e:
pass
- if not 'Authorization' in headers:
+ if 'Authorization' not in headers:
logging.debug('No netrc file or Appengine credentials found.')
if 'Cookie' not in headers:
cookies = GetCookies(host, path)
diff --git a/lib/locking.py b/lib/locking.py
index fa970b5..38f65df 100644
--- a/lib/locking.py
+++ b/lib/locking.py
@@ -338,6 +338,8 @@
pipe2 = getattr(os, 'pipe2', None)
if pipe2:
cloexec = getattr(os, 'O_CLOEXEC', 0)
+ # Pylint-1.7 is unable to handle this conditional logic.
+ # pylint: disable=not-callable
pipes = pipe2(cloexec)
else:
pipes = os.pipe()
diff --git a/lib/luci/prpc/client.py b/lib/luci/prpc/client.py
index 96780fe..aed4d6d 100644
--- a/lib/luci/prpc/client.py
+++ b/lib/luci/prpc/client.py
@@ -15,7 +15,10 @@
import collections
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import symbol_database
+# pylint: enable=no-name-in-module
from chromite.lib.luci import net
from chromite.lib.luci.prpc import codes, encoding
diff --git a/lib/luci/prpc/client_unittest.py b/lib/luci/prpc/client_unittest.py
index e5234b2..5e3f801 100644
--- a/lib/luci/prpc/client_unittest.py
+++ b/lib/luci/prpc/client_unittest.py
@@ -11,7 +11,10 @@
import sys
import unittest
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import empty_pb2
+# pylint: enable=no-name-in-module
import mock
from chromite.lib.luci import net
diff --git a/lib/luci/prpc/encoding.py b/lib/luci/prpc/encoding.py
index 8e68823..f7047b6 100644
--- a/lib/luci/prpc/encoding.py
+++ b/lib/luci/prpc/encoding.py
@@ -7,7 +7,10 @@
from __future__ import print_function
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import json_format, text_format
+# pylint: enable=no-name-in-module
class Encoding(object):
diff --git a/lib/luci/utils.py b/lib/luci/utils.py
index 0d01601..3599d99 100644
--- a/lib/luci/utils.py
+++ b/lib/luci/utils.py
@@ -23,7 +23,10 @@
import sys
import threading
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import timestamp_pb2
+# pylint: enable=no-name-in-module
import six
from six.moves import urllib
diff --git a/lib/luci/utils_unittest.py b/lib/luci/utils_unittest.py
index f973272..b8a2cf3 100644
--- a/lib/luci/utils_unittest.py
+++ b/lib/luci/utils_unittest.py
@@ -9,7 +9,10 @@
from datetime import datetime, date
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf.timestamp_pb2 import Timestamp
+# pylint: enable=no-name-in-module
from chromite.lib import cros_test_lib
from chromite.lib.luci import utils
diff --git a/lib/patch.py b/lib/patch.py
index a6e90ea..eac1f50 100644
--- a/lib/patch.py
+++ b/lib/patch.py
@@ -1677,6 +1677,8 @@
# remote: https://chromium-review.googlesource.com/36756 Enforce a ...
if 'New Changes:' in line:
urls = []
+ # We're exiting the loop after this point.
+ # pylint: disable=redefined-outer-name
for line in lines[num + 1:]:
line = line.split()
if len(line) < 2 or not line[1].startswith('http'):
diff --git a/lib/paygen/paygen_build_lib.py b/lib/paygen/paygen_build_lib.py
index 25c55ab..f0e65a8 100644
--- a/lib/paygen/paygen_build_lib.py
+++ b/lib/paygen/paygen_build_lib.py
@@ -38,7 +38,11 @@
from chromite.lib.paygen import paygen_payload_lib
from chromite.lib.paygen import utils
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from google.protobuf import json_format
+# pylint: enable=no-name-in-module
+
# For crostools access.
sys.path.insert(0, constants.SOURCE_ROOT)
diff --git a/pylintrc b/pylintrc
index c51a9f3..6e0f83e 100644
--- a/pylintrc
+++ b/pylintrc
@@ -134,6 +134,7 @@
locally-enabled,
missing-docstring,
no-member,
+ no-else-return,
no-self-use,
redefined-variable-type,
relative-import,
@@ -165,6 +166,9 @@
# CHANGE: No report.
reports=no
+# Activate the evaluation score.
+score=no
+
# 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
diff --git a/scripts/export_to_cloud_trace.py b/scripts/export_to_cloud_trace.py
index b0a0b36..f54f234 100644
--- a/scripts/export_to_cloud_trace.py
+++ b/scripts/export_to_cloud_trace.py
@@ -13,8 +13,11 @@
import pprint
import time
+# TODO(vapier): Re-enable check once we upgrade to pylint-1.8+.
+# pylint: disable=no-name-in-module
from googleapiclient import discovery
import google.protobuf.internal.well_known_types as types
+# pylint: enable=no-name-in-module
from infra_libs import ts_mon
import inotify_simple # pylint: disable=import-error
from oauth2client.client import GoogleCredentials
diff --git a/scripts/fwgdb.py b/scripts/fwgdb.py
index f2691bb..b1aa91f 100644
--- a/scripts/fwgdb.py
+++ b/scripts/fwgdb.py
@@ -43,13 +43,13 @@
def GetGdbForElf(elf):
"""Return the correct C compiler prefix for the target ELF file."""
- with open(elf, 'rb') as elf:
+ with open(elf, 'rb') as fp:
return {
'EM_386': 'x86_64-cros-linux-gnu-gdb',
'EM_X86_64': 'x86_64-cros-linux-gnu-gdb',
'EM_ARM': 'armv7a-cros-linux-gnueabihf-gdb',
'EM_AARCH64': 'aarch64-cros-linux-gnu-gdb',
- }[ELFFile(elf).header.e_machine]
+ }[ELFFile(fp).header.e_machine]
def ParseArgs(argv):