python/machine.py: use qmp.command

machine.py and qmp.py both do the same thing here; refactor machine.py
to use qmp.py's functionality more directly.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20201006235817.3280413-7-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2020-10-06 19:58:03 -04:00
parent 1847a4a8c2
commit aaa81ec609
1 changed files with 20 additions and 12 deletions

View File

@ -25,7 +25,13 @@ import signal
import subprocess import subprocess
import tempfile import tempfile
from types import TracebackType from types import TracebackType
from typing import List, Optional, Type from typing import (
Any,
Dict,
List,
Optional,
Type,
)
from . import console_socket, qmp from . import console_socket, qmp
from .qmp import QMPMessage, SocketAddrT from .qmp import QMPMessage, SocketAddrT
@ -515,17 +521,23 @@ class QEMUMachine:
self._qmp_set = False self._qmp_set = False
self._qmp = None self._qmp = None
def qmp(self, cmd, conv_keys=True, **args): @classmethod
""" def _qmp_args(cls, _conv_keys: bool = True, **args: Any) -> Dict[str, Any]:
Invoke a QMP command and return the response dict
"""
qmp_args = dict() qmp_args = dict()
for key, value in args.items(): for key, value in args.items():
if conv_keys: if _conv_keys:
qmp_args[key.replace('_', '-')] = value qmp_args[key.replace('_', '-')] = value
else: else:
qmp_args[key] = value qmp_args[key] = value
return qmp_args
def qmp(self, cmd: str,
conv_keys: bool = True,
**args: Any) -> QMPMessage:
"""
Invoke a QMP command and return the response dict
"""
qmp_args = self._qmp_args(conv_keys, **args)
return self._qmp.cmd(cmd, args=qmp_args) return self._qmp.cmd(cmd, args=qmp_args)
def command(self, cmd, conv_keys=True, **args): def command(self, cmd, conv_keys=True, **args):
@ -534,12 +546,8 @@ class QEMUMachine:
On success return the response dict. On success return the response dict.
On failure raise an exception. On failure raise an exception.
""" """
reply = self.qmp(cmd, conv_keys, **args) qmp_args = self._qmp_args(conv_keys, **args)
if reply is None: return self._qmp.command(cmd, **qmp_args)
raise qmp.QMPError("Monitor is closed")
if "error" in reply:
raise qmp.QMPResponseError(reply)
return reply["return"]
def get_qmp_event(self, wait=False): def get_qmp_event(self, wait=False):
""" """