keep reference to remove task

This commit is contained in:
Will McGugan
2023-01-24 16:01:37 +01:00
parent d9dd1dcbe8
commit 3673b0ff48
3 changed files with 6 additions and 5 deletions

View File

@@ -2128,11 +2128,11 @@ class App(Generic[ReturnType], DOMNode):
removed_widgets = self._detach_from_dom(widgets)
finished_event = asyncio.Event()
create_task(
remove_task = create_task(
prune_widgets_task(removed_widgets, finished_event), name="prune nodes"
)
await_remove = AwaitRemove(finished_event)
await_remove = AwaitRemove(finished_event, remove_task)
self.call_next(await_remove)
return await_remove

View File

@@ -1,19 +1,20 @@
"""Provides the type of an awaitable remove."""
from asyncio import Event
from asyncio import Event, Task
from typing import Generator
class AwaitRemove:
"""An awaitable returned by App.remove and DOMQuery.remove."""
def __init__(self, finished_flag: Event) -> None:
def __init__(self, finished_flag: Event, task: Task) -> None:
"""Initialise the instance of ``AwaitRemove``.
Args:
finished_flag: The asyncio event to wait on.
"""
self.finished_flag = finished_flag
self._task = task
async def __call__(self) -> None:
return await self

View File

@@ -170,7 +170,7 @@ async def test_remove():
class RemoveApp(App):
def compose(self) -> ComposeResult:
yield Container(RemoveMeLabel(), RemoveMeLabel())
yield Container(RemoveMeLabel())
async def action_remove_all(self) -> None:
await self.query_one(Container).clear()