[PATCH v5 00/16] python: add mypy support to python/qemu

John Snow posted 16 patches 3 years, 8 months ago
Failed in applying to current master (apply log)
python/qemu/accel.py          |   8 +-
python/qemu/machine.py        | 296 ++++++++++++++++++++--------------
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, 301 insertions(+), 185 deletions(-)
[PATCH v5 00/16] python: add mypy support to python/qemu
Posted by John Snow 3 years, 8 months ago
Based-on: 20200710050649.32434-1-jsnow@redhat.com

This series modifies the python/qemu library to comply with mypy --strict,
pylint, and flake8.
This requires my "refactor shutdown" patch as a pre-requisite.

v5: (Things unchanged omitted)

003/16:[----] [-C] 'python/qmp.py: re-absorb MonitorResponseError'
009/16:[----] [-C] 'python/machine.py: Don't modify state in _base_args()'
012/16:[0004] [FC] 'python/machine.py: Add _qmp access shim'
013/16:[0002] [FC] 'python/machine.py: fix _popen access'
016/16:[0004] [FC] 'python/qemu: Add mypy type annotations'

--  Rebased on "refactor shutdown" v5
12: Dependent changes from more extensive shutdown() refactoring
13: Dependent changes; one less ._popen access.
16: Dependent changes; _post_shutdown return annotation fell down here.
                       wait annotation got bumped up to the previous series.

v4:
 - 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.

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        | 296 ++++++++++++++++++++--------------
 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, 301 insertions(+), 185 deletions(-)

-- 
2.21.3


Re: [PATCH v5 00/16] python: add mypy support to python/qemu
Posted by Philippe Mathieu-Daudé 3 years, 8 months ago
On 7/10/20 7:22 AM, John Snow wrote:
> Based-on: 20200710050649.32434-1-jsnow@redhat.com
> 
> This series modifies the python/qemu library to comply with mypy --strict,
> pylint, and flake8.
> This requires my "refactor shutdown" patch as a pre-requisite.
> 
[...]
> 
> These should all 100% pass.
> 
> 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

I've applied patches 1 to 6 on python-next, because unfortunately
then patch 7 now conflicts.

We'll merge them in 5.2 with the 'make check-python' rule patch last,
to avoid regressions.

Thanks,

Phil.

>   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