Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar_network
diff options
context:
space:
mode:
Diffstat (limited to 'sugar_network')
-rw-r--r--sugar_network/model/implementation.py5
-rw-r--r--sugar_network/node/routes.py9
-rw-r--r--sugar_network/toolkit/spec.py8
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: