[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 17/19] python/qmp.py: Do not return None from cmd_obj
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 17/19] python/qmp.py: Do not return None from cmd_obj |
Date: |
Wed, 15 Jul 2020 00:21:30 +0200 |
From: John Snow <jsnow@redhat.com>
This makes typing the qmp library difficult, as it necessitates wrapping
Optional[] around the type for every return type up the stack. At some
point, it becomes difficult to discern or remember why it's None instead
of the expected object.
Use the python exception system to tell us exactly why we didn't get an
object. Remove this special-cased return.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20200710052220.3306-5-jsnow@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
python/qemu/qmp.py | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/python/qemu/qmp.py b/python/qemu/qmp.py
index aa8a666b8a..ef3c919b76 100644
--- a/python/qemu/qmp.py
+++ b/python/qemu/qmp.py
@@ -225,22 +225,18 @@ def accept(self, timeout=15.0):
self.__sockfile = self.__sock.makefile(mode='r')
return self.__negotiate_capabilities()
- def cmd_obj(self, qmp_cmd):
+ def cmd_obj(self, qmp_cmd: QMPMessage) -> QMPMessage:
"""
Send a QMP command to the QMP Monitor.
@param qmp_cmd: QMP command to be sent as a Python dict
- @return QMP response as a Python dict or None if the connection has
- been closed
+ @return QMP response as a Python dict
"""
self.logger.debug(">>> %s", qmp_cmd)
- try:
- self.__sock.sendall(json.dumps(qmp_cmd).encode('utf-8'))
- except OSError as err:
- if err.errno == errno.EPIPE:
- return None
- raise err
+ self.__sock.sendall(json.dumps(qmp_cmd).encode('utf-8'))
resp = self.__json_read()
+ if resp is None:
+ raise QMPConnectError("Unexpected empty reply from server")
self.logger.debug("<<< %s", resp)
return resp
--
2.21.3
- [PULL 07/19] python/machine.py: Add a configurable timeout to shutdown(), (continued)
- [PULL 07/19] python/machine.py: Add a configurable timeout to shutdown(), Philippe Mathieu-Daudé, 2020/07/14
- [PULL 08/19] python/machine.py: Make wait() call shutdown(), Philippe Mathieu-Daudé, 2020/07/14
- [PULL 09/19] tests/acceptance: wait() instead of shutdown() where appropriate, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 11/19] python/machine.py: split shutdown into hard and soft flavors, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 10/19] tests/acceptance: Don't test reboot on cubieboard, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 12/19] python/machine.py: re-add sigkill warning suppression, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 13/19] python/machine.py: change default wait timeout to 3 seconds, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 14/19] python/qmp.py: Define common types, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 15/19] iotests.py: use qemu.qmp type aliases, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 16/19] python/qmp.py: re-absorb MonitorResponseError, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 17/19] python/qmp.py: Do not return None from cmd_obj,
Philippe Mathieu-Daudé <=
- [PULL 18/19] python/qmp.py: add casts to JSON deserialization, Philippe Mathieu-Daudé, 2020/07/14
- [PULL 19/19] python/qmp.py: add QMPProtocolError, Philippe Mathieu-Daudé, 2020/07/14
- Re: [PULL 00/19] Python patches for 5.1, Peter Maydell, 2020/07/15