John Snow <js...@redhat.com> writes:

> Update the python tests to also check qapi. No idea why I didn't do this
> before. I guess I was counting on moving it under python/ and then just
> forgot after that was NACKed. Oops, this turns out to be really easy.
>
> flake8, isort and mypy use the tool configuration from the existing
> python directory (in setup.cfg). pylint continues to use the special
> configuration located in scripts/qapi/ - that configuration is more
> permissive. If we wish to unify the two configurations, that's a
> separate series and a discussion for a later date.
>
> As a result of this patch, one would be able to run any of the following
> tests locally from the qemu.git/python directory and have it cover the
> scripts/qapi/ module as well. All of the following options run the
> python tests, static analysis tests, and linter checks; but with
> different combinations of dependencies and interpreters.
>
> - "make check-minreqs" Run tests specifically under our oldest supported
>   Python and our oldest supported dependencies. This is the test that
>   runs on GitLab as "check-python-minreqs". This helps ensure we do not
>   regress support on older platforms accidentally.
>
> - "make check-tox" Runs the tests under the newest supported
>   dependencies, but under each supported version of Python in turn. At
>   time of writing, this is Python 3.8 to 3.13 inclusive. This test helps
>   catch bleeding-edge problems before they become problems for developer
>   workstations. This is the GitLab test "check-python-tox" and is an
>   optionally run, may-fail test due to the unpredictable nature of new
>   dependencies being released into the ecosystem that may cause
>   regressions.
>
> - "make check-dev" Runs the tests under the newest supported
>   dependencies using whatever version of Python the user happens to have
>   installed. This is a quick convenience check that does not map to any
>   particular GitLab test.
>
> (Note! check-dev may be busted on Fedora 41 and bleeding edge versions
> of setuptools. That's unrelated to this patch and I'll address it
> separately and soon. Thank you for your patience, --mgmt)
>
> Signed-off-by: John Snow <js...@redhat.com>

Let's mention this is a step towards having "make check" run the static
analysis we want developers to run, but we're not there, yet.

> ---
>  python/setup.cfg            |  1 +
>  python/tests/minreqs.txt    | 21 +++++++++++++++++++++
>  python/tests/qapi-flake8.sh |  4 ++++
>  python/tests/qapi-isort.sh  |  6 ++++++
>  python/tests/qapi-mypy.sh   |  2 ++
>  python/tests/qapi-pylint.sh |  6 ++++++
>  scripts/qapi/pylintrc       |  1 +
>  7 files changed, 41 insertions(+)
>  create mode 100755 python/tests/qapi-flake8.sh
>  create mode 100755 python/tests/qapi-isort.sh
>  create mode 100755 python/tests/qapi-mypy.sh
>  create mode 100755 python/tests/qapi-pylint.sh
>
> diff --git a/python/setup.cfg b/python/setup.cfg
> index cf5af7e6641..84d8a1fd30d 100644
> --- a/python/setup.cfg
> +++ b/python/setup.cfg
> @@ -47,6 +47,7 @@ devel =
>      urwid >= 2.1.2
>      urwid-readline >= 0.13
>      Pygments >= 2.9.0
> +    sphinx >= 3.4.3
>  
>  # Provides qom-fuse functionality
>  fuse =
> diff --git a/python/tests/minreqs.txt b/python/tests/minreqs.txt
> index 19c0f5e4c50..94928936d44 100644
> --- a/python/tests/minreqs.txt
> +++ b/python/tests/minreqs.txt
> @@ -11,6 +11,9 @@
>  # When adding new dependencies, pin the very oldest non-yanked version
>  # on PyPI that allows the test suite to pass.
>  
> +# Dependencies for qapidoc/qapi_domain et al
> +sphinx==3.4.3
> +
>  # Dependencies for the TUI addon (Required for successful linting)
>  urwid==2.1.2
>  urwid-readline==0.13
> @@ -49,3 +52,21 @@ platformdirs==2.2.0
>  toml==0.10.0
>  tomlkit==0.10.1
>  wrapt==1.14.0
> +
> +# Transitive sphinx dependencies
> +Jinja2==2.7
> +MarkupSafe==1.1.0
> +alabaster==0.7.1
> +babel==1.3
> +docutils==0.12
> +imagesize==0.5.0
> +packaging==14.0
> +pytz==2011b0
> +requests==2.5.0
> +snowballstemmer==1.1
> +sphinxcontrib-applehelp==1.0.0
> +sphinxcontrib-devhelp==1.0.0
> +sphinxcontrib-htmlhelp==1.0.0
> +sphinxcontrib-jsmath==1.0.0
> +sphinxcontrib-qthelp==1.0.0
> +sphinxcontrib-serializinghtml==1.0.0

This wasn't there when I last saw this patch.  The previous patch also
updates this file.  How did you decide which updates go where?  Or is
this an accident?

> diff --git a/python/tests/qapi-flake8.sh b/python/tests/qapi-flake8.sh
> new file mode 100755
> index 00000000000..7b5983d64a9
> --- /dev/null
> +++ b/python/tests/qapi-flake8.sh
> @@ -0,0 +1,4 @@
> +#!/bin/sh -e
> +python3 -m flake8 ../scripts/qapi/ \
> +        ../docs/sphinx/qapidoc.py \
> +        ../docs/sphinx/qapi_domain.py

Not linting docs/sphinx/qapidoc_legacy.py.  This is intentional (see its
initial commit message).  Since we plan to drop it soon, there's no real
need for a comment here, but mentioning it in the commit message
wouldn't hurt.

> diff --git a/python/tests/qapi-isort.sh b/python/tests/qapi-isort.sh
> new file mode 100755
> index 00000000000..f31f12d3425
> --- /dev/null
> +++ b/python/tests/qapi-isort.sh
> @@ -0,0 +1,6 @@
> +#!/bin/sh -e
> +python3 -m isort --sp . -c ../scripts/qapi/
> +# Force isort to recognize "compat" as a local module and not third-party
> +python3 -m isort --sp . -c -p compat -p qapidoc_legacy \
> +        ../docs/sphinx/qapi_domain.py \
> +        ../docs/sphinx/qapidoc.py

Comment on flake8 applies.

> diff --git a/python/tests/qapi-mypy.sh b/python/tests/qapi-mypy.sh
> new file mode 100755
> index 00000000000..377b29b873b
> --- /dev/null
> +++ b/python/tests/qapi-mypy.sh
> @@ -0,0 +1,2 @@
> +#!/bin/sh -e
> +python3 -m mypy ../scripts/qapi

Not type-checking docs/sphinx/qapi_domain.py and docs/sphinx/qapidoc.py?
Impractical due to us targeting an isanely wide Sphinx version range?

> diff --git a/python/tests/qapi-pylint.sh b/python/tests/qapi-pylint.sh
> new file mode 100755
> index 00000000000..f4bb7a5a795
> --- /dev/null
> +++ b/python/tests/qapi-pylint.sh
> @@ -0,0 +1,6 @@
> +#!/bin/sh -e
> +SETUPTOOLS_USE_DISTUTILS=stdlib python3 -m pylint \
> +                                --rcfile=../scripts/qapi/pylintrc \
> +                                ../scripts/qapi/ \
> +                                ../docs/sphinx/qapidoc.py \
> +                                ../docs/sphinx/qapi_domain.py

Comment on flake8 applies.

> diff --git a/scripts/qapi/pylintrc b/scripts/qapi/pylintrc
> index d24eece7411..e16283ada3d 100644
> --- a/scripts/qapi/pylintrc
> +++ b/scripts/qapi/pylintrc
> @@ -19,6 +19,7 @@ disable=consider-using-f-string,
>          too-many-instance-attributes,
>          too-many-positional-arguments,
>          too-many-statements,
> +        unknown-option-value,
>          useless-option-value,
>  
>  [REPORTS]

This wasn't there when I last saw this patch.  PATCH 1 also updates this
file.  How did you decide which updates go where?  Or is this an
accident?


Reply via email to