[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 03/19] python/qmp: add parse_address classmethod
From: |
John Snow |
Subject: |
[PATCH v3 03/19] python/qmp: add parse_address classmethod |
Date: |
Wed, 2 Jun 2021 20:37:03 -0400 |
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>
---
python/qemu/qmp/__init__.py | 26 ++++++++++++++++++++++++++
scripts/qmp/qmp-shell | 21 ++-------------------
2 files changed, 28 insertions(+), 19 deletions(-)
diff --git a/python/qemu/qmp/__init__.py b/python/qemu/qmp/__init__.py
index 5fb970f8a80..822c793c320 100644
--- a/python/qemu/qmp/__init__.py
+++ b/python/qemu/qmp/__init__.py
@@ -92,6 +92,12 @@ def __init__(self, reply: QMPMessage):
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 @@ def __exit__(self,
# 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.
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index b4d06096abd..d5ae8a9b212 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -89,8 +89,6 @@ class QMPCompleter(list):
class QMPShellError(Exception):
pass
-class QMPShellBadPort(QMPShellError):
- pass
class FuzzyJSON(ast.NodeTransformer):
'''This extension of ast.NodeTransformer filters literal "true/false/null"
@@ -109,7 +107,7 @@ class FuzzyJSON(ast.NodeTransformer):
# _execute_cmd()). Let's design a better one.
class QMPShell(qmp.QEMUMonitorProtocol):
def __init__(self, address, pretty=False):
- super(QMPShell, self).__init__(self.__get_address(address))
+ super(QMPShell, self).__init__(self.parse_address(address))
self._greeting = None
self._completer = None
self._pretty = pretty
@@ -118,21 +116,6 @@ class QMPShell(qmp.QEMUMonitorProtocol):
self._histfile = os.path.join(os.path.expanduser('~'),
'.qmp-shell_history')
- def __get_address(self, arg):
- """
- Figure out if the argument is in the port:host form, if it's not it's
- probably a file path.
- """
- addr = arg.split(':')
- if len(addr) == 2:
- try:
- port = int(addr[1])
- except ValueError:
- raise QMPShellBadPort
- return ( addr[0], port )
- # socket path
- return arg
-
def _fill_completion(self):
cmds = self.cmd('query-commands')
if 'error' in cmds:
@@ -437,7 +420,7 @@ def main():
if qemu is None:
fail_cmdline()
- except QMPShellBadPort:
+ except qmp.QMPBadPortError:
die('bad port number in command-line')
try:
--
2.31.1
- [PATCH v3 00/19] Python: move /scripts/qmp/qom* to /python/qemu/qmp/qom*, John Snow, 2021/06/02
- [PATCH v3 03/19] python/qmp: add parse_address classmethod,
John Snow <=
- [PATCH v3 02/19] python/qmp: Fix type of SocketAddrT, John Snow, 2021/06/02
- [PATCH v3 01/19] python/pipenv: Update Pipfile.lock, John Snow, 2021/06/02
- [PATCH v3 05/19] python/qmp: add qom script entry points, John Snow, 2021/06/02
- [PATCH v3 04/19] python/qmp: Add qom script rewrites, John Snow, 2021/06/02
- [PATCH v3 06/19] scripts/qmp: redirect qom-xxx scripts to python/qemu/qmp/, John Snow, 2021/06/02
- [PATCH v3 07/19] scripts/qom-fuse: apply isort rules, John Snow, 2021/06/02
- [PATCH v3 08/19] scripts/qom-fuse: apply flake8 rules, John Snow, 2021/06/02
- [PATCH v3 09/19] python: Add 'fh' to known-good variable names, John Snow, 2021/06/02