add tests for invquery ignore errors option
diff --git a/reclass/core.py b/reclass/core.py
index 1d0a636..b0f0e7b 100644
--- a/reclass/core.py
+++ b/reclass/core.py
@@ -178,7 +178,7 @@
ret.initialise_interpolation()
if ret.parameters.has_inv_query() and inventory is None:
inventory = self._get_inventory(ret.parameters.needs_all_envs(), ret.environment, ret.parameters.get_inv_queries())
- ret.interpolate(nodename, inventory)
+ ret.interpolate(inventory)
return ret
except InterpolationError as e:
e.nodename = nodename
diff --git a/reclass/datatypes/entity.py b/reclass/datatypes/entity.py
index e88e2fa..cd08edd 100644
--- a/reclass/datatypes/entity.py
+++ b/reclass/datatypes/entity.py
@@ -84,7 +84,7 @@
def merge_parameters(self, params):
self._parameters.merge(params)
- def interpolate(self, nodename, inventory):
+ def interpolate(self, inventory):
self._parameters.interpolate(inventory)
self.interpolate_exports()
diff --git a/reclass/datatypes/tests/test_entity.py b/reclass/datatypes/tests/test_entity.py
index 743cf0a..fde8067 100644
--- a/reclass/datatypes/tests/test_entity.py
+++ b/reclass/datatypes/tests/test_entity.py
@@ -9,6 +9,7 @@
from reclass.settings import Settings
from reclass.datatypes import Entity, Classes, Parameters, Applications, Exports
+from reclass.errors import ResolveError
import unittest
try:
import unittest.mock as mock
@@ -180,7 +181,7 @@
node3_entity = Entity(SETTINGS, classes=None, applications=None, parameters=node3_parameters, exports=node3_exports)
node3_entity.interpolate_exports()
inventory['node3'] = node3_entity.exports.as_dict()
- node3_entity.interpolate('node3', inventory)
+ node3_entity.interpolate(inventory)
res_inv = {'node1': {'a': 1, 'b': 2}, 'node2': {'a': 3, 'b': 4}, 'node3': {'a': 3, 'b': 5}}
res_params = {'a': 3, 'c': 3, 'b': 5, 'name': 'node3', 'exp': {'node1': 1, 'node3': 3, 'node2': 3}, 'ref': {'node1': 1, 'node3': 3, 'node2': 3}}
self.assertDictEqual(node3_parameters.as_dict(), res_params)
@@ -195,9 +196,46 @@
res_inv = {'node1': {'alpha': {'a': 1, 'b': 2}}, 'node2': {'alpha': {'a': 3, 'b': 4}}, 'node3': {'alpha': {'a': '111', 'b': '123'}}}
node3_entity.interpolate_exports()
inventory['node3'] = node3_entity.exports.as_dict()
- node3_entity.interpolate('node3', inventory)
+ node3_entity.interpolate(inventory)
self.assertDictEqual(node3_parameters.as_dict(), res_params)
self.assertDictEqual(inventory, res_inv)
+ def test_exports_failed_render(self):
+ node1_exports = Exports({'a': '${a}'}, SETTINGS, '')
+ node1_parameters = Parameters({'name': 'node1', 'a': 1, 'exp': '$[ exports:a ]'}, SETTINGS, '')
+ node1_entity = Entity(SETTINGS, classes=None, applications=None, parameters=node1_parameters, exports=node1_exports)
+ node2_exports = Exports({'a': '${b}'}, SETTINGS, '')
+ node2_parameters = Parameters({'name': 'node2', 'a': 2}, SETTINGS, '')
+ node2_entity = Entity(SETTINGS, classes=None, applications=None, parameters=node2_parameters, exports=node2_exports)
+ node1_entity.initialise_interpolation()
+ node2_entity.initialise_interpolation()
+ queries = node1_entity.parameters.get_inv_queries()
+ with self.assertRaises(ResolveError):
+ for p, q in queries:
+ node1_entity.interpolate_single_export(q)
+ node2_entity.interpolate_single_export(q)
+
+ def test_exports_failed_render_ignore(self):
+ node1_exports = Exports({'a': '${a}'}, SETTINGS, '')
+ node1_parameters = Parameters({'name': 'node1', 'a': 1, 'exp': '$[ +IgnoreErrors exports:a ]'}, SETTINGS, '')
+ node1_entity = Entity(SETTINGS, classes=None, applications=None, parameters=node1_parameters, exports=node1_exports)
+ node2_exports = Exports({'a': '${b}'}, SETTINGS, '')
+ node2_parameters = Parameters({'name': 'node1', 'a': 2}, SETTINGS, '')
+ node2_entity = Entity(SETTINGS, classes=None, applications=None, parameters=node2_parameters, exports=node2_exports)
+ node1_entity.initialise_interpolation()
+ node2_entity.initialise_interpolation()
+ queries = node1_entity.parameters.get_inv_queries()
+ for p, q in queries:
+ node1_entity.interpolate_single_export(q)
+ node2_entity.interpolate_single_export(q)
+ res_inv = {'node1': {'a': 1}, 'node2': {}}
+ res_params = { 'a': 1, 'name': 'node1', 'exp': {'node1': 1} }
+ inventory = {}
+ inventory['node1'] = node1_entity.exports.as_dict()
+ inventory['node2'] = node2_entity.exports.as_dict()
+ node1_entity.interpolate(inventory)
+ self.assertDictEqual(node1_parameters.as_dict(), res_params)
+ self.assertDictEqual(inventory, res_inv)
+
if __name__ == '__main__':
unittest.main()
diff --git a/reclass/datatypes/tests/test_parameters.py b/reclass/datatypes/tests/test_parameters.py
index c51bd12..719c828 100644
--- a/reclass/datatypes/tests/test_parameters.py
+++ b/reclass/datatypes/tests/test_parameters.py
@@ -498,7 +498,7 @@
p1 = Parameters({'alpha': {'one': 1, 'two': 2}, 'gamma': '${alpha:${beta}}'}, SETTINGS, '')
with self.assertRaises(InterpolationError) as error:
p1.interpolate()
- self.assertEqual(error.exception.message, "-> \n Bad references: ${beta} for path: gamma")
+ self.assertEqual(error.exception.message, "-> \n Bad references, at gamma\n ${beta}")
if __name__ == '__main__':
unittest.main()