diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2014-05-02 16:51:37 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2014-05-02 16:51:37 (GMT) |
commit | a57e9537c034ee4566f8cf694518619588097f76 (patch) | |
tree | 987bab7ac33070beb5d4286bab32eade82ad01f3 /sugar_network | |
parent | a625f7b3bea0de2d2effe56e116e512c3ea405fb (diff) |
Return blob urls in solve API command
Diffstat (limited to 'sugar_network')
-rw-r--r-- | sugar_network/client/injector.py | 18 | ||||
-rw-r--r-- | sugar_network/node/model.py | 27 |
2 files changed, 26 insertions, 19 deletions
diff --git a/sugar_network/client/injector.py b/sugar_network/client/injector.py index fcd87ea..8b3fd8e 100644 --- a/sugar_network/client/injector.py +++ b/sugar_network/client/injector.py @@ -98,7 +98,7 @@ class Injector(object): self._progress_in(ctx) releases.extend(solution.values()) release = solution[ctx] - return release, self._pool.path(release['blob']) + return release, self._pool.path(release['blob'].split('/')[-1]) try: yield {'event': 'launch', 'state': 'solve'} @@ -258,8 +258,10 @@ class Injector(object): size = 0 for release in solution: - digest = release.get('blob') - if not digest or exists(self._pool.path(digest)): + if 'blob' not in release: + continue + digest = release.get('blob').split('/')[-1] + if exists(self._pool.path(digest)): continue enforce(self._api is not None, 'Cannot download in offline') download_size = max(download_size, release['size']) @@ -338,9 +340,9 @@ class _PreemptivePool(object): if self._lru is None: self._init() for release in solution: - digest = release.get('blob') - if not digest: + if 'blob' not in release: continue + digest = release.get('blob').split('/')[-1] path = join(self._root, digest) if not exists(path): continue @@ -354,8 +356,10 @@ class _PreemptivePool(object): self._init() found = False for release in solution: - digest = release.get('blob') - if digest and digest in self._lru: + if 'blob' not in release: + continue + digest = release.get('blob').split('/')[-1] + if digest in self._lru: self._pop(digest, False) found = True return found diff --git a/sugar_network/node/model.py b/sugar_network/node/model.py index 5d42583..87abed6 100644 --- a/sugar_network/node/model.py +++ b/sugar_network/node/model.py @@ -315,11 +315,11 @@ def solve(volume, top_context, command=None, lsb_id=None, lsb_release=None, top_context.guid, lsb_id, lsb_release, stability, top_requires, assume) - def rate_release(digest, release): + def rate_release(key, release): return [command in release.get('commands', []), _STABILITY_RATES.get(release['stability']) or 0, release['version'], - digest, + key, ] def add_deps(v_usage, deps): @@ -361,7 +361,7 @@ def solve(volume, top_context, command=None, lsb_id=None, lsb_release=None, varset.append((context.guid, pkg_info)) else: candidates = [] - for digest, release in releases.items(): + for key, release in releases.items(): if 'value' not in release: continue release = release['value'] @@ -369,21 +369,24 @@ def solve(volume, top_context, command=None, lsb_id=None, lsb_release=None, context.guid == top_context.guid and \ not ensure_version(release['version'], top_cond): continue - bisect.insort(candidates, rate_release(digest, release)) + bisect.insort(candidates, rate_release(key, release)) for release in reversed(candidates): - digest = release[-1] - release = releases[digest]['value'] + release = releases[release[-1]]['value'] + # TODO Assume we have only noarch bundles + bundle = release['bundles']['*-*'] + blob = volume.blobs.get(bundle['blob']) + if blob is None: + _logger.debug('Absent blob for %r release', release) + continue release_info = { 'title': i18n.decode(context['title'], this.request.accept_language), 'version': release['version'], - 'blob': digest, + 'blob': blob, + 'size': blob.size, + 'content-type': blob.meta['content-type'], } - blob = volume.blobs.get(digest) - if blob is not None: - release_info['size'] = blob.size - release_info['content-type'] = blob.meta['content-type'] - unpack_size = release['bundles']['*-*'].get('unpack_size') + unpack_size = bundle.get('unpack_size') if unpack_size is not None: release_info['unpack_size'] = unpack_size requires = release.get('requires') or {} |