mirror: use run_bg_task instead of storing references to tasks

Signed-off-by: Olivier Gayot <olivier.gayot@canonical.com>
This commit is contained in:
Olivier Gayot 2023-01-20 10:43:30 +01:00
parent b0ced5afb0
commit 70b90612d1
1 changed files with 6 additions and 7 deletions

View File

@ -18,7 +18,7 @@ Select the Ubuntu archive mirror.
""" """
import asyncio import asyncio
import logging import logging
from typing import Callable, List, Optional from typing import Callable, Optional
from urwid import ( from urwid import (
connect_signal, connect_signal,
@ -27,6 +27,7 @@ from urwid import (
Text, Text,
) )
import subiquitycore.async_helpers as async_helpers
from subiquitycore.ui.buttons import ( from subiquitycore.ui.buttons import (
other_btn, other_btn,
) )
@ -153,8 +154,6 @@ class MirrorView(BaseView):
self.form.on_validate = self.on_url_changed self.form.on_validate = self.on_url_changed
self.tasks: List[asyncio.Task] = [] # Throwaway tasks
pile = Pile(rows) pile = Pile(rows)
pile.focus_position = len(rows) - 2 pile.focus_position = len(rows) - 2
super().__init__(Padding( super().__init__(Padding(
@ -169,10 +168,10 @@ class MirrorView(BaseView):
await self._check_url(url, cancel_ongoing=True) await self._check_url(url, cancel_ongoing=True)
if self.has_network: if self.has_network:
asyncio.create_task(inner()) async_helpers.run_bg_task(inner())
def check_url(self, url, retry=False): def check_url(self, url, retry=False):
asyncio.create_task(self._check_url(url, retry)) async_helpers.run_bg_task(self._check_url(url, retry))
async def _check_url(self, url, cancel_ongoing=False, retry=False): async def _check_url(self, url, cancel_ongoing=False, retry=False):
# TODO do something with retry? # TODO do something with retry?
@ -201,7 +200,7 @@ class MirrorView(BaseView):
self.output_wrap._w = self.output_box self.output_wrap._w = self.output_box
if check_state.status == MirrorCheckStatus.RUNNING: if check_state.status == MirrorCheckStatus.RUNNING:
asyncio.create_task(cb()) async_helpers.run_bg_task(cb())
self.status_spinner.start() self.status_spinner.start()
self.status_wrap._w = TablePile([ self.status_wrap._w = TablePile([
TableRow([self.status_text, self.status_spinner]), TableRow([self.status_text, self.status_spinner]),
@ -224,7 +223,7 @@ class MirrorView(BaseView):
log.debug("User input: {}".format(result.as_data())) log.debug("User input: {}".format(result.as_data()))
if self.has_network and self.last_status in [ if self.has_network and self.last_status in [
MirrorCheckStatus.RUNNING, MirrorCheckStatus.FAILED, None]: MirrorCheckStatus.RUNNING, MirrorCheckStatus.FAILED, None]:
self.tasks.append(asyncio.create_task(confirm_continue_anyway())) async_helpers.run_bg_task(confirm_continue_anyway())
else: else:
self.controller.done(result.url.value) self.controller.done(result.url.value)