Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar_network/node
diff options
context:
space:
mode:
Diffstat (limited to 'sugar_network/node')
-rw-r--r--sugar_network/node/model.py37
-rw-r--r--sugar_network/node/routes.py5
2 files changed, 14 insertions, 28 deletions
diff --git a/sugar_network/node/model.py b/sugar_network/node/model.py
index 7276b75..9ead01c 100644
--- a/sugar_network/node/model.py
+++ b/sugar_network/node/model.py
@@ -176,7 +176,7 @@ def solve(volume, top_context, lsb_id=None, lsb_release=None,
top_stability = stability or ['stable']
if isinstance(top_stability, basestring):
top_stability = [top_stability]
- top_cond = None
+ top_cond = []
top_requires = {}
if isinstance(requires, basestring):
top_requires.update(spec.parse_requires(requires))
@@ -196,15 +196,6 @@ def solve(volume, top_context, lsb_id=None, lsb_release=None,
_logger.debug('Solve %r lsb_id=%r lsb_release=%r stability=%r requires=%r',
top_context.guid, lsb_id, lsb_release, top_stability, top_requires)
- def ensure_version(version, cond):
- if not cond:
- return True
- for not_before, before in cond['restrictions']:
- if before is not None and version >= before or \
- not_before is not None and version < not_before:
- return False
- return True
-
def rate_release(digest, release):
return [_STABILITY_RATES.get(release['stability']) or 0,
release['version'],
@@ -217,7 +208,7 @@ def solve(volume, top_context, lsb_id=None, lsb_release=None,
for dep, cond in deps.items():
dep_clause = [-v_usage]
for v_release in add_context(dep):
- if ensure_version(varset[v_release][0], cond):
+ if spec.ensure(varset[v_release][1]['version'], cond):
dep_clause.append(v_release)
clauses.append(dep_clause)
@@ -242,7 +233,10 @@ def solve(volume, top_context, lsb_id=None, lsb_release=None,
pkg_lst = alias.get('binary', []) + alias.get('devel', [])
if pkg_lst:
clause.append(len(varset))
- varset.append((pkg_ver, 'packages', {context.guid: pkg_lst}))
+ varset.append((
+ context.guid,
+ {'version': pkg_ver, 'packages': pkg_lst},
+ ))
else:
candidates = []
for digest, release in releases.items():
@@ -251,18 +245,17 @@ def solve(volume, top_context, lsb_id=None, lsb_release=None,
release = release['value']
if release['stability'] not in top_stability or \
context.guid == top_context.guid and \
- not ensure_version(release['version'], top_cond):
+ not spec.ensure(release['version'], top_cond):
continue
bisect.insort(candidates, rate_release(digest, release))
for release in reversed(candidates):
digest = release[-1]
release = releases[digest]['value']
+ release_info = {'version': release['version'], 'blob': digest}
+ if context.guid == top_context.guid:
+ release_info['command'] = release['command']
v_release = len(varset)
- varset.append((
- release['version'],
- 'files',
- {context.guid: digest},
- ))
+ varset.append((context.guid, release_info))
clause.append(v_release)
add_deps(context, v_release, release.get('requires') or {})
@@ -283,13 +276,7 @@ def solve(volume, top_context, lsb_id=None, lsb_release=None,
if not top_context.guid in result:
_logger.debug('No top versions for %r', top_context.guid)
return None
-
- solution = {'files': {}, 'packages': {}}
- for v in result.values():
- __, key, items = varset[v]
- solution[key].update(items)
- top_release = top_context['releases'][solution['files'][top_context.guid]]
- solution['commands'] = top_release['value']['commands']
+ solution = dict([varset[i] for i in result.values()])
_logger.debug('Solution for %r: %r', top_context.guid, solution)
diff --git a/sugar_network/node/routes.py b/sugar_network/node/routes.py
index 66b7823..6d5d200 100644
--- a/sugar_network/node/routes.py
+++ b/sugar_network/node/routes.py
@@ -27,8 +27,7 @@ from sugar_network.node import stats_user, model
# pylint: disable-msg=W0611
from sugar_network.toolkit.router import route, preroute, postroute, ACL
from sugar_network.toolkit.router import Unauthorized, Request, fallbackroute
-from sugar_network.toolkit.spec import parse_requires, ensure_requires
-from sugar_network.toolkit.spec import parse_version
+from sugar_network.toolkit.spec import parse_requires, parse_version
from sugar_network.toolkit.bundle import Bundle
from sugar_network.toolkit.coroutine import this
from sugar_network.toolkit import pylru, http, coroutine, exception, enforce
@@ -157,7 +156,7 @@ class NodeRoutes(db.Routes, FrontRoutes):
arguments={'requires': list})
def get_clone(self, request, response):
solution = self.solve(request)
- return blobs.get(solution['files'][request.guid])
+ return blobs.get(solution[request.guid]['blob'])
@route('GET', ['user', None], cmd='stats-info',
mime_type='application/json', acl=ACL.AUTH)