Handle empty top-level parameters
If classes/applications/parameters are undefined, that's not an error.
Just make them empty collections.
Signed-off-by: martin f. krafft <madduck@madduck.net>
diff --git a/storage/yaml_fs/tests/nodes/null.yml b/storage/yaml_fs/tests/nodes/null.yml
new file mode 100644
index 0000000..eae0e02
--- /dev/null
+++ b/storage/yaml_fs/tests/nodes/null.yml
@@ -0,0 +1,3 @@
+classes:
+applications: # null-value must be handled
+parameters:
diff --git a/storage/yaml_fs/tests/test_yamlfile.py b/storage/yaml_fs/tests/test_yamlfile.py
index ff074c7..1700f30 100644
--- a/storage/yaml_fs/tests/test_yamlfile.py
+++ b/storage/yaml_fs/tests/test_yamlfile.py
@@ -12,6 +12,7 @@
TESTFILE = os.path.join(sys.path[0], 'nodes', 'blue.yml')
EMPTYFILE = os.path.join(sys.path[0], 'nodes', 'empty.yml')
+NULLFILE = os.path.join(sys.path[0], 'nodes', 'null.yml')
class TestYamlFile:
@@ -45,3 +46,13 @@
assert len(e.parameters) == 0
assert isinstance(e.applications, Applications)
assert len(e.applications) == 0
+
+ def test_null_file(self):
+ e = yamlfile.YamlFile(NULLFILE).entity
+ assert isinstance(e, Entity)
+ assert isinstance(e.classes, Classes)
+ assert len(e.classes) == 0
+ assert isinstance(e.parameters, Parameters)
+ assert len(e.parameters) == 0
+ assert isinstance(e.applications, Applications)
+ assert len(e.applications) == 0
diff --git a/storage/yaml_fs/yamlfile.py b/storage/yaml_fs/yamlfile.py
index ee69b0a..2a8b21a 100644
--- a/storage/yaml_fs/yamlfile.py
+++ b/storage/yaml_fs/yamlfile.py
@@ -26,9 +26,21 @@
fp.close()
def _get_entity(self):
- classes = datatypes.Classes(self._data.get('classes', []))
- applications = datatypes.Applications(self._data.get('applications', []))
- parameters = datatypes.Parameters(self._data.get('parameters', {}))
+ classes = self._data.get('classes')
+ if classes is None:
+ classes = []
+ classes = datatypes.Classes(classes)
+
+ applications = self._data.get('applications')
+ if applications is None:
+ applications = []
+ applications = datatypes.Applications(applications)
+
+ parameters = self._data.get('parameters')
+ if parameters is None:
+ parameters = {}
+ parameters = datatypes.Parameters(parameters)
+
return datatypes.Entity(classes, applications, parameters)
entity = property(lambda self: self._get_entity())