Import of working code base
Signed-off-by: martin f. krafft <madduck@madduck.net>
diff --git a/storage/__init__.py b/storage/__init__.py
new file mode 100644
index 0000000..0613bfe
--- /dev/null
+++ b/storage/__init__.py
@@ -0,0 +1,52 @@
+#
+# -*- 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
+#
+class NodeStorageBase(object):
+
+ def __init__(self, nodes_uri, classes_uri):
+ self._nodes_uri = nodes_uri
+ self._classes_uri = classes_uri
+
+ nodes_uri = property(lambda self: self._nodes_uri)
+ classes_uri = property(lambda self: self._classes_uri)
+
+ def _read_entity(self, node, base_uri, seen={}):
+ raise NotImplementedError, "Storage class not implement node info retrieval"
+
+ def nodeinfo(self, node):
+ entity, uri = self._read_nodeinfo(node, self.nodes_uri, {})
+ return {'RECLASS' : {'node': node, 'node_uri': uri},
+ 'classes': list(entity.classes),
+ 'applications': list(entity.applications),
+ 'parameters': dict(entity.parameters)
+ }
+
+ def _list_inventory(self):
+ raise NotImplementedError, "Storage class does not implement inventory listing"
+
+ def inventory(self):
+ entity, applications, classes = self._list_inventory()
+ ret = classes
+ ret.update([(k + '_hosts',v) for k,v in applications.iteritems()])
+ return ret
+
+class StorageBackendLoader(object):
+
+ def __init__(self, storage_type):
+ self._name = storage_type
+ try:
+ self._module = __import__(storage_type, globals(), locals(), storage_type)
+ except ImportError:
+ raise NotImplementedError
+
+ def load(self, attr='ExternalNodeStorage'):
+ klass = getattr(self._module, attr, None)
+ if klass is None:
+ raise AttributeError, \
+ 'Storage backend class {0} does not export "{1}"'.format(self._name, klass)
+ return klass