"John, that's annoying. None of those invocations are free from some
kind of annoying dependency. Not everyone runs Fedora!"
Yeah, yeah. This series doesn't *remove* iotest 297 either. It continues
to work just fine! There's also a slightly more involved method that
will run on "any version you happen to have", but the setup is more
laborious, and I haven't made a Makefile invocation to canonize it yet:
cd /python
python3 -m venv ~/.cache/qemu-venv/
source ~/.cache/qemu-venv/bin/activate
make develop
make check
deactivate
- This uses whatever version of Python you happen to have, and doesn't
require pipenv or tox.
- It should work on any distro with any python3 >= 3.6.0
- use 'activate.[fish|csh] as desired to enter the venv. (I use FiSH!)
- This will run the linters with correct versions against the qemu
packages installed into this venv.
Example outputs from the three different local execution methods, in
order as outlined above:
jsnow@scv ~/s/q/python (python-package-iotest)> make venv-check
make[1]: Entering directory '/home/jsnow/src/qemu/python'
JOB ID : f5f383275da6b9d5eb5fe717e463f47f18980d07
JOB LOG :
/home/jsnow/avocado/job-results/job-2021-06-04T12.28-f5f3832/job.log
(1/5) tests/flake8.sh: PASS (0.43 s)
(2/5) tests/iotests.sh: PASS (9.93 s)
(3/5) tests/isort.sh: PASS (0.24 s)
(4/5) tests/mypy.sh: PASS (0.25 s)
(5/5) tests/pylint.sh: PASS (3.66 s)
RESULTS : PASS 5 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 14.85 s
make[1]: Leaving directory '/home/jsnow/src/qemu/python'
jsnow@scv ~/s/q/python (python-package-iotest)> make check-tox
GLOB sdist-make: /home/jsnow/src/qemu/python/setup.py
py36 inst-nodeps:
/home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip
py36 installed:
appdirs==1.4.4,astroid==2.5.6,avocado-framework==88.1,distlib==0.3.2,filelock==3.0.12,flake8==3.9.2,fusepy==3.0.1,importlib-metadata==4.5.0,importlib-resources==5.1.4,isort==5.8.0,lazy-object-proxy==1.6.0,mccabe==0.6.1,mypy==0.812,mypy-extensions==0.4.3,packaging==20.9,pluggy==0.13.1,py==1.10.0,pycodestyle==2.7.0,pyflakes==2.3.1,pylint==2.8.3,pyparsing==2.4.7,qemu
@
file:///home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip,six==1.16.0,toml==0.10.2,tox==3.23.1,typed-ast==1.4.3,typing-extensions==3.10.0.0,virtualenv==20.4.7,wrapt==1.12.1,zipp==3.4.1
py36 run-test-pre: PYTHONHASHSEED='1077404307'
py36 run-test: commands[0] | make check
JOB ID : 8d6a98b947956794e83943950a66dea2e2ee2f0b
JOB LOG :
/home/jsnow/avocado/job-results/job-2021-06-04T12.29-8d6a98b/job.log
(1/5) tests/flake8.sh: PASS (0.36 s)
(2/5) tests/iotests.sh: PASS (9.64 s)
(3/5) tests/isort.sh: PASS (0.19 s)
(4/5) tests/mypy.sh: PASS (0.24 s)
(5/5) tests/pylint.sh: PASS (3.64 s)
RESULTS : PASS 5 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 14.38 s
py37 inst-nodeps:
/home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip
py37 installed:
appdirs==1.4.4,astroid==2.5.6,avocado-framework==88.1,distlib==0.3.2,filelock==3.0.12,flake8==3.9.2,fusepy==3.0.1,importlib-metadata==4.5.0,isort==5.8.0,lazy-object-proxy==1.6.0,mccabe==0.6.1,mypy==0.812,mypy-extensions==0.4.3,packaging==20.9,pluggy==0.13.1,py==1.10.0,pycodestyle==2.7.0,pyflakes==2.3.1,pylint==2.8.3,pyparsing==2.4.7,qemu
@
file:///home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip,six==1.16.0,toml==0.10.2,tox==3.23.1,typed-ast==1.4.3,typing-extensions==3.10.0.0,virtualenv==20.4.7,wrapt==1.12.1,zipp==3.4.1
py37 run-test-pre: PYTHONHASHSEED='1077404307'
py37 run-test: commands[0] | make check
JOB ID : 97419c5769a56797e1a9b4d91586d6face9be5a2
JOB LOG :
/home/jsnow/avocado/job-results/job-2021-06-04T12.29-97419c5/job.log
(1/5) tests/flake8.sh: PASS (0.34 s)
(2/5) tests/iotests.sh: PASS (10.42 s)
(3/5) tests/isort.sh: PASS (0.16 s)
(4/5) tests/mypy.sh: PASS (0.20 s)
(5/5) tests/pylint.sh: PASS (3.52 s)
RESULTS : PASS 5 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 15.01 s
py38 inst-nodeps:
/home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip
py38 installed:
appdirs==1.4.4,astroid==2.5.6,avocado-framework==88.1,distlib==0.3.2,filelock==3.0.12,flake8==3.9.2,fusepy==3.0.1,isort==5.8.0,lazy-object-proxy==1.6.0,mccabe==0.6.1,mypy==0.812,mypy-extensions==0.4.3,packaging==20.9,pluggy==0.13.1,py==1.10.0,pycodestyle==2.7.0,pyflakes==2.3.1,pylint==2.8.3,pyparsing==2.4.7,qemu
@
file:///home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip,six==1.16.0,toml==0.10.2,tox==3.23.1,typed-ast==1.4.3,typing-extensions==3.10.0.0,virtualenv==20.4.7,wrapt==1.12.1
py38 run-test-pre: PYTHONHASHSEED='1077404307'
py38 run-test: commands[0] | make check
JOB ID : 1be3a502bea18cdf537426778719dce1d0c9c3a0
JOB LOG :
/home/jsnow/avocado/job-results/job-2021-06-04T12.30-1be3a50/job.log
(1/5) tests/flake8.sh: PASS (0.29 s)
(2/5) tests/iotests.sh: PASS (9.17 s)
(3/5) tests/isort.sh: PASS (0.14 s)
(4/5) tests/mypy.sh: PASS (0.20 s)
(5/5) tests/pylint.sh: PASS (3.21 s)
RESULTS : PASS 5 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 13.32 s
py39 inst-nodeps:
/home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip
py39 installed:
appdirs==1.4.4,astroid==2.5.6,avocado-framework==88.1,distlib==0.3.2,filelock==3.0.12,flake8==3.9.2,fusepy==3.0.1,isort==5.8.0,lazy-object-proxy==1.6.0,mccabe==0.6.1,mypy==0.812,mypy-extensions==0.4.3,packaging==20.9,pluggy==0.13.1,py==1.10.0,pycodestyle==2.7.0,pyflakes==2.3.1,pylint==2.8.3,pyparsing==2.4.7,qemu
@
file:///home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip,six==1.16.0,toml==0.10.2,tox==3.23.1,typed-ast==1.4.3,typing-extensions==3.10.0.0,virtualenv==20.4.7,wrapt==1.12.1
py39 run-test-pre: PYTHONHASHSEED='1077404307'
py39 run-test: commands[0] | make check
JOB ID : 0323fcaf5137caab9fbca3e91bc0338ae6cb81dc
JOB LOG :
/home/jsnow/avocado/job-results/job-2021-06-04T12.30-0323fca/job.log
(1/5) tests/flake8.sh: PASS (0.26 s)
(2/5) tests/iotests.sh: PASS (10.03 s)
(3/5) tests/isort.sh: PASS (0.14 s)
(4/5) tests/mypy.sh: PASS (0.19 s)
(5/5) tests/pylint.sh: PASS (3.39 s)
RESULTS : PASS 5 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 14.37 s
py310 inst-nodeps:
/home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip
py310 installed:
appdirs==1.4.4,astroid==2.5.6,avocado-framework==88.1,distlib==0.3.2,filelock==3.0.12,flake8==3.9.2,fusepy==3.0.1,isort==5.8.0,lazy-object-proxy==1.6.0,mccabe==0.6.1,mypy==0.812,mypy-extensions==0.4.3,packaging==20.9,pluggy==0.13.1,py==1.10.0,pycodestyle==2.7.0,pyflakes==2.3.1,pylint==2.8.3,pyparsing==2.4.7,qemu
@
file:///home/jsnow/src/qemu/python/.tox/.tmp/package/1/qemu-0.6.1.0a1.zip,six==1.16.0,toml==0.10.2,tox==3.23.1,typed-ast==1.4.3,typing-extensions==3.10.0.0,virtualenv==20.4.7,wrapt==1.12.1
py310 run-test-pre: PYTHONHASHSEED='1077404307'
py310 run-test: commands[0] | make check
JOB ID : 88f99ef4b76af4e48e9b1cd845d276d1c29d32dd
JOB LOG :
/home/jsnow/avocado/job-results/job-2021-06-04T12.30-88f99ef/job.log
(1/5) tests/flake8.sh: PASS (0.26 s)
(2/5) tests/iotests.sh: PASS (13.34 s)
(3/5) tests/isort.sh: PASS (0.15 s)
(4/5) tests/mypy.sh: PASS (0.33 s)
(5/5) tests/pylint.sh: PASS (3.40 s)
RESULTS : PASS 5 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 17.76 s
_______________________________________________________________ summary
________________________________________________________________
py36: commands succeeded
py37: commands succeeded
py38: commands succeeded
py39: commands succeeded
py310: commands succeeded
congratulations :)
(qemu-venv) jsnow@scv ~/s/q/python (python-package-iotest)> make check
JOB ID : d4d3abff53bef6f41b5e2d10d889040d3a698208
JOB LOG :
/home/jsnow/avocado/job-results/job-2021-06-04T12.22-d4d3abf/job.log
(1/5) tests/flake8.sh: PASS (0.27 s)
(2/5) tests/iotests.sh: PASS (10.30 s)
(3/5) tests/isort.sh: PASS (0.15 s)
(4/5) tests/mypy.sh: PASS (0.19 s)
(5/5) tests/pylint.sh: PASS (3.40 s)
RESULTS : PASS 5 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 14.65 s
John Snow (3):
python: expose typing information via PEP 561
iotests: split 'linters.py' off from 297
python: Add iotest linters to test suite
python/qemu/machine/py.typed | 0
python/qemu/qmp/py.typed | 0
python/qemu/utils/py.typed | 0
python/setup.cfg | 3 +
python/tests/iotests.sh | 2 +
tests/qemu-iotests/297 | 88 ++++-------------------
tests/qemu-iotests/linters.py | 130 ++++++++++++++++++++++++++++++++++
7 files changed, 148 insertions(+), 75 deletions(-)
create mode 100644 python/qemu/machine/py.typed
create mode 100644 python/qemu/qmp/py.typed
create mode 100644 python/qemu/utils/py.typed
create mode 100755 python/tests/iotests.sh
create mode 100644 tests/qemu-iotests/linters.py