Allow to use '..' as a reference to higher level in class structure
diff --git a/reclass/storage/yamldata.py b/reclass/storage/yamldata.py
index 034832d..c549089 100644
--- a/reclass/storage/yamldata.py
+++ b/reclass/storage/yamldata.py
@@ -54,12 +54,23 @@
return self._data
def set_absolute_names(self, name, names):
- parent = '.'.join(name.split('.')[0:-1])
+ structure = name.split('.')
+ parent = '.'.join(structure[0:-1])
new_names = []
for n in names:
if n[0] == '.':
- if parent == '':
+ if len(n) > 1 and n[1] == '.':
+ grandparent = '.'.join(structure[0:-2])
+ if len(n) == 2:
+ n = grandparent
+ elif parent == '' or grandparent == '':
+ n = n[2:]
+ else:
+ n = grandparent + n[1:]
+ elif parent == '':
n = n[1:]
+ elif len(n) == 1:
+ n = parent
else:
n = parent + n
new_names.append(n)
diff --git a/reclass/tests/data/02/classes/one/alpha.yml b/reclass/tests/data/02/classes/one/alpha.yml
index a13cc5c..9eb13f4 100644
--- a/reclass/tests/data/02/classes/one/alpha.yml
+++ b/reclass/tests/data/02/classes/one/alpha.yml
@@ -1,7 +1,11 @@
classes:
- .beta
- two.beta
+- ..three
+- ..two.delta
parameters:
test1: ${one_beta}
test2: ${two_beta}
+ test3: ${three_alpha}
+ test4: ${two_gamma}
diff --git a/reclass/tests/data/02/classes/three.yml b/reclass/tests/data/02/classes/three.yml
index 987fde0..940603c 100644
--- a/reclass/tests/data/02/classes/three.yml
+++ b/reclass/tests/data/02/classes/three.yml
@@ -1,2 +1,5 @@
classes:
- .one.alpha
+
+parameters:
+ three_alpha: 3
diff --git a/reclass/tests/data/02/classes/two/gamma.yml b/reclass/tests/data/02/classes/two/gamma.yml
new file mode 100644
index 0000000..a1d71da
--- /dev/null
+++ b/reclass/tests/data/02/classes/two/gamma.yml
@@ -0,0 +1,2 @@
+parameters:
+ two_gamma: 4
diff --git a/reclass/tests/test_core.py b/reclass/tests/test_core.py
index ced18e8..94f7ae8 100644
--- a/reclass/tests/test_core.py
+++ b/reclass/tests/test_core.py
@@ -68,7 +68,7 @@
def test_top_relative_class_names(self):
reclass = self._core('02')
node = reclass.nodeinfo('top_relative')
- params = { 'test1': 1, 'test2': 2, 'one_beta': 1, 'two_beta': 2, '_reclass_': { 'environment': 'base', 'name': { 'full': 'top_relative', 'short': 'top_relative' } } }
+ params = { 'test1': 1, 'test2': 2, 'test3': 3, 'test4': 4, 'one_beta': 1, 'two_beta': 2, 'three_aplha': 3, 'two_gamma': 4, '_reclass_': { 'environment': 'base', 'name': { 'full': 'top_relative', 'short': 'top_relative' } } }
self.assertEqual(node['parameters'], params)
def test_compose_node_names(self):