Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar_network
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2014-05-02 16:51:37 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2014-05-02 16:51:37 (GMT)
commita57e9537c034ee4566f8cf694518619588097f76 (patch)
tree987bab7ac33070beb5d4286bab32eade82ad01f3 /sugar_network
parenta625f7b3bea0de2d2effe56e116e512c3ea405fb (diff)
Return blob urls in solve API command
Diffstat (limited to 'sugar_network')
-rw-r--r--sugar_network/client/injector.py18
-rw-r--r--sugar_network/node/model.py27
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 {}