diff options
Diffstat (limited to 'app/toscalib/templates/capability_item.py')
-rw-r--r-- | app/toscalib/templates/capability_item.py | 73 |
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) |