diff options
Diffstat (limited to 'sugar_network')
-rw-r--r-- | sugar_network/model/implementation.py | 5 | ||||
-rw-r--r-- | sugar_network/node/routes.py | 9 | ||||
-rw-r--r-- | sugar_network/toolkit/spec.py | 8 |
3 files changed, 19 insertions, 3 deletions
diff --git a/sugar_network/model/implementation.py b/sugar_network/model/implementation.py index afeda82..53473e3 100644 --- a/sugar_network/model/implementation.py +++ b/sugar_network/model/implementation.py @@ -56,6 +56,11 @@ class Implementation(db.Resource): def notes(self, value): return value + @db.indexed_property(prefix='R', typecast=[], default=[], + acl=ACL.CREATE | ACL.READ) + def requires(self, value): + return value + @db.blob_property() def data(self, value): return value diff --git a/sugar_network/node/routes.py b/sugar_network/node/routes.py index 7393684..337d744 100644 --- a/sugar_network/node/routes.py +++ b/sugar_network/node/routes.py @@ -523,6 +523,15 @@ def load_bundle(volume, request, bundle_path): impl['stability'] = spec['stability'] if spec['license'] is not EMPTY_LICENSE: impl['license'] = spec['license'] + requires = impl['requires'] = [] + for dep_name, dep in spec.requires.items(): + found = False + for version in dep.versions_range(): + requires.append('%s-%s' % (dep_name, version)) + found = True + if not found: + requires.append(dep_name) + data['spec'] = {'*-*': { 'commands': spec.commands, 'requires': spec.requires, diff --git a/sugar_network/toolkit/spec.py b/sugar_network/toolkit/spec.py index 6de2b36..78c6007 100644 --- a/sugar_network/toolkit/spec.py +++ b/sugar_network/toolkit/spec.py @@ -191,9 +191,9 @@ def parse_requires(requires): if parts[0] == '<': before = format_version(parts[1]) elif parts[0] == '<=': - before = format_next_version(parts[1]) + before = format_next_version(parts[1], False) elif parts[0] == '>': - not_before = format_next_version(parts[1]) + not_before = format_next_version(parts[1], False) elif parts[0] == '>=': not_before = format_version(parts[1]) elif parts[0] == '=': @@ -489,10 +489,12 @@ class _Dependency(dict): def versions_range(self): for not_before, before in self.get('restrictions') or []: - if not_before is None or before is None: + if not_before is None: continue i = parse_version(not_before)[0] yield format_version([i, 0]) + if before is None: + continue end = parse_version(before)[0] i = i[:min(len(i), len(end))] while True: |