async load snap list & info, all very happy-path

This commit is contained in:
Michael Hudson-Doyle 2018-05-14 21:21:15 +12:00
parent 9863007e8c
commit 763cc79c8e
2 changed files with 30 additions and 3 deletions

View File

@ -27,6 +27,27 @@ class SnapListController(BaseController):
def __init__(self, common):
super().__init__(common)
self.model = self.base_model.snaplist
self.run_in_bg(
self.model._from_snapd,
self._got_find_data)
def _got_find_data(self, fut):
data = fut.result()
self.model._load_find_data(data)
snap_names = []
for snap in self.model.get_snap_list():
snap_names.append(snap.name)
self._load_next_info(snap_names)
def _load_next_info(self, snap_names):
self.run_in_bg(
lambda: self.model._from_snapd_info(snap_names[0]),
lambda fut:self._got_info(fut, snap_names[1:]))
def _got_info(self, fut, remaining):
self.model._load_info_data(fut.result())
if remaining:
self._load_next_info(remaining)
def default(self):
self.ui.set_header(

View File

@ -49,7 +49,7 @@ class SnapListModel:
def __init__(self, common):
self._snap_info = []
self._snaps_by_name = {}
self._from_snapd()
#self._from_snapd()
#self._from_sample_data()
def _from_sample_data(self):
@ -70,9 +70,15 @@ class SnapListModel:
import requests_unixsocket
session = requests_unixsocket.Session()
r = session.get(url)
self._load_find_data(r.json())
log.debug("%s", r.json())
return r.json()
def _from_snapd_info(self, name):
sock = "/run/snapd.socket"
url = "http+unix://{}/v2/find?name={}".format(quote_plus(sock), name)
import requests_unixsocket
session = requests_unixsocket.Session()
r = session.get(url)
return r.json()
def _load_find_data(self, data):
for s in data['result']: