use context stuff for the snaplist snapd requests

This commit is contained in:
Michael Hudson-Doyle 2019-12-20 00:29:19 +13:00
parent dacd77f2be
commit 8fe1bffea1
1 changed files with 31 additions and 29 deletions

View File

@ -33,9 +33,10 @@ log = logging.getLogger('subiquity.controllers.snaplist')
class SnapdSnapInfoLoader: class SnapdSnapInfoLoader:
def __init__(self, model, snapd, store_section): def __init__(self, model, snapd, store_section, context):
self.model = model self.model = model
self.store_section = store_section self.store_section = store_section
self.context = context
self.main_task = None self.main_task = None
self.snap_list_fetched = False self.snap_list_fetched = False
@ -50,6 +51,7 @@ class SnapdSnapInfoLoader:
self.main_task = schedule_task(self._start()) self.main_task = schedule_task(self._start())
async def _start(self): async def _start(self):
with self.context:
task = self.tasks[None] = schedule_task(self._load_list()) task = self.tasks[None] = schedule_task(self._load_list())
await task await task
self.pending_snaps = self.model.get_snap_list() self.pending_snaps = self.model.get_snap_list()
@ -61,6 +63,7 @@ class SnapdSnapInfoLoader:
await task await task
async def _load_list(self): async def _load_list(self):
with self.context.child("list"):
try: try:
result = await self.snapd.get( result = await self.snapd.get(
'v2/find', section=self.store_section) 'v2/find', section=self.store_section)
@ -76,14 +79,13 @@ class SnapdSnapInfoLoader:
self.main_task.cancel() self.main_task.cancel()
async def _fetch_info_for_snap(self, snap): async def _fetch_info_for_snap(self, snap):
log.debug('starting fetch for %s', snap.name) with self.context.child("fetch").child(snap.name):
try: try:
data = await self.snapd.get('v2/find', name=snap.name) data = await self.snapd.get('v2/find', name=snap.name)
except requests.exceptions.RequestException: except requests.exceptions.RequestException:
log.exception("loading snap info failed") log.exception("loading snap info failed")
# XXX something better here? # XXX something better here?
return return
log.debug('got data for %s', snap.name)
self.model.load_info_data(data) self.model.load_info_data(data)
def get_snap_list_task(self): def get_snap_list_task(self):
@ -106,8 +108,8 @@ class SnapListController(BaseController):
def _make_loader(self): def _make_loader(self):
return SnapdSnapInfoLoader( return SnapdSnapInfoLoader(
self.model, self.app.snapd, self.model, self.app.snapd, self.opts.snap_section,
self.opts.snap_section) self.context.child("loader"))
def __init__(self, app): def __init__(self, app):
super().__init__(app) super().__init__(app)