6 from toscaparser.functions import GetInput
7 from toscaparser.tosca_template import ToscaTemplate
9 from lcm.pub.utils.toscaparser.dataentityext import DataEntityExt
12 class BaseInfoModel(object):
14 def buildToscaTemplate(self, path, params):
17 file_name = self._check_download_file(path)
18 valid_params = self._validate_input_params(file_name, params)
19 return self._create_tosca_template(file_name, valid_params)
21 if file_name != None and file_name != path and os.path.exists(file_name):
27 def _validate_input_params(self, path, params):
29 if params and len(params) > 0:
30 tmp = self._create_tosca_template(path, None)
31 for key,value in params.items():
32 if hasattr(tmp, 'inputs') and len(tmp.inputs) > 0:
33 for input_def in tmp.inputs:
34 if (input_def.name == key):
35 valid_params[key] = DataEntityExt.validate_datatype(input_def.type, value)
39 def _create_tosca_template(self, file_name, valid_params):
42 tosca_tpl = ToscaTemplate(file_name, valid_params)
43 print "-----------------------------"
44 print '\n'.join(['%s:%s' % item for item in tosca_tpl.__dict__.items()])
45 print "-----------------------------"
48 if tosca_tpl != None and hasattr(tosca_tpl, "temp_dir") and os.path.exists(tosca_tpl.temp_dir):
50 shutil.rmtree(tosca_tpl.temp_dir)
54 def _check_download_file(self, path):
55 if (path.startswith("ftp") or path.startswith("sftp")):
56 return self.downloadFileFromFtpServer(path)
57 elif (path.startswith("http")):
58 return self.download_file_from_httpserver(path)
61 def download_file_from_httpserver(self, path):
62 path = path.encode("utf-8")
63 tmps = str.split(path, '/')
64 localFileName = tmps[len(tmps) - 1]
65 urllib.urlretrieve(path, localFileName)
68 def downloadFileFromFtpServer(self, path):
69 path = path.encode("utf-8")
70 tmp = str.split(path, '://')
72 tmp = str.split(tmp[1], ':')
75 tmp = str.split(tmp[1], '@')
77 index = tmp[1].index('/')
78 hostIp = tmp[1][0:index]
79 remoteFileName = tmp[1][index:len(tmp[1])]
80 if protocol.lower() == 'ftp':
87 userPwd = str.split(tmp[1], '@')[0]
88 hostIp = str.split(tmp[1], '@')[1]
89 index = tmp[2].index('/')
90 hostPort = tmp[2][0:index]
91 remoteFileName = tmp[2][index:len(tmp[2])]
93 localFileName = str.split(remoteFileName, '/')
94 localFileName = localFileName[len(localFileName) - 1]
96 if protocol.lower() == 'sftp':
97 self.sftp_get(userName, userPwd, hostIp, hostPort, remoteFileName, localFileName)
99 self.ftp_get(userName, userPwd, hostIp, hostPort, remoteFileName, localFileName)
102 def buidMetadata(self, tosca):
103 if 'metadata' in tosca.tpl:
104 self.metadata = copy.deepcopy(tosca.tpl['metadata'])
106 def buildProperties(self, nodeTemplate, parsed_params):
108 isMappingParams = parsed_params and len(parsed_params) > 0
109 for k, item in nodeTemplate.get_properties().items():
110 properties[k] = item.value
111 if isinstance(item.value, GetInput):
112 if item.value.result() and isMappingParams:
113 properties[k] = DataEntityExt.validate_datatype(item.type, item.value.result())
116 tmp[item.value.name] = item.value.input_name
118 if 'attributes' in nodeTemplate.entity_tpl:
119 for k, item in nodeTemplate.entity_tpl['attributes'].items():
120 properties[k] = str(item)
123 def buildProperties(self, nodeTemplate, parsed_params):
125 isMappingParams = parsed_params and len(parsed_params) > 0
126 for k, item in nodeTemplate.get_properties().items():
127 properties[k] = item.value
128 if isinstance(item.value, GetInput):
129 if item.value.result() and isMappingParams:
130 properties[k] = DataEntityExt.validate_datatype(item.type, item.value.result())
133 tmp[item.value.name] = item.value.input_name
135 if 'attributes' in nodeTemplate.entity_tpl:
136 for k, item in nodeTemplate.entity_tpl['attributes'].items():
137 properties[k] = str(item)
141 def verify_properties(self, props, inputs, parsed_params):
143 if (props and len(props) > 0):
144 for key, value in props.items():
145 ret_props[key] = self._verify_value(value, inputs, parsed_params)
146 # if isinstance(value, str):
147 # ret_props[key] = self._verify_string(inputs, parsed_params, value);
149 # if isinstance(value, list):
150 # ret_props[key] = map(lambda x: self._verify_dict(inputs, parsed_params, x), value)
152 # if isinstance(value, dict):
153 # ret_props[key] = self._verify_map(inputs, parsed_params, value)
155 # ret_props[key] = value