From a31f4c178ac58de355d84aad447301834d426d14 Mon Sep 17 00:00:00 2001 From: Matt Clay <matt@mystile.com> Date: Fri, 18 Aug 2017 11:21:53 -0700 Subject: [PATCH] Fix pep8/pylint tests when deleting files. (#28410) * Fix pep8/pylint tests when deleting files. * Improve static analysis in PyCharm. * Use success instead of skipped for explain. --- test/runner/lib/sanity.py | 67 ++++++++++++++++++++------------------- test/runner/lib/test.py | 4 ++- 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/test/runner/lib/sanity.py b/test/runner/lib/sanity.py index 0ffa28ad76e..0365589b122 100644 --- a/test/runner/lib/sanity.py +++ b/test/runner/lib/sanity.py @@ -206,7 +206,7 @@ def command_sanity_validate_modules(args, targets): raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout) if args.explain: - return SanitySkipped(test) + return SanitySuccess(test) messages = json.loads(stdout) @@ -268,7 +268,7 @@ def command_sanity_shellcheck(args, targets): raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout) if args.explain: - return SanitySkipped(test) + return SanitySuccess(test) # json output is missing file paths in older versions of shellcheck, so we'll use xml instead root = fromstring(stdout) # type: Element @@ -317,9 +317,6 @@ def command_sanity_pep8(args, targets): paths = sorted(i.path for i in targets.include if (os.path.splitext(i.path)[1] == '.py' or i.path.startswith('bin/')) and i.path not in skip_paths_set) - if not paths: - return SanitySkipped(test) - cmd = [ 'pycodestyle', '--max-line-length', '160', @@ -327,23 +324,29 @@ def command_sanity_pep8(args, targets): '--ignore', ','.join(sorted(current_ignore)), ] + paths - try: - stdout, stderr = run_command(args, cmd, capture=True) - status = 0 - except SubprocessError as ex: - stdout = ex.stdout - stderr = ex.stderr - status = ex.status + if paths: + try: + stdout, stderr = run_command(args, cmd, capture=True) + status = 0 + except SubprocessError as ex: + stdout = ex.stdout + stderr = ex.stderr + status = ex.status - if stderr: - raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout) + if stderr: + raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout) + else: + stdout = None if args.explain: - return SanitySkipped(test) + return SanitySuccess(test) - pattern = '^(?P<path>[^:]*):(?P<line>[0-9]+):(?P<column>[0-9]+): (?P<code>[WE][0-9]{3}) (?P<message>.*)$' + if stdout: + pattern = '^(?P<path>[^:]*):(?P<line>[0-9]+):(?P<column>[0-9]+): (?P<code>[WE][0-9]{3}) (?P<message>.*)$' - results = [re.search(pattern, line).groupdict() for line in stdout.splitlines()] + results = [re.search(pattern, line).groupdict() for line in stdout.splitlines()] + else: + results = [] results = [SanityMessage( message=r['message'], @@ -460,9 +463,6 @@ def command_sanity_pylint(args, targets): paths = sorted(i.path for i in targets.include if (os.path.splitext(i.path)[1] == '.py' or i.path.startswith('bin/')) and i.path not in skip_paths_set) - if not paths: - return SanitySkipped(test) - cmd = [ 'pylint', '--jobs', '0', @@ -477,19 +477,22 @@ def command_sanity_pylint(args, targets): env = ansible_environment(args) - try: - stdout, stderr = run_command(args, cmd, env=env, capture=True) - status = 0 - except SubprocessError as ex: - stdout = ex.stdout - stderr = ex.stderr - status = ex.status + if paths: + try: + stdout, stderr = run_command(args, cmd, env=env, capture=True) + status = 0 + except SubprocessError as ex: + stdout = ex.stdout + stderr = ex.stderr + status = ex.status - if stderr or status >= 32: - raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout) + if stderr or status >= 32: + raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout) + else: + stdout = None if args.explain: - return SanitySkipped(test) + return SanitySuccess(test) if stdout: messages = json.loads(stdout) @@ -557,7 +560,7 @@ def command_sanity_yamllint(args, targets): raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout) if args.explain: - return SanitySkipped(test) + return SanitySuccess(test) pattern = r'^(?P<path>[^:]*):(?P<line>[0-9]+):(?P<column>[0-9]+): \[(?P<level>warning|error)\] (?P<message>.*)$' @@ -611,7 +614,7 @@ def command_sanity_rstcheck(args, targets): raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout) if args.explain: - return SanitySkipped(test) + return SanitySuccess(test) pattern = r'^(?P<path>[^:]*):(?P<line>[0-9]+): \((?P<level>INFO|WARNING|ERROR|SEVERE)/[0-4]\) (?P<message>.*)$' diff --git a/test/runner/lib/test.py b/test/runner/lib/test.py index 4342b5bd33d..2266fd849b4 100644 --- a/test/runner/lib/test.py +++ b/test/runner/lib/test.py @@ -200,8 +200,10 @@ class TestFailure(TestResult): if messages: messages = sorted(messages, key=lambda m: m.sort_key) + else: + messages = [] - self.messages = messages or [] + self.messages = messages self.summary = summary def write(self, args):