[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 04/16] python/qmp.py: Do not return None from cmd_obj
From: |
John Snow |
Subject: |
[PATCH v4 04/16] python/qmp.py: Do not return None from cmd_obj |
Date: |
Fri, 26 Jun 2020 16:41:21 -0400 |
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>
---
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
- [PATCH v4 00/16] python: add mypy support to python/qemu, John Snow, 2020/06/26
- [PATCH v4 01/16] python/qmp.py: Define common types, John Snow, 2020/06/26
- [PATCH v4 04/16] python/qmp.py: Do not return None from cmd_obj,
John Snow <=
- [PATCH v4 02/16] iotests.py: use qemu.qmp type aliases, John Snow, 2020/06/26
- [PATCH v4 03/16] python/qmp.py: re-absorb MonitorResponseError, John Snow, 2020/06/26
- [PATCH v4 06/16] python/qmp.py: add QMPProtocolError, John Snow, 2020/06/26
- [PATCH v4 05/16] python/qmp.py: add casts to JSON deserialization, John Snow, 2020/06/26
- [PATCH v4 07/16] python/machine.py: Fix monitor address typing, John Snow, 2020/06/26
- [PATCH v4 08/16] python/machine.py: reorder __init__, John Snow, 2020/06/26
- [PATCH v4 10/16] python/machine.py: Handle None events in events_wait, John Snow, 2020/06/26
- [PATCH v4 09/16] python/machine.py: Don't modify state in _base_args(), John Snow, 2020/06/26
- [PATCH v4 12/16] python/machine.py: Add _qmp access shim, John Snow, 2020/06/26
- [PATCH v4 15/16] iotests.py: Adjust HMP kwargs typing, John Snow, 2020/06/26