iotests/297: Change run_linter() to raise an exception on failure

Instead of using a process return code as the python function return
value (or just not returning anything at all), allow run_linter() to
raise an exception instead.

The responsibility for printing output on error shifts from the function
itself to the caller, who will know best how to present/format that
information. (Also, "suppress_output" is now a lot more accurate of a
parameter name.)

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Hanna Reitz <hreitz@redhat.com>
Message-id: 20211019144918.3159078-9-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2021-10-19 10:49:11 -04:00
parent a4bde73629
commit 752f425d83
1 changed files with 14 additions and 10 deletions

View File

@ -70,22 +70,18 @@ def run_linter(
"""
Run a python-based linting tool.
If suppress_output is True, capture stdout/stderr of the child
process and only print that information back to stdout if the child
process's return code was non-zero.
:param suppress_output: If True, suppress all stdout/stderr output.
:raise CalledProcessError: If the linter process exits with failure.
"""
p = subprocess.run(
subprocess.run(
('python3', '-m', tool, *args),
env=env,
check=False,
check=True,
stdout=subprocess.PIPE if suppress_output else None,
stderr=subprocess.STDOUT if suppress_output else None,
universal_newlines=True,
)
if suppress_output and p.returncode != 0:
print(p.stdout)
def main() -> None:
for linter in ('pylint-3', 'mypy'):
@ -102,11 +98,19 @@ def main() -> None:
print('=== pylint ===')
sys.stdout.flush()
run_linter('pylint', files, env=env)
try:
run_linter('pylint', files, env=env)
except subprocess.CalledProcessError:
# pylint failure will be caught by diffing the IO.
pass
print('=== mypy ===')
sys.stdout.flush()
run_linter('mypy', files, env=env, suppress_output=True)
try:
run_linter('mypy', files, env=env, suppress_output=True)
except subprocess.CalledProcessError as exc:
if exc.output:
print(exc.output)
iotests.script_main(main)