use context stuff for the snaplist snapd requests
This commit is contained in:
parent
dacd77f2be
commit
8fe1bffea1
|
@ -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,41 +51,42 @@ class SnapdSnapInfoLoader:
|
||||||
self.main_task = schedule_task(self._start())
|
self.main_task = schedule_task(self._start())
|
||||||
|
|
||||||
async def _start(self):
|
async def _start(self):
|
||||||
task = self.tasks[None] = schedule_task(self._load_list())
|
with self.context:
|
||||||
await task
|
task = self.tasks[None] = schedule_task(self._load_list())
|
||||||
self.pending_snaps = self.model.get_snap_list()
|
|
||||||
log.debug("fetched list of %s snaps", len(self.pending_snaps))
|
|
||||||
while self.pending_snaps:
|
|
||||||
snap = self.pending_snaps.pop(0)
|
|
||||||
task = self.tasks[snap] = schedule_task(
|
|
||||||
self._fetch_info_for_snap(snap))
|
|
||||||
await task
|
await task
|
||||||
|
self.pending_snaps = self.model.get_snap_list()
|
||||||
|
log.debug("fetched list of %s snaps", len(self.pending_snaps))
|
||||||
|
while self.pending_snaps:
|
||||||
|
snap = self.pending_snaps.pop(0)
|
||||||
|
task = self.tasks[snap] = schedule_task(
|
||||||
|
self._fetch_info_for_snap(snap))
|
||||||
|
await task
|
||||||
|
|
||||||
async def _load_list(self):
|
async def _load_list(self):
|
||||||
try:
|
with self.context.child("list"):
|
||||||
result = await self.snapd.get(
|
try:
|
||||||
'v2/find', section=self.store_section)
|
result = await self.snapd.get(
|
||||||
except requests.exceptions.RequestException:
|
'v2/find', section=self.store_section)
|
||||||
log.exception("loading list of snaps failed")
|
except requests.exceptions.RequestException:
|
||||||
self.failed = True
|
log.exception("loading list of snaps failed")
|
||||||
return
|
self.failed = True
|
||||||
self.model.load_find_data(result)
|
return
|
||||||
self.snap_list_fetched = True
|
self.model.load_find_data(result)
|
||||||
|
self.snap_list_fetched = True
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
if self.main_task is not None:
|
if self.main_task is not None:
|
||||||
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):
|
||||||
return self.tasks[None]
|
return self.tasks[None]
|
||||||
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue