diff mbox series

[19/20] python/aqmp: add asyncio_run compatibility wrapper

Message ID 20210701041313.1696009-20-jsnow@redhat.com
State New
Headers show
Series python: introduce Asynchronous QMP package | expand

Commit Message

John Snow July 1, 2021, 4:13 a.m. UTC
Merely as a convenience for users stuck on Python 3.6. It isn't used by
the library itself.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 python/qemu/aqmp/util.py | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
diff mbox series

Patch

diff --git a/python/qemu/aqmp/util.py b/python/qemu/aqmp/util.py
index 2311be5893..356323ac70 100644
--- a/python/qemu/aqmp/util.py
+++ b/python/qemu/aqmp/util.py
@@ -109,6 +109,26 @@  async def wait_task_done(task: Optional['asyncio.Future[Any]']) -> None:
             break
 
 
+def asyncio_run(coro: Coroutine[Any, Any, T]) -> T:
+    """
+    Python 3.6-compatible `asyncio.run` wrapper.
+
+    :param coro: A coroutine to execute now.
+    :return: The return value from the coroutine.
+    """
+    # Python 3.7+
+    if hasattr(asyncio, 'run'):
+        # pylint: disable=no-member
+        return asyncio.run(coro)  # type: ignore
+
+    # Python 3.6
+    loop = asyncio.get_event_loop()
+    ret = loop.run_until_complete(coro)
+    loop.close()
+
+    return ret
+
+
 def pretty_traceback(prefix: str = "  | ") -> str:
     """
     Formats the current traceback, indented to provide visual distinction.