python/qmp/legacy: remove open_with_socket() calls

Favor using connect() when passing a socket instead of
open_with_socket(). Simultaneously, update constructor calls to use the
combined address argument for QEMUMonitorProtocol().

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20230517163406.2593480-5-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2023-05-17 12:34:05 -04:00
parent 7f5f3ae7d5
commit 5bbc5936bb
2 changed files with 16 additions and 20 deletions

View file

@ -337,16 +337,17 @@ class QEMUMachine:
self._remove_files.append(self._console_address) self._remove_files.append(self._console_address)
if self._qmp_set: if self._qmp_set:
sock = None
if self._monitor_address is None: if self._monitor_address is None:
self._sock_pair = socket.socketpair() self._sock_pair = socket.socketpair()
sock = self._sock_pair[1] sock = self._sock_pair[1]
if isinstance(self._monitor_address, str): if isinstance(self._monitor_address, str):
self._remove_files.append(self._monitor_address) self._remove_files.append(self._monitor_address)
sock_or_addr = self._monitor_address or sock
assert sock_or_addr is not None
self._qmp_connection = QEMUMonitorProtocol( self._qmp_connection = QEMUMonitorProtocol(
address=self._monitor_address, sock_or_addr,
sock=sock,
server=bool(self._monitor_address), server=bool(self._monitor_address),
nickname=self._name nickname=self._name
) )

View file

@ -68,34 +68,31 @@ class QEMUMonitorProtocol:
Provide an API to connect to QEMU via QEMU Monitor Protocol (QMP) Provide an API to connect to QEMU via QEMU Monitor Protocol (QMP)
and then allow to handle commands and events. and then allow to handle commands and events.
:param address: QEMU address, can be either a unix socket path (string) :param address: QEMU address, can be a unix socket path (string), a tuple
or a tuple in the form ( address, port ) for a TCP in the form ( address, port ) for a TCP connection, or an
connection or None existing `socket.socket` object.
:param sock: a socket or None
:param server: Act as the socket server. (See 'accept') :param server: Act as the socket server. (See 'accept')
Not applicable when passing a socket directly.
:param nickname: Optional nickname used for logging. :param nickname: Optional nickname used for logging.
""" """
def __init__(self, def __init__(self,
address: Optional[SocketAddrT] = None, address: Union[SocketAddrT, socket.socket],
sock: Optional[socket.socket] = None,
server: bool = False, server: bool = False,
nickname: Optional[str] = None): nickname: Optional[str] = None):
assert address or sock if server and isinstance(address, socket.socket):
raise ValueError(
"server argument should be False when passing a socket")
self._qmp = QMPClient(nickname) self._qmp = QMPClient(nickname)
self._aloop = asyncio.get_event_loop() self._aloop = asyncio.get_event_loop()
self._address = address self._address = address
self._sock = sock
self._timeout: Optional[float] = None self._timeout: Optional[float] = None
if server: if server:
if sock: assert not isinstance(self._address, socket.socket)
assert self._sock is not None self._sync(self._qmp.start_server(self._address))
self._sync(self._qmp.open_with_socket(self._sock))
else:
assert self._address is not None
self._sync(self._qmp.start_server(self._address))
_T = TypeVar('_T') _T = TypeVar('_T')
@ -150,13 +147,11 @@ class QEMUMonitorProtocol:
:return: QMP greeting dict, or None if negotiate is false :return: QMP greeting dict, or None if negotiate is false
:raise ConnectError: on connection errors :raise ConnectError: on connection errors
""" """
addr_or_sock = self._address or self._sock
assert addr_or_sock is not None
self._qmp.await_greeting = negotiate self._qmp.await_greeting = negotiate
self._qmp.negotiate = negotiate self._qmp.negotiate = negotiate
self._sync( self._sync(
self._qmp.connect(addr_or_sock) self._qmp.connect(self._address)
) )
return self._get_greeting() return self._get_greeting()