Based-on: 20200626202350.11060-1-js...@redhat.com This series modifies the python/qemu library to comply with mypy --strict. This requires my "refactor shutdown" patch as a pre-requisite.
v4: 001/16:[----] [--] 'python/qmp.py: Define common types' 002/16:[----] [--] 'iotests.py: use qemu.qmp type aliases' 003/16:[----] [--] 'python/qmp.py: re-absorb MonitorResponseError' 004/16:[----] [--] 'python/qmp.py: Do not return None from cmd_obj' 005/16:[----] [--] 'python/qmp.py: add casts to JSON deserialization' 006/16:[----] [--] 'python/qmp.py: add QMPProtocolError' 007/16:[----] [--] 'python/machine.py: Fix monitor address typing' 008/16:[----] [--] 'python/machine.py: reorder __init__' 009/16:[----] [--] 'python/machine.py: Don't modify state in _base_args()' 010/16:[----] [--] 'python/machine.py: Handle None events in events_wait' 011/16:[----] [--] 'python/machine.py: use qmp.command' 012/16:[0010] [FC] 'python/machine.py: Add _qmp access shim' 013/16:[----] [-C] 'python/machine.py: fix _popen access' 014/16:[----] [--] 'python/qemu: make 'args' style arguments immutable' 015/16:[----] [--] 'iotests.py: Adjust HMP kwargs typing' 016/16:[----] [-C] 'python/qemu: Add mypy type annotations' - Rebased on "refactor shutdown" v4 - Fixed _qmp access for scripts that disable QMP v3: 005: Removed a cast, per Kevin Wolf's tip 010: Renamed with correct function name; Rewrote docstring and added comments 016: Use SocketAddrT instead of Union[Tuple[str,str],str] "v2": - This version supports iotests 297 - Many patches merged by Phil are removed - Replaces iotests.py type aliases with centralized ones (See patch 2) - Imports etc are reworked to use the non-installable package layout instead. (Mostly important for patch 3) Testing this out: - You'll need Python3.6+ - I encourage you to use a virtual environment! - You don't necessarily need these exact versions, but I didn't test the lower bounds, use older versions at your peril: - pylint==2.5.0 - mypy=0.770 - flake8=3.7.8 > cd ~/src/qemu/python/ > flake8 qemu > mypy --strict qemu > cd qemu > pylint *.py These should all 100% pass. --- Open RFC: What's the right way to hook this into make check to prevent regressions? John Snow (16): python/qmp.py: Define common types iotests.py: use qemu.qmp type aliases python/qmp.py: re-absorb MonitorResponseError python/qmp.py: Do not return None from cmd_obj python/qmp.py: add casts to JSON deserialization python/qmp.py: add QMPProtocolError python/machine.py: Fix monitor address typing python/machine.py: reorder __init__ python/machine.py: Don't modify state in _base_args() python/machine.py: Handle None events in events_wait python/machine.py: use qmp.command python/machine.py: Add _qmp access shim python/machine.py: fix _popen access python/qemu: make 'args' style arguments immutable iotests.py: Adjust HMP kwargs typing python/qemu: Add mypy type annotations python/qemu/accel.py | 8 +- python/qemu/machine.py | 294 ++++++++++++++++++++-------------- python/qemu/qmp.py | 111 +++++++++---- python/qemu/qtest.py | 53 +++--- scripts/render_block_graph.py | 7 +- tests/qemu-iotests/iotests.py | 11 +- 6 files changed, 300 insertions(+), 184 deletions(-) -- 2.21.3