Skip to content

Fix AwaitComplete runtime error#4325

Merged
Torxed merged 1 commit intoarchlinux:masterfrom
svartkanin:fix-await-complete
Mar 26, 2026
Merged

Fix AwaitComplete runtime error#4325
Torxed merged 1 commit intoarchlinux:masterfrom
svartkanin:fix-await-complete

Conversation

@svartkanin
Copy link
Copy Markdown
Collaborator

@svartkanin svartkanin commented Mar 26, 2026

Sometimes after exiting the menu there would be runtime exception

Task exception was never retrieved
future: <Task finished name='None' coro=<Worker._run() done, defined at archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/worker.py:358> exception=AttributeError("'AwaitComplete' object has no attribute '_pre_await'")>
Traceback (most recent call last):
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/worker.py", line 370, in _run
    self._result = await self.run()
                   ^^^^^^^^^^^^^^^^
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/worker.py", line 354, in run
    return await (
           ^^^^^^^
        self._run_threaded() if self._thread_worker else self._run_async()
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/worker.py", line 326, in _run_threaded
    return await loop.run_in_executor(None, runner, self._work)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/concurrent/futures/thread.py", line 59, in run
    result = self.fn(*self.args, **self.kwargs)
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/worker.py", line 309, in run_callable
    return work()
  File "archinstall/tui-filter-confirm/archinstall/tui/ui/components.py", line 116, in _exec_callback
    _ = self.dismiss(Result(ResultType.Selection, _data=result))
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/screen.py", line 1911, in dismiss
    await_pop = self.app.pop_screen()
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/app.py", line 3071, in pop_screen
    return AwaitComplete(do_pop()).call_next(self)
           ~~~~~~~~~~~~~^^^^^^^^^^
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/await_complete.py", line 29, in __init__
    self._future: Future[Any] = gather(*awaitables)
                                ~~~~~~^^^^^^^^^^^^^
  File ".local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/tasks.py", line 884, in gather
    fut = ensure_future(arg, loop=loop)
  File ".local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/tasks.py", line 746, in ensure_future
    loop = events.get_event_loop()
  File ".local/share/uv/python/cpython-3.13.11-linux-x86_64-gnu/lib/python3.13/asyncio/events.py", line 716, in get_event_loop
    raise RuntimeError('There is no current event loop in thread %r.'
                       % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'asyncio_0'.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/worker.py", line 384, in _run
    app._handle_exception(worker_failed)
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/app.py", line 3233, in _handle_exception
    self._fatal_error()
    ~~~~~~~~~~~~~~~~~^^
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/app.py", line 3240, in _fatal_error
    traceback = Traceback(
        show_locals=True, width=None, locals_max_length=5, suppress=[rich]
    )
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/rich/traceback.py", line 321, in __init__
    trace = self.extract(
        exc_type, exc_value, traceback, show_locals=show_locals
    )
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/rich/traceback.py", line 581, in extract
    key: pretty.traverse(
         ~~~~~~~~~~~~~~~^
        value,
        ^^^^^^
    ...<2 lines>...
        max_depth=locals_max_depth,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/rich/pretty.py", line 874, in traverse
    node = _traverse(_object, root=True)
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/rich/pretty.py", line 667, in _traverse
    args = list(iter_rich_args(rich_repr_result))
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/rich/pretty.py", line 634, in iter_rich_args
    for arg in rich_args:
               ^^^^^^^^^
  File "archinstall/tui-filter-confirm/.venv/lib/python3.13/site-packages/textual/await_complete.py", line 35, in __rich_repr__
    yield "pre_await", self._pre_await, None
                       ^^^^^^^^^^^^^^^
AttributeError: 'AwaitComplete' object has no attribute '_pre_await'
<sys>:0: RuntimeWarning: coroutine 'App.pop_screen.<locals>.do_pop' was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

I think this should fix it https://textual.textualize.io/api/app/#textual.app.App.call_from_thread

@svartkanin svartkanin requested a review from Torxed as a code owner March 26, 2026 09:55
@Torxed Torxed merged commit 4b9087e into archlinux:master Mar 26, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants