Restructure reclass into a Python module
By moving all code into ./reclass/, reclass can now be used as a Python
module. The Ansible adapter and the CLI have been updated accordingly.
Signed-off-by: martin f. krafft <madduck@madduck.net>
diff --git a/reclass/storage/yaml_fs/yamlfile.py b/reclass/storage/yaml_fs/yamlfile.py
new file mode 100644
index 0000000..14bee86
--- /dev/null
+++ b/reclass/storage/yaml_fs/yamlfile.py
@@ -0,0 +1,51 @@
+#
+# -*- coding: utf-8 -*-
+#
+# This file is part of reclass (http://github.com/madduck/reclass)
+#
+# Copyright © 2007–13 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+from reclass import datatypes
+import yaml
+import os
+
+class YamlFile(object):
+
+ def __init__(self, path):
+ ''' Initialise a yamlfile object '''
+ self._path = path
+ self._data = dict()
+ self._read()
+ path = property(lambda self: self._path)
+
+ def _read(self):
+ fp = file(self._path)
+ data = yaml.safe_load(fp)
+ if data is not None:
+ self._data = data
+ fp.close()
+
+ def _get_entity(self):
+ 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,
+ name=os.path.basename(self._path))
+ entity = property(lambda self: self._get_entity())
+
+ def __repr__(self):
+ return '<{0} {1}, {2}>'.format(self.__class__.__name__, self._path,
+ self._data.keys())