Browse Source

task: Use TimeoutError from asyncio.exceptions on Python 3.8+

Fixes unit test failures
rdb 5 years ago
parent
commit
29f552a6ef
1 changed files with 10 additions and 0 deletions
  1. 10 0
      panda/src/event/asyncFuture_ext.cxx

+ 10 - 0
panda/src/event/asyncFuture_ext.cxx

@@ -196,16 +196,26 @@ result(PyObject *timeout) const {
       static PyObject *exc_type = nullptr;
       static PyObject *exc_type = nullptr;
       if (exc_type == nullptr) {
       if (exc_type == nullptr) {
         // Get the TimeoutError that asyncio uses, too.
         // Get the TimeoutError that asyncio uses, too.
+#if PY_VERSION_HEX >= 0x03080000
+        PyObject *module = PyImport_ImportModule("asyncio.exceptions");
+#else
         PyObject *module = PyImport_ImportModule("concurrent.futures._base");
         PyObject *module = PyImport_ImportModule("concurrent.futures._base");
+#endif
         if (module != nullptr) {
         if (module != nullptr) {
           exc_type = PyObject_GetAttrString(module, "TimeoutError");
           exc_type = PyObject_GetAttrString(module, "TimeoutError");
           Py_DECREF(module);
           Py_DECREF(module);
         }
         }
         // If we can't get that, we should pretend and make our own.
         // If we can't get that, we should pretend and make our own.
         if (exc_type == nullptr) {
         if (exc_type == nullptr) {
+#if PY_VERSION_HEX >= 0x03080000
+          exc_type = PyErr_NewExceptionWithDoc((char*)"asyncio.exceptions.TimeoutError",
+                                               (char*)"The operation exceeded the given deadline.",
+                                               nullptr, nullptr);
+#else
           exc_type = PyErr_NewExceptionWithDoc((char*)"concurrent.futures._base.TimeoutError",
           exc_type = PyErr_NewExceptionWithDoc((char*)"concurrent.futures._base.TimeoutError",
                                                (char*)"The operation exceeded the given deadline.",
                                                (char*)"The operation exceeded the given deadline.",
                                                nullptr, nullptr);
                                                nullptr, nullptr);
+#endif
         }
         }
       }
       }
       PyErr_SetNone(exc_type);
       PyErr_SetNone(exc_type);