From: Stefano Brivio <sbrivio@redhat.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: passt-dev@passt.top
Subject: Re: [PATCH 2/6] test: Add linting of Python test scripts
Date: Wed, 1 Oct 2025 12:23:51 +0200 [thread overview]
Message-ID: <20251001122351.7020b79a@elisabeth> (raw)
In-Reply-To: <20251001095202.3875003-3-david@gibson.dropbear.id.au>
On Wed, 1 Oct 2025 19:51:58 +1000
David Gibson <david@gibson.dropbear.id.au> wrote:
> We currently have one test moved to the new exeter based framwork written
> in Python. We plan to add many more, so add linting (flake8) and type
> checking (mypy) of those scripts. This can be invoked manually with
> "make flake8" or "make mypy" in test/, and is also added to the static
> checkers test set.
I never used a Python linter, so I'm not sure if it's as bad as Go or
Rust linters taking the whole poetry away, as it happened for instance
in my most recent experience with 'cargo fmt':
https://github.com/AsahiLinux/muvm/compare/68094c02c19b6f5d5e3def6d29379c1244c9a5e4..9af11c334a1ce37f533c056d982f8608c8d80d27#diff-e1a95ce380b9a8a317f97cccce1cbfd3dccd343dc62169ed1340208ab304fab9L106
https://github.com/AsahiLinux/muvm/pull/111#discussion_r1863551727
(you need to click around before you get to it, no idea how to share
a proper link that opens that comment right away)
Maybe with Python it's not as annoying? I don't have a strong
preference against this, I just wanted to raise a possible downside.
In general, my thought is that coding style serves a purpose, and it's
used by humans for humans, so it's flexible, with exceptions, and
reasons behind it and behind those exceptions.
If we just pass everything through a linter, well, except for the
purposes of revision control, we don't really need a coding style?
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> test/Makefile | 14 +++++++++++++-
> test/build/build.py | 5 +++--
> test/build/static_checkers.sh | 6 +++++-
> 3 files changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/test/Makefile b/test/Makefile
> index 69987d0b..2637e0ed 100644
> --- a/test/Makefile
> +++ b/test/Makefile
> @@ -8,6 +8,8 @@
> BATS = bats -j $(shell nproc)
> EXETOOL = exeter/exetool/exetool
> WGET = wget -c
> +FLAKE8 = flake8
> +MYPY = mypy --strict
>
> DEBIAN_IMGS = debian-8.11.0-openstack-amd64.qcow2 \
> debian-10-nocloud-amd64.qcow2 \
> @@ -65,11 +67,15 @@ LOCAL_ASSETS = mbuto.img mbuto.mem.img podman/bin/podman QEMU_EFI.fd \
> ASSETS = $(DOWNLOAD_ASSETS) $(LOCAL_ASSETS)
>
> EXETER_PYPATH = exeter/py3
> +EXETER_PYTHON = build/build.py
> EXETER_BATS = smoke/smoke.sh.bats \
> - build/build.py.bats build/static_checkers.sh.bats
> + $(EXETER_PYTHON:%=%.bats) build/static_checkers.sh.bats
> BATS_FILES = $(EXETER_BATS) \
> podman/test/system/505-networking-pasta.bats
>
> +# Python test code (for linters)
> +PYPKGS = $(EXETER_PYTHON)
> +
> CFLAGS = -Wall -Werror -Wextra -pedantic -std=c99
>
> assets: $(ASSETS)
> @@ -130,6 +136,12 @@ medium.bin:
> big.bin:
> dd if=/dev/urandom bs=1M count=10 of=$@
>
> +flake8: pull-exeter
> + PYTHONPATH=$(EXETER_PYPATH) $(FLAKE8) $(PYPKGS)
> +
> +mypy: pull-exeter
> + PYTHONPATH=$(EXETER_PYPATH) $(MYPY) $(PYPKGS)
> +
> $(EXETER_BATS): %.bats: % $(EXETOOL)
> PYTHONPATH=$(EXETER_PYPATH) $(EXETOOL) bats -- $< > $@
>
> diff --git a/test/build/build.py b/test/build/build.py
> index e49287c9..e3de8305 100755
> --- a/test/build/build.py
> +++ b/test/build/build.py
> @@ -18,11 +18,12 @@ import os
> from pathlib import Path
> import subprocess
> import tempfile
> -from typing import Iterable, Iterator
> +from typing import Iterator
>
> import exeter
>
> -def sh(cmd):
> +
> +def sh(cmd: str) -> None:
> """Run given command in a shell"""
> subprocess.run(cmd, shell=True)
>
> diff --git a/test/build/static_checkers.sh b/test/build/static_checkers.sh
> index 42806e79..228b99ae 100755
> --- a/test/build/static_checkers.sh
> +++ b/test/build/static_checkers.sh
> @@ -21,6 +21,10 @@ exeter_set_description cppcheck "passt sources pass cppcheck"
> exeter_register clang_tidy make -C .. clang-tidy
> exeter_set_description clang_tidy "passt sources pass clang-tidy"
>
> -exeter_main "$@"
> +exeter_register flake8 make flake8
> +exeter_set_description flake8 "passt tests in Python pass flake8"
>
> +exeter_register mypy make mypy
> +exeter_set_description mypy "passt tests in Python pass mypy --strict"
>
> +exeter_main "$@"
--
Stefano
next prev parent reply other threads:[~2025-10-01 10:23 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-01 9:51 [PATCH 0/6] Test and linter fixups David Gibson
2025-10-01 9:51 ` [PATCH 1/6] test: Convince make not to accidentally delete exetool David Gibson
2025-10-02 3:26 ` David Gibson
2025-10-01 9:51 ` [PATCH 2/6] test: Add linting of Python test scripts David Gibson
2025-10-01 10:23 ` Stefano Brivio [this message]
2025-10-01 10:40 ` Paul Holzinger
2025-10-01 10:48 ` Stefano Brivio
2025-10-02 1:31 ` David Gibson
2025-10-02 1:09 ` David Gibson
2025-10-01 9:51 ` [PATCH 3/6] clang-tidy: Suppress redundant expression warning David Gibson
2025-10-01 9:52 ` [PATCH 4/6] cppcheck: Suppress the suppression of a suppression David Gibson
2025-10-01 9:52 ` [PATCH 5/6] cppcheck: Suppress a buggy cppcheck warning David Gibson
2025-10-01 9:52 ` [PATCH 6/6] cppcheck: Suppress variable scope warnings in dhcpv6() David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251001122351.7020b79a@elisabeth \
--to=sbrivio@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=passt-dev@passt.top \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).