python/aqmp: add asyncio_run compatibility wrapper
authorJohn Snow <jsnow@redhat.com>
Wed, 15 Sep 2021 16:29:50 +0000 (12:29 -0400)
committerJohn Snow <jsnow@redhat.com>
Mon, 27 Sep 2021 16:10:29 +0000 (12:10 -0400)
As a convenience. It isn't used by the library itself, but it is used by
the test suite. It will also come in handy for users of the library
still on Python 3.6.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210915162955.333025-23-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
python/qemu/aqmp/util.py

index 52a153218898a8c4d67ca9382ea2372f7be59e7c..eaa5fc7d5f9ccf84bd2d2855d3824eff509b29eb 100644 (file)
@@ -147,6 +147,25 @@ async def wait_closed(writer: asyncio.StreamWriter) -> None:
         await asyncio.sleep(0)
 
 
+def asyncio_run(coro: Coroutine[Any, Any, T], *, debug: bool = False) -> T:
+    """
+    Python 3.6-compatible `asyncio.run` wrapper.
+
+    :param coro: A coroutine to execute now.
+    :return: The return value from the coroutine.
+    """
+    if sys.version_info >= (3, 7):
+        return asyncio.run(coro, debug=debug)
+
+    # Python 3.6
+    loop = asyncio.get_event_loop()
+    loop.set_debug(debug)
+    ret = loop.run_until_complete(coro)
+    loop.close()
+
+    return ret
+
+
 # ----------------------------
 # Section: Logging & Debugging
 # ----------------------------