From 6bfebc7306e42910cd33553d9ed385ef475d8196 Mon Sep 17 00:00:00 2001 From: John Snow Date: Wed, 22 Sep 2021 20:49:24 -0400 Subject: [PATCH] python/aqmp: Return cleared events from EventListener.clear() This serves two purposes: (1) It is now possible to discern whether or not clear() removed any event(s) from the queue with absolute certainty, and (2) It is now very easy to get a List of all pending events in one chunk, which is useful for the sync bridge. Signed-off-by: John Snow Reviewed-by: Hanna Reitz Reviewed-by: Paolo Bonzini Message-id: 20210923004938.3999963-4-jsnow@redhat.com Signed-off-by: John Snow --- python/qemu/aqmp/events.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/python/qemu/aqmp/events.py b/python/qemu/aqmp/events.py index 271899f6b82..5f7150c78d4 100644 --- a/python/qemu/aqmp/events.py +++ b/python/qemu/aqmp/events.py @@ -562,7 +562,7 @@ class EventListener: """ return self._queue.empty() - def clear(self) -> None: + def clear(self) -> List[Message]: """ Clear this listener of all pending events. @@ -570,17 +570,22 @@ class EventListener: pending FIFO queue synchronously. It can be also be used to manually clear any pending events, if desired. + :return: The cleared events, if any. + .. warning:: Take care when discarding events. Cleared events will be silently tossed on the floor. All events that were ever accepted by this listener are visible in `history()`. """ + events = [] while True: try: - self._queue.get_nowait() + events.append(self._queue.get_nowait()) except asyncio.QueueEmpty: break + return events + def __aiter__(self) -> AsyncIterator[Message]: return self -- 2.39.5