qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] a093a6: python/aqmp: add asynchronous QMP (AQ


From: Peter Maydell
Subject: [Qemu-commits] [qemu/qemu] a093a6: python/aqmp: add asynchronous QMP (AQMP) subpackage
Date: Tue, 28 Sep 2021 05:12:36 -0700

  Branch: refs/heads/staging
  Home:   https://github.com/qemu/qemu
  Commit: a093a65567c797ab0a53e8a6962043679e3ed2f2
      
https://github.com/qemu/qemu/commit/a093a65567c797ab0a53e8a6962043679e3ed2f2
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    A python/qemu/aqmp/__init__.py
    A python/qemu/aqmp/py.typed
    M python/setup.cfg

  Log Message:
  -----------
  python/aqmp: add asynchronous QMP (AQMP) subpackage

For now, it's empty! Soon, it won't be.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-2-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: fbfb6a37a34fc08f4ff0e5e1e5aab63650af5ed4
      
https://github.com/qemu/qemu/commit/fbfb6a37a34fc08f4ff0e5e1e5aab63650af5ed4
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/__init__.py
    A python/qemu/aqmp/error.py

  Log Message:
  -----------
  python/aqmp: add error classes

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-3-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 35b9a85adea9f771ca2279ebf7666b243e92f968
      
https://github.com/qemu/qemu/commit/35b9a85adea9f771ca2279ebf7666b243e92f968
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/setup.cfg

  Log Message:
  -----------
  python/pylint: Add exception for TypeVar names ('T')

'T' is a common TypeVar name, allow its use.

See also https://github.com/PyCQA/pylint/issues/3401 -- In the future,
we might be able to have a separate list of acceptable names for
TypeVars exclusively.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-4-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: a07616d612bebc6324b29d7ab0c9b84d4e9d7c42
      
https://github.com/qemu/qemu/commit/a07616d612bebc6324b29d7ab0c9b84d4e9d7c42
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    A python/qemu/aqmp/util.py

  Log Message:
  -----------
  python/aqmp: add asyncio compatibility wrappers

Python 3.6 does not have all of the goodies that Python 3.7 does, and we
need to support both. Add some compatibility wrappers needed for this
purpose.

(Note: Python 3.6 is EOL December 2021.)

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-5-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 4ccaab0377dec88b5cf1a55064b4953f6ab59d9f
      
https://github.com/qemu/qemu/commit/4ccaab0377dec88b5cf1a55064b4953f6ab59d9f
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/__init__.py
    A python/qemu/aqmp/protocol.py
    M python/qemu/aqmp/util.py

  Log Message:
  -----------
  python/aqmp: add generic async message-based protocol support

This is the bare minimum that you need to establish a full-duplex async
message-based protocol with Python's asyncio.

The features to be added in forthcoming commits are:

- Runstate tracking
- Logging
- Support for incoming connections via accept()
- _cb_outbound, _cb_inbound message hooks
- _readline() method

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-6-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: c58b42e095aed868b5d08b9deab61436ab45b7cf
      
https://github.com/qemu/qemu/commit/c58b42e095aed868b5d08b9deab61436ab45b7cf
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/__init__.py
    M python/qemu/aqmp/protocol.py

  Log Message:
  -----------
  python/aqmp: add runstate state machine to AsyncProtocol

This serves a few purposes:

1. Protect interfaces when it's not safe to call them (via @require)

2. Add an interface by which an async client can determine if the state
has changed, for the purposes of connection management.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-7-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: c1408345af0fd5b2e7a286743b4678bc70fe5051
      
https://github.com/qemu/qemu/commit/c1408345af0fd5b2e7a286743b4678bc70fe5051
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/util.py

  Log Message:
  -----------
  python/aqmp: Add logging utility helpers

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-8-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 50e533061f30e69d618643c9513b6797019023d1
      
https://github.com/qemu/qemu/commit/50e533061f30e69d618643c9513b6797019023d1
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/protocol.py

  Log Message:
  -----------
  python/aqmp: add logging to AsyncProtocol

Give the connection and the reader/writer tasks nicknames, and add
logging statements throughout.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-9-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 774c64a58d45da54a344947e7ed26814db04cc68
      
https://github.com/qemu/qemu/commit/774c64a58d45da54a344947e7ed26814db04cc68
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/protocol.py

  Log Message:
  -----------
  python/aqmp: add AsyncProtocol.accept() method

It's a little messier than connect, because it wasn't designed to accept
*precisely one* connection. Such is life.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-10-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 2686ac131634365899570bd8b8df99ae50354e79
      
https://github.com/qemu/qemu/commit/2686ac131634365899570bd8b8df99ae50354e79
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/protocol.py

  Log Message:
  -----------
  python/aqmp: add configurable read buffer limit

QMP can transmit some pretty big messages, and the default limit of 64KB
isn't sufficient. Make sure that we can configure it.

Reported-by: G S Niteesh Babu <niteesh.gs@gmail.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-11-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 12c7a57f5be577b6bb28c8526122cc51ad40a12b
      
https://github.com/qemu/qemu/commit/12c7a57f5be577b6bb28c8526122cc51ad40a12b
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/protocol.py

  Log Message:
  -----------
  python/aqmp: add _cb_inbound and _cb_outbound logging hooks

Add hooks designed to log/filter incoming/outgoing messages. The primary
intent for these is to be able to support iotests which may want to log
messages with specific filters for reproducible output.

Another use is for plugging into Urwid frameworks; all messages in/out
can be automatically added to a rendering list for the purposes of a
qmp-shell like tool.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-12-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 762bd4d7a745b3b19c4ffd3eaf4714a6961c4a11
      
https://github.com/qemu/qemu/commit/762bd4d7a745b3b19c4ffd3eaf4714a6961c4a11
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/protocol.py

  Log Message:
  -----------
  python/aqmp: add AsyncProtocol._readline() method

This is added as a courtesy: many protocols are line-based, including
QMP. Putting it in AsyncProtocol lets us keep the QMP class
implementation just a pinch more abstract.

(And, if we decide to add a QTEST implementation later, it will need
this, too. (Yes, I have a QTEST implementation.))

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-13-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 08f98a22313f20a3851c9ae67dc0e8f2b931e3b3
      
https://github.com/qemu/qemu/commit/08f98a22313f20a3851c9ae67dc0e8f2b931e3b3
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/__init__.py
    A python/qemu/aqmp/message.py

  Log Message:
  -----------
  python/aqmp: add QMP Message format

The Message class is here primarily to serve as a solid type to use for
mypy static typing for unambiguous annotation and documentation.

We can also stuff JSON serialization and deserialization into this class
itself so it can be re-used even outside this infrastructure.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20210915162955.333025-14-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: ad0729994136fb479674dccd3e74ec9c49de8a1c
      
https://github.com/qemu/qemu/commit/ad0729994136fb479674dccd3e74ec9c49de8a1c
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    A python/qemu/aqmp/models.py

  Log Message:
  -----------
  python/aqmp: add well-known QMP object models

The QMP spec doesn't define very many objects that are iron-clad in
their format, but there are a few. This module makes it trivial to
validate them without relying on an external third-party library.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-15-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: b3cda213a739e4e28ef7fe69a1a7e0f483e5c60c
      
https://github.com/qemu/qemu/commit/b3cda213a739e4e28ef7fe69a1a7e0f483e5c60c
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/__init__.py
    A python/qemu/aqmp/events.py

  Log Message:
  -----------
  python/aqmp: add QMP event support

This class was designed as a "mix-in" primarily so that the feature
could be given its own treatment in its own python module.

It gets quite a bit too long otherwise.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-16-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 29a8ea9ba2e5b514e969d9f7660755eb98d9922b
      
https://github.com/qemu/qemu/commit/29a8ea9ba2e5b514e969d9f7660755eb98d9922b
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/setup.cfg

  Log Message:
  -----------
  python/pylint: disable too-many-function-args

too-many-function-args seems prone to failure when considering
things like Method Resolution Order, which mypy gets correct. When
dealing with multiple inheritance, pylint doesn't seem to understand
which method will actually get called, while mypy does.

Remove the less powerful, redundant check.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-17-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: c67d696b8592a85ba32dfdc1fc7449fa9b327e29
      
https://github.com/qemu/qemu/commit/c67d696b8592a85ba32dfdc1fc7449fa9b327e29
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/__init__.py
    A python/qemu/aqmp/qmp_client.py

  Log Message:
  -----------
  python/aqmp: add QMP protocol support

The star of our show!

Add most of the QMP protocol, sans support for actually executing
commands. No problem, that happens in the next several commits.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-18-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 4cd17f375daaa73f0f6fd214e08e2290d86c24be
      
https://github.com/qemu/qemu/commit/4cd17f375daaa73f0f6fd214e08e2290d86c24be
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/setup.cfg

  Log Message:
  -----------
  python/pylint: disable no-member check

mypy handles this better -- but we only need the workaround because
pylint under Python 3.6 does not understand that a MutableMapping really
does have a .get() method attached.

We could remove this again once 3.7 is our minimum.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-19-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 577737be55a3e9e5d592ad31d4b7c71ebccf3dc8
      
https://github.com/qemu/qemu/commit/577737be55a3e9e5d592ad31d4b7c71ebccf3dc8
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/qmp_client.py

  Log Message:
  -----------
  python/aqmp: Add message routing to QMP protocol

Add the ability to handle and route messages in qmp_protocol.py. The
interface for actually sending anything still isn't added until next
commit.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-20-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: e0fea0b3ac85aefacbecf732d18f6d7ba438fa69
      
https://github.com/qemu/qemu/commit/e0fea0b3ac85aefacbecf732d18f6d7ba438fa69
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/__init__.py
    M python/qemu/aqmp/qmp_client.py

  Log Message:
  -----------
  python/aqmp: add execute() interfaces

Add execute() and execute_msg().

_execute() is split into _issue() and _reply() halves so that
hypothetical subclasses of QMP that want to support different execution
paradigms can do so.

I anticipate a synchronous interface may have need of separating the
send/reply phases. However, I do not wish to expose that interface here
and want to actively discourage it, so they remain private interfaces.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-21-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 41f4f92260da1c45f6b68f5965a30e503f394269
      
https://github.com/qemu/qemu/commit/41f4f92260da1c45f6b68f5965a30e503f394269
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/qmp_client.py

  Log Message:
  -----------
  python/aqmp: add _raw() execution interface

This is added in anticipation of wanting it for a synchronous wrapper
for the iotest interface. Normally, execute() and execute_msg() both
raise QMP errors in the form of Python exceptions.

Many iotests expect the entire reply as-is. To reduce churn there, add a
private execution interface that will ease transition churn. However, I
do not wish to encourage its use, so it will remain a private interface.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-22-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: debbabd77f340758099212985dac75b3c1bedd47
      
https://github.com/qemu/qemu/commit/debbabd77f340758099212985dac75b3c1bedd47
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/util.py

  Log Message:
  -----------
  python/aqmp: add asyncio_run compatibility wrapper

As a convenience. It isn't used by the library itself, but it is used by
the test suite. It will also come in handy for users of the library
still on Python 3.6.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-23-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: ed6d4d7a95c2d508b7e6609f573042e3dabc52da
      
https://github.com/qemu/qemu/commit/ed6d4d7a95c2d508b7e6609f573042e3dabc52da
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/__init__.py

  Log Message:
  -----------
  python/aqmp: add scary message

Add a warning whenever AQMP is used to steer people gently away from
using it for the time-being.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-24-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 4320f7172f66d573e31cb7ab697bca3bd3030f16
      
https://github.com/qemu/qemu/commit/4320f7172f66d573e31cb7ab697bca3bd3030f16
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/Pipfile.lock
    M python/setup.cfg

  Log Message:
  -----------
  python: bump avocado to v90.0

Avocado v90 includes improved support for running async unit tests. The
workaround that existed prior to v90 causes the unit tests to fail
afterwards, however, so upgrade our minimum version pin to the very
latest and greatest.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-25-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: a1f71b61ea763b5ac7429940018c1bb697889e56
      
https://github.com/qemu/qemu/commit/a1f71b61ea763b5ac7429940018c1bb697889e56
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    A python/tests/protocol.py

  Log Message:
  -----------
  python/aqmp: add AsyncProtocol unit tests

This tests most of protocol.py -- From a hacked up Coverage.py run, it's
at about 86%. There's a few error cases that aren't very well tested
yet, they're hard to induce artificially so far. I'm working on it.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-26-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 8193b9d148e0d42794b78ab040c804db15b5f524
      
https://github.com/qemu/qemu/commit/8193b9d148e0d42794b78ab040c804db15b5f524
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/tests/protocol.py

  Log Message:
  -----------
  python/aqmp: add LineProtocol tests

Tests a real connect, a real accept, and really sending and receiving a
message over a UNIX socket.

Brings coverage of protocol.py up to ~93%.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-27-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: a4ffaecd5726433f01b0ff857054acad9dc9df12
      
https://github.com/qemu/qemu/commit/a4ffaecd5726433f01b0ff857054acad9dc9df12
  Author: John Snow <jsnow@redhat.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/.gitignore
    M python/Makefile
    M python/avocado.cfg
    M python/setup.cfg

  Log Message:
  -----------
  python/aqmp: Add Coverage.py support

I'm not exposing this via the Makefile help, it's not likely to be
useful to passersby. Switch the avocado runner to the 'legacy' runner
for now, as the new runner seems to obscure coverage reports, again.

Usage is to enter your venv of choice and then:
`make check-coverage && xdg-open htmlcov/index.html`.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-28-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 974e2f4722d719618502c43271f54cc10aec1dc7
      
https://github.com/qemu/qemu/commit/974e2f4722d719618502c43271f54cc10aec1dc7
  Author: G S Niteesh Babu <niteesh.gs@gmail.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/Pipfile.lock
    M python/setup.cfg

  Log Message:
  -----------
  python: Add dependencies for AQMP TUI

Added dependencies for the upcoming AQMP TUI under the optional
'tui' group.

The same dependencies have also been added under the devel group
since no work around has been found for optional groups to imply
other optional groups.

Signed-off-by: G S Niteesh Babu <niteesh.gs@gmail.com>
Message-Id: <20210823220746.28295-2-niteesh.gs@gmail.com>
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: aeb6b48a4714895a202e97a35c789ef7edf71665
      
https://github.com/qemu/qemu/commit/aeb6b48a4714895a202e97a35c789ef7edf71665
  Author: G S Niteesh Babu <niteesh.gs@gmail.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    A python/qemu/aqmp/aqmp_tui.py
    M python/setup.cfg

  Log Message:
  -----------
  python/aqmp-tui: Add AQMP TUI

Added AQMP TUI.

Implements the follwing basic features:
1) Command transmission/reception.
2) Shows events asynchronously.
3) Shows server status in the bottom status bar.
4) Automatic retries on disconnects and error conditions.

Also added type annotations and necessary pylint/mypy configurations.

Signed-off-by: G S Niteesh Babu <niteesh.gs@gmail.com>
Message-Id: <20210823220746.28295-3-niteesh.gs@gmail.com>
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 35755f7d4f8d5f012cd9ee9fbb303e4cce8cc0b8
      
https://github.com/qemu/qemu/commit/35755f7d4f8d5f012cd9ee9fbb303e4cce8cc0b8
  Author: G S Niteesh Babu <niteesh.gs@gmail.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/setup.cfg

  Log Message:
  -----------
  python: Add entry point for aqmp-tui

Add an entry point for aqmp-tui. This will allow it to be run from
the command line using "aqmp-tui localhost:1234"
More options available in the TUI can be found using "aqmp-tui -h"

Signed-off-by: G S Niteesh Babu <niteesh.gs@gmail.com>
Message-Id: <20210823220746.28295-4-niteesh.gs@gmail.com>
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: f37c34d601b7786cf98aa8c9639b9ab6660a9af7
      
https://github.com/qemu/qemu/commit/f37c34d601b7786cf98aa8c9639b9ab6660a9af7
  Author: G S Niteesh Babu <niteesh.gs@gmail.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/Pipfile.lock
    M python/setup.cfg

  Log Message:
  -----------
  python: add optional pygments dependency

Added pygments as optional dependency for AQMP TUI.
This is required for the upcoming syntax highlighting feature
in AQMP TUI.
The dependency has also been added in the devel optional group.

Added mypy 'ignore_missing_imports' for pygments since it does
not have any type stubs.

Signed-off-by: G S Niteesh Babu <niteesh.gs@gmail.com>
Message-Id: <20210823220746.28295-5-niteesh.gs@gmail.com>
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 99e45a6131a7fef19ffe0190f9c479fae4850d53
      
https://github.com/qemu/qemu/commit/99e45a6131a7fef19ffe0190f9c479fae4850d53
  Author: G S Niteesh Babu <niteesh.gs@gmail.com>
  Date:   2021-09-27 (Mon, 27 Sep 2021)

  Changed paths:
    M python/qemu/aqmp/aqmp_tui.py

  Log Message:
  -----------
  python/aqmp-tui: Add syntax highlighting

Add syntax highlighting for the incoming and outgoing QMP messages.
This is achieved using the pygments module which was added in a
previous commit.

The current implementation is a really simple one which doesn't
allow for any configuration. In future this has to be improved
to allow for easier theme config using an external config of
some sort.

Signed-off-by: G S Niteesh Babu <niteesh.gs@gmail.com>
Message-Id: <20210823220746.28295-6-niteesh.gs@gmail.com>
Signed-off-by: John Snow <jsnow@redhat.com>


  Commit: 6b54a31bf7b403672a798b6443b1930ae6c74dea
      
https://github.com/qemu/qemu/commit/6b54a31bf7b403672a798b6443b1930ae6c74dea
  Author: Peter Maydell <peter.maydell@linaro.org>
  Date:   2021-09-28 (Tue, 28 Sep 2021)

  Changed paths:
    M python/.gitignore
    M python/Makefile
    M python/Pipfile.lock
    M python/avocado.cfg
    A python/qemu/aqmp/__init__.py
    A python/qemu/aqmp/aqmp_tui.py
    A python/qemu/aqmp/error.py
    A python/qemu/aqmp/events.py
    A python/qemu/aqmp/message.py
    A python/qemu/aqmp/models.py
    A python/qemu/aqmp/protocol.py
    A python/qemu/aqmp/py.typed
    A python/qemu/aqmp/qmp_client.py
    A python/qemu/aqmp/util.py
    M python/setup.cfg
    A python/tests/protocol.py

  Log Message:
  -----------
  Merge remote-tracking branch 'remotes/jsnow-gitlab/tags/python-pull-request' 
into staging

Python Pull request

# gpg: Signature made Mon 27 Sep 2021 20:24:39 BST
# gpg:                using RSA key F9B7ABDBBCACDF95BE76CBD07DEF8106AAFC390E
# gpg: Good signature from "John Snow (John Huston) <jsnow@redhat.com>" [full]
# Primary key fingerprint: FAEB 9711 A12C F475 812F  18F2 88A9 064D 1835 61EB
#      Subkey fingerprint: F9B7 ABDB BCAC DF95 BE76  CBD0 7DEF 8106 AAFC 390E

* remotes/jsnow-gitlab/tags/python-pull-request: (32 commits)
  python/aqmp-tui: Add syntax highlighting
  python: add optional pygments dependency
  python: Add entry point for aqmp-tui
  python/aqmp-tui: Add AQMP TUI
  python: Add dependencies for AQMP TUI
  python/aqmp: Add Coverage.py support
  python/aqmp: add LineProtocol tests
  python/aqmp: add AsyncProtocol unit tests
  python: bump avocado to v90.0
  python/aqmp: add scary message
  python/aqmp: add asyncio_run compatibility wrapper
  python/aqmp: add _raw() execution interface
  python/aqmp: add execute() interfaces
  python/aqmp: Add message routing to QMP protocol
  python/pylint: disable no-member check
  python/aqmp: add QMP protocol support
  python/pylint: disable too-many-function-args
  python/aqmp: add QMP event support
  python/aqmp: add well-known QMP object models
  python/aqmp: add QMP Message format
  ...

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>


Compare: https://github.com/qemu/qemu/compare/14f02d8a9ec1...6b54a31bf7b4



reply via email to

[Prev in Thread] Current Thread [Next in Thread]