mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
python/qmp: add parse_address classmethod
This takes the place of qmp-shell's __get_address function. It also allows other utilities to share the same parser and syntax for specifying QMP locations. Signed-off-by: John Snow <jsnow@redhat.com> Message-id: 20210603003719.1321369-4-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
5d15c9b875
commit
587adaca55
2 changed files with 28 additions and 19 deletions
|
@ -92,6 +92,12 @@ class QMPResponseError(QMPError):
|
|||
self.reply = reply
|
||||
|
||||
|
||||
class QMPBadPortError(QMPError):
|
||||
"""
|
||||
Unable to parse socket address: Port was non-numerical.
|
||||
"""
|
||||
|
||||
|
||||
class QEMUMonitorProtocol:
|
||||
"""
|
||||
Provide an API to connect to QEMU via QEMU Monitor Protocol (QMP) and then
|
||||
|
@ -219,6 +225,26 @@ class QEMUMonitorProtocol:
|
|||
# Implement context manager exit function.
|
||||
self.close()
|
||||
|
||||
@classmethod
|
||||
def parse_address(cls, address: str) -> SocketAddrT:
|
||||
"""
|
||||
Parse a string into a QMP address.
|
||||
|
||||
Figure out if the argument is in the port:host form.
|
||||
If it's not, it's probably a file path.
|
||||
"""
|
||||
components = address.split(':')
|
||||
if len(components) == 2:
|
||||
try:
|
||||
port = int(components[1])
|
||||
except ValueError:
|
||||
msg = f"Bad port: '{components[1]}' in '{address}'."
|
||||
raise QMPBadPortError(msg) from None
|
||||
return (components[0], port)
|
||||
|
||||
# Treat as filepath.
|
||||
return address
|
||||
|
||||
def connect(self, negotiate: bool = True) -> Optional[QMPMessage]:
|
||||
"""
|
||||
Connect to the QMP Monitor and perform capabilities negotiation.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue