scripts/qmp-shell: Accept SocketAddrT instead of string

Don't "extend" QEMUMonitorProtocol by changing the argument types. Move
the string parsing just outside of the class instead.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210607200649.1840382-29-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2021-06-07 16:06:35 -04:00
parent 1eab88723c
commit b0b8ca17e5

View File

@ -130,9 +130,9 @@ class FuzzyJSON(ast.NodeTransformer):
# TODO: QMPShell's interface is a bit ugly (eg. _fill_completion() and
# _execute_cmd()). Let's design a better one.
class QMPShell(qmp.QEMUMonitorProtocol):
def __init__(self, address: str, pretty: bool = False,
verbose: bool = False):
super().__init__(self.parse_address(address))
def __init__(self, address: qmp.SocketAddrT,
pretty: bool = False, verbose: bool = False):
super().__init__(address)
self._greeting: Optional[QMPMessage] = None
self._completer = QMPCompleter()
self._pretty = pretty
@ -347,7 +347,7 @@ class QMPShell(qmp.QEMUMonitorProtocol):
class HMPShell(QMPShell):
def __init__(self, address: str,
def __init__(self, address: qmp.SocketAddrT,
pretty: bool = False, verbose: bool = False):
super().__init__(address, pretty, verbose)
self.__cpu_index = 0
@ -450,11 +450,13 @@ def main() -> None:
shell_class = HMPShell if args.hmp else QMPShell
try:
qemu = shell_class(args.qmp_server, args.pretty, args.verbose)
address = shell_class.parse_address(args.qmp_server)
except qmp.QMPBadPortError:
parser.error(f"Bad port number: {args.qmp_server}")
return # pycharm doesn't know error() is noreturn
qemu = shell_class(address, args.pretty, args.verbose)
try:
qemu.connect(negotiate=not args.skip_negotiation)
except qmp.QMPConnectError: