fix inventory output merging in parameters from other nodes
diff --git a/reclass/datatypes/parameters.py b/reclass/datatypes/parameters.py
index 97de688..8f83c11 100644
--- a/reclass/datatypes/parameters.py
+++ b/reclass/datatypes/parameters.py
@@ -183,14 +183,12 @@
self._unrendered = None
if isinstance(other, dict):
wrapped = self._wrap_dict(other)
- self._base = self._merge_recurse(self._base, wrapped, DictPath(self._delimiter))
-
elif isinstance(other, self.__class__):
- self._base = self._merge_recurse(self._base, other._base, DictPath(self._delimiter))
-
+ wrapped = self._wrap_dict(other._base)
else:
raise TypeError('Cannot merge %s objects into %s' % (type(other),
self.__class__.__name__))
+ self._base = self._merge_recurse(self._base, wrapped, DictPath(self._delimiter))
def render_simple(self, options=None):
self._unrendered = None
diff --git a/reclass/datatypes/tests/test_parameters.py b/reclass/datatypes/tests/test_parameters.py
index 1cc3804..8731d69 100644
--- a/reclass/datatypes/tests/test_parameters.py
+++ b/reclass/datatypes/tests/test_parameters.py
@@ -401,5 +401,41 @@
p1.interpolate()
self.assertEqual(p1.as_dict(), r)
+ def test_list_merging_for_multiple_nodes(self):
+ p1 = Parameters({ 'alpha': { 'one': [1, 2] }})
+ p2 = Parameters({ 'beta': {'two': '${alpha:one}' }})
+ p3 = Parameters({'beta': {'two': [3] }})
+ n1 = Parameters({ 'name': 'node1'})
+ r1 = { 'alpha': { 'one': [1, 2] }, 'beta': { 'two': [1, 2] }, 'name': 'node1' }
+ r2 = { 'alpha': { 'one': [1, 2] }, 'beta': { 'two': [1, 2, 3] }, 'name': 'node2' }
+ n1.merge(p1)
+ n1.merge(p2)
+ n1.interpolate()
+ n2 = Parameters({'name': 'node2'})
+ n2.merge(p1)
+ n2.merge(p2)
+ n2.merge(p3)
+ n2.interpolate()
+ self.assertEqual(n1.as_dict(), r1)
+ self.assertEqual(n2.as_dict(), r2)
+
+ def test_dict_merging_for_multiple_nodes(self):
+ p1 = Parameters({ 'alpha': { 'one': { 'a': 'aa', 'b': 'bb' }}})
+ p2 = Parameters({ 'beta': {'two': '${alpha:one}' }})
+ p3 = Parameters({'beta': {'two': {'c': 'cc' }}})
+ n1 = Parameters({ 'name': 'node1'})
+ r1 = { 'alpha': { 'one': {'a': 'aa', 'b': 'bb'} }, 'beta': { 'two': {'a': 'aa', 'b': 'bb'} }, 'name': 'node1' }
+ r2 = { 'alpha': { 'one': {'a': 'aa', 'b': 'bb'} }, 'beta': { 'two': {'a': 'aa', 'b': 'bb', 'c': 'cc'} }, 'name': 'node2' }
+ n1.merge(p1)
+ n1.merge(p2)
+ n1.interpolate()
+ n2 = Parameters({'name': 'node2'})
+ n2.merge(p1)
+ n2.merge(p2)
+ n2.merge(p3)
+ n2.interpolate()
+ self.assertEqual(n1.as_dict(), r1)
+ self.assertEqual(n2.as_dict(), r2)
+
if __name__ == '__main__':
unittest.main()