summaryrefslogtreecommitdiffstats
path: root/app/toscalib/templates/capability_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/toscalib/templates/capability_item.py')
-rw-r--r--app/toscalib/templates/capability_item.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/app/toscalib/templates/capability_item.py b/app/toscalib/templates/capability_item.py
new file mode 100644
index 0000000..e96ee43
--- /dev/null
+++ b/app/toscalib/templates/capability_item.py
@@ -0,0 +1,73 @@
+from toscalib.templates.constant import *
+from toscalib.templates.property_item import PropertyItem
+import logging
+
+class CapabilityItem(object):
+ def __init__(self, definition):
+ self.name = definition.name
+ self.type = definition.type
+ self.definition = definition
+ self.properties = {}
+ self.id = PropertyItem(definition.id)
+ self.sub_pointer = None
+ self.parent_node = None
+ for prop in definition.properties.keys():
+ self.properties[prop] = PropertyItem(definition.properties[prop])
+
+ def _parse_pre_defined_content(self, content):
+ if content is None:
+ return
+# if content.has_key(CAP_PROPERTIES):
+ if CAP_PROPERTIES in content:
+ prop_sec = content[CAP_PROPERTIES]
+ for prop_name in prop_sec.keys():
+ prop_item = self._get_property_item(prop_name)
+ if prop_item is not None:
+ prop_item._assign(prop_sec[prop_name])
+
+ def _propagate_substitution_value(self):
+ converge = True
+ for prop_item in iter(self.properties.values()):
+ converge = converge and prop_item._propagate_substitution_value()
+
+ if self.sub_pointer is None:
+ return converge
+
+ if self.id.value is None:
+ old_val = None
+ else:
+ old_val = self.id.value._get_value()[0]
+
+ if isinstance(self.sub_pointer, PropertyItem):
+ if self.sub_pointer.value is None:
+ logging.warning( 'Something is wrong, the cap id mapping target'+ self.sub_pointer.name+ ' should have a value!')
+ return converge
+ self.id._direct_assign(self.sub_pointer.value)
+ from toscalib.templates.node import Node
+ if isinstance(self.sub_pointer, Node):
+ if self.sub_pointer.id is None or self.sub_pointer.id.value is None:
+ logging.warning( 'Something is wrong, the cap id mapping target'+ self.sub_pointer.name+ ' should have a value!')
+ return converge
+ self.id._direct_assign(self.sub_pointer.id.value)
+
+ if self.id.value is None:
+ new_val = None
+ else:
+ new_val = self.id.value._get_value()[0]
+ return converge and (old_val == new_val)
+
+ def _get_property_item(self, prop_name):
+# if self.properties.has_key(prop_name):
+ if prop_name in self.properties:
+ return self.properties[prop_name]
+ else:
+ logging.warning('Capability: '+ self.name+ ' of type: '+ self.type+ ' has no property: '+ prop_name)
+ return None
+
+ def _validate_capability(self, cap_name):
+ return self.definition._validate_capability(cap_name)
+
+ def _update_parent_node(self, parent):
+ self.parent_node = parent
+ for prop in iter(self.properties.values()):
+ prop._update_parent_node(parent)