diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2014-05-02 15:22:33 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2014-05-02 15:22:33 (GMT) |
commit | a625f7b3bea0de2d2effe56e116e512c3ea405fb (patch) | |
tree | 9d117b4589ceab646f530eaf23d3c201c75f0af3 | |
parent | 06c7ebd2508f354d48be59d3842034c0d477ed20 (diff) |
Do not fail the entore solve if one of dependent contexts is absent
-rw-r--r-- | sugar_network/node/model.py | 6 | ||||
-rwxr-xr-x | tests/units/node/node_model.py | 18 |
2 files changed, 23 insertions, 1 deletions
diff --git a/sugar_network/node/model.py b/sugar_network/node/model.py index 77ee978..5d42583 100644 --- a/sugar_network/node/model.py +++ b/sugar_network/node/model.py @@ -334,7 +334,11 @@ def solve(volume, top_context, command=None, lsb_id=None, lsb_release=None, if context in context_clauses: return context_clauses[context] context = volume['context'][context] - enforce(context.available, http.NotFound, 'Context not found') + + if not context.available: + _logger.trace('No %r context', context.guid) + return [] + releases = context['releases'] clause = [] diff --git a/tests/units/node/node_model.py b/tests/units/node/node_model.py index 369b0de..a4f5c86 100755 --- a/tests/units/node/node_model.py +++ b/tests/units/node/node_model.py @@ -1910,6 +1910,24 @@ class NodeModelTest(tests.Test): }) self.assertEqual(None, model.solve(volume, context)) + def test_solve_IgnoreAbsentContexts(self): + volume = Volume('master', [Context]) + this.volume = volume + + volume['context'].create({ + 'guid': 'context', 'type': ['activity'], 'title': {}, 'summary': {}, 'description': {}, 'releases': { + '2': {'value': {'bundles': {'*-*': {}}, 'stability': 'stable', 'version': [[2], 0], 'commands': {'activity': {'exec': 0}}, + 'requires': spec.parse_requires('absent'), 'commands': {'activity': {'exec': 2}}}}, + '1': {'value': {'bundles': {'*-*': {}}, 'stability': 'stable', 'version': [[1], 0], 'commands': {'activity': {'exec': 0}}, + 'commands': {'activity': {'exec': 1}}}}, + }, + }) + + self.assertEqual({ + 'context': {'title': '', 'blob': '1', 'version': [[1], 0], 'command': ('activity', 1)}, + }, + model.solve(volume, 'context')) + def test_load_bundle_Activity(self): volume = self.start_master() blobs = volume.blobs |