summaryrefslogtreecommitdiffstats
path: root/app/toscalib/templates/interface_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/toscalib/templates/interface_item.py')
-rw-r--r--app/toscalib/templates/interface_item.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/app/toscalib/templates/interface_item.py b/app/toscalib/templates/interface_item.py
new file mode 100644
index 0000000..9fd7fa9
--- /dev/null
+++ b/app/toscalib/templates/interface_item.py
@@ -0,0 +1,80 @@
+from toscalib.templates.property_item import PropertyItem
+from toscalib.templates.operation_item import OperationItem
+from toscalib.types.property import PropertyDefinition
+from toscalib.templates.constant import *
+import logging
+
+class InterfaceItem(object):
+ def __init__(self, definition, name = None, content = None):
+ if definition is not None:
+ self.name = definition.name
+ self.type = definition.type
+ self.definition = definition
+ self.inputs = {}
+ self.operations = {}
+ self.parent_node = None
+ for prop in definition.inputs.keys():
+ self.inputs[prop] = PropertyItem(definition.inputs[prop])
+ for oper in definition.operations.keys():
+ self.operations[oper] = OperationItem(definition.operations[oper])
+ else:
+ self.name = name
+ self.type = None
+ self.definition = None
+ self.inputs = {}
+ self.operations = {}
+ self.parent_node = None
+
+ self._parse_pre_defined_content(content)
+
+ def _parse_pre_defined_content(self, content):
+ if content is None:
+ return
+
+ for key_name in content.keys():
+ if key_name == 'type':
+ if self.type is not None and self.type != content[key_name]:
+ logging.warning( 'interface: '+ self.name+ 'type is different in definition: '+ self.type+ ' overwritten here to '+ self.raw_content[key_name])
+ self.type = content[key_name]
+ continue
+ if key_name == 'inputs':
+ input_sec = content['inputs']
+ for input_item in input_sec.keys():
+ self.inputs[input_item] = PropertyItem(PropertyDefinition(input_item))
+ self.inputs[input_item]._assign(input_sec[input_item])
+ continue
+
+# if self.operations.has_key(key_name):
+ if key_name in self.operations:
+ self.operations[key_name]._parse_pre_defined_content(content[key_name])
+ else:
+ self.operations[key_name] = OperationItem(None, key_name, content[key_name])
+
+ def _update_parent_node(self, parent):
+ self.parent_node = parent
+ for prop in iter(self.inputs.values()):
+ prop._update_parent_node(parent)
+ for ops in iter(self.operations.values()):
+ ops._update_parent_node(parent)
+
+ def _prepare_output(self, tags=''):
+ output = {}
+ if 'cloudify' not in tags:
+ if self.type is not None:
+ output[YMO_INT_TYPE] = self.type
+ if len(self.inputs) > 0:
+ inputs = {}
+ for prop_name in self.inputs.keys():
+ prop_item = self.inputs[prop_name]
+ if prop_item.value is None:
+ prop_value = None
+ else:
+ prop_value = prop_item.value._get_value(tags)[0]
+ inputs[prop_name] = prop_value
+ output[YMO_INT_INPUTS] = inputs
+ if len(self.operations) > 0:
+ for op_name in self.operations.keys():
+ output[op_name] = self.operations[op_name]._prepare_output(tags)
+
+ return output
+ \ No newline at end of file