Add buildnode function of parser 81/8081/1
authorying.yunlong <ying.yunlong@zte.com.cn>
Sat, 19 Aug 2017 06:09:27 +0000 (14:09 +0800)
committerying.yunlong <ying.yunlong@zte.com.cn>
Sat, 19 Aug 2017 06:09:27 +0000 (14:09 +0800)
Change-Id: I8e473904cf206b007c607383679f1ec2b88720d8
Issue-ID: VFC-113
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
lcm/pub/utils/toscaparser/basemodel.py
lcm/pub/utils/toscaparser/nsdmodel.py

index 19bde0d..ae29194 100644 (file)
@@ -3,6 +3,7 @@ import os
 import shutil
 import urllib
 
+from toscaparser.functions import GetInput
 from toscaparser.tosca_template import ToscaTemplate
 
 from lcm.pub.utils.toscaparser.dataentityext import DataEntityExt
@@ -100,4 +101,56 @@ class BaseInfoModel(object):
 
     def buidMetadata(self, tosca):
         if 'metadata' in tosca.tpl:
-            self.metadata = copy.deepcopy(tosca.tpl['metadata'])
\ No newline at end of file
+            self.metadata = copy.deepcopy(tosca.tpl['metadata'])
+
+        def buildProperties(self, nodeTemplate, parsed_params):
+            properties = {}
+            isMappingParams = parsed_params and len(parsed_params) > 0
+            for k, item in nodeTemplate.get_properties().items():
+                properties[k] = item.value
+                if isinstance(item.value, GetInput):
+                    if item.value.result() and isMappingParams:
+                        properties[k] = DataEntityExt.validate_datatype(item.type, item.value.result())
+                    else:
+                        tmp = {}
+                        tmp[item.value.name] = item.value.input_name
+                        properties[k] = tmp
+            if 'attributes' in nodeTemplate.entity_tpl:
+                for k, item in nodeTemplate.entity_tpl['attributes'].items():
+                    properties[k] = str(item)
+            return properties
+
+    def buildProperties(self, nodeTemplate, parsed_params):
+        properties = {}
+        isMappingParams = parsed_params and len(parsed_params) > 0
+        for k, item in nodeTemplate.get_properties().items():
+            properties[k] = item.value
+            if isinstance(item.value, GetInput):
+                if item.value.result() and isMappingParams:
+                    properties[k] = DataEntityExt.validate_datatype(item.type, item.value.result())
+                else:
+                    tmp = {}
+                    tmp[item.value.name] = item.value.input_name
+                    properties[k] = tmp
+        if 'attributes' in nodeTemplate.entity_tpl:
+            for k, item in nodeTemplate.entity_tpl['attributes'].items():
+                properties[k] = str(item)
+        return properties
+
+
+    def verify_properties(self, props, inputs, parsed_params):
+        ret_props = {}
+        if (props and len(props) > 0):
+            for key, value in props.items():
+                ret_props[key] = self._verify_value(value, inputs, parsed_params)
+                #                 if isinstance(value, str):
+                #                     ret_props[key] = self._verify_string(inputs, parsed_params, value);
+                #                     continue
+                #                 if isinstance(value, list):
+                #                     ret_props[key] = map(lambda x: self._verify_dict(inputs, parsed_params, x), value)
+                #                     continue
+                #                 if isinstance(value, dict):
+                #                     ret_props[key] = self._verify_map(inputs, parsed_params, value)
+                #                     continue
+                #                 ret_props[key] = value
+        return ret_props
\ No newline at end of file
index 98b8213..1a31fac 100644 (file)
@@ -43,17 +43,17 @@ class EtsiNsdInfoModel(BaseInfoModel):
 
     def buildNode(self, nodeTemplate, inputs, parsed_params):
         ret ={}
-        ret['name'] = nodeTemplate.name
-        ret['nodeType'] = nodeTemplate.type
-        if 'description' in nodeTemplate.entity_tpl:
-            ret['description'] = nodeTemplate.entity_tpl['description']
-        else:
-            ret['description'] = ''
-        props = self.buildProperties(nodeTemplate, parsed_params)
-        ret['properties'] = self.verify_properties(props, inputs, parsed_params)
+        ret['name'] = nodeTemplate.name
+        ret['nodeType'] = nodeTemplate.type
+        if 'description' in nodeTemplate.entity_tpl:
+            ret['description'] = nodeTemplate.entity_tpl['description']
+        else:
+            ret['description'] = ''
+        props = self.buildProperties(nodeTemplate, parsed_params)
+        ret['properties'] = self.verify_properties(props, inputs, parsed_params)
         # ret['requirements'] = self.build_requirements(nodeTemplate)
         # self.buildCapabilities(nodeTemplate, inputs, ret)
         # self.buildArtifacts(nodeTemplate, inputs, ret)
         # interfaces = self.build_interfaces(nodeTemplate)
         # if interfaces: ret['interfaces'] = interfaces
-        return ret
\ No newline at end of file
+        return ret