[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 10/16] python/machine.py: Handle None events in events_wait
From: |
John Snow |
Subject: |
[PATCH v4 10/16] python/machine.py: Handle None events in events_wait |
Date: |
Fri, 26 Jun 2020 16:41:27 -0400 |
If the timeout is 0, we can get None back. Handle this explicitly.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
---
python/qemu/machine.py | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/python/qemu/machine.py b/python/qemu/machine.py
index 8eb10a4bc1..f65bd18c1a 100644
--- a/python/qemu/machine.py
+++ b/python/qemu/machine.py
@@ -33,7 +33,7 @@
from types import TracebackType
from . import qmp
-from .qmp import SocketAddrT
+from .qmp import SocketAddrT, QMPMessage
LOG = logging.getLogger(__name__)
@@ -552,13 +552,20 @@ def event_wait(self, name, timeout=60.0, match=None):
def events_wait(self, events, timeout=60.0):
"""
- events_wait waits for and returns a named event
- from QMP with a timeout.
+ events_wait waits for and returns a single named event from QMP.
+ In the case of multiple qualifying events, this function returns the
+ first one.
- events: a sequence of (name, match_criteria) tuples.
- The match criteria are optional and may be None.
- See event_match for details.
- timeout: QEMUMonitorProtocol.pull_event timeout parameter.
+ :param events: A sequence of (name, match_criteria) tuples.
+ The match criteria are optional and may be None.
+ See event_match for details.
+ :param timeout: Optional timeout, in seconds.
+ See QEMUMonitorProtocol.pull_event.
+
+ :raise QMPTimeoutError: If timeout was non-zero and no matching events
+ were found.
+ :return: A QMP event matching the filter criteria.
+ If timeout was 0 and no event matched, None.
"""
def _match(event):
for name, match in events:
@@ -566,6 +573,8 @@ def _match(event):
return True
return False
+ event: Optional[QMPMessage]
+
# Search cached events
for event in self._events:
if _match(event):
@@ -575,6 +584,10 @@ def _match(event):
# Poll for new events
while True:
event = self._qmp.pull_event(wait=timeout)
+ if event is None:
+ # NB: None is only returned when timeout is false-ish.
+ # Timeouts raise QMPTimeoutError instead!
+ break
if _match(event):
return event
self._events.append(event)
--
2.21.3
- [PATCH v4 00/16] python: add mypy support to python/qemu, John Snow, 2020/06/26
- [PATCH v4 04/16] python/qmp.py: Do not return None from cmd_obj, John Snow, 2020/06/26
- [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 01/16] python/qmp.py: Define common types, John Snow, 2020/06/26
- [PATCH v4 05/16] python/qmp.py: add casts to JSON deserialization, John Snow, 2020/06/26
- [PATCH v4 06/16] python/qmp.py: add QMPProtocolError, 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 09/16] python/machine.py: Don't modify state in _base_args(), John Snow, 2020/06/26
- [PATCH v4 10/16] python/machine.py: Handle None events in events_wait,
John Snow <=
- [PATCH v4 13/16] python/machine.py: fix _popen access, John Snow, 2020/06/26
- [PATCH v4 14/16] python/qemu: make 'args' style arguments immutable, John Snow, 2020/06/26
- [PATCH v4 15/16] iotests.py: Adjust HMP kwargs typing, John Snow, 2020/06/26
- [PATCH v4 12/16] python/machine.py: Add _qmp access shim, John Snow, 2020/06/26
- [PATCH v4 11/16] python/machine.py: use qmp.command, John Snow, 2020/06/26
- [PATCH v4 16/16] python/qemu: Add mypy type annotations, John Snow, 2020/06/26
- Re: [PATCH v4 00/16] python: add mypy support to python/qemu, Philippe Mathieu-Daudé, 2020/06/29