summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorying.yunlong <ying.yunlong@zte.com.cn>2017-08-18 17:12:19 +0800
committerying.yunlong <ying.yunlong@zte.com.cn>2017-08-18 17:12:19 +0800
commite8e3fec8c31069218ddf95a288d1ff0dbfe5088d (patch)
tree61e58df2cb8c18c82cf0a44d6b3f8831adcb637e
parente40cf3a13bfefd226a9577786aaeb7403eb43a1a (diff)
Update parse nsd package logic
In vfc lcm project ,add parse nsd package logic. Change-Id: I2535e4be32c681eebfedff93d8720b145c0b8b5c Issue-ID: VFC-110 Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
-rw-r--r--lcm/pub/utils/toscaparser/baseinfomodel.py104
-rw-r--r--lcm/pub/utils/toscaparser/dataentityext.py34
-rw-r--r--lcm/pub/utils/toscaparser/etsinsdinfomodel.py7
3 files changed, 143 insertions, 2 deletions
diff --git a/lcm/pub/utils/toscaparser/baseinfomodel.py b/lcm/pub/utils/toscaparser/baseinfomodel.py
index a40383f1..0e186f60 100644
--- a/lcm/pub/utils/toscaparser/baseinfomodel.py
+++ b/lcm/pub/utils/toscaparser/baseinfomodel.py
@@ -1,3 +1,105 @@
+import os
+import urllib
+
+from toscaparser.tosca_template import ToscaTemplate
+
+from lcm.pub.utils.toscaparser.dataentityext import DataEntityExt
+
+
class BaseInfoModel(object):
def __init__(self, path, params):
- pass \ No newline at end of file
+ pass
+
+ def buildToscaTemplate(self, path, params):
+ file_name = None
+ try:
+ file_name = self._check_download_file(path)
+ valid_params = self._validate_input_params(file_name, params)
+ return self._create_tosca_template(file_name, valid_params)
+ finally:
+ if file_name != None and file_name != path and os.path.exists(file_name):
+ try:
+ os.remove(file_name)
+ except Exception, e:
+ pass
+
+ def _validate_input_params(self, path, params):
+ valid_params = {}
+ if params and len(params) > 0:
+ tmp = self._create_tosca_template(path, None)
+ for key,value in params.items():
+ if hasattr(tmp, 'inputs') and len(tmp.inputs) > 0:
+ for input_def in tmp.inputs:
+ if (input_def.name == key):
+ valid_params[key] = DataEntityExt.validate_datatype(input_def.type, value)
+
+ return valid_params
+
+ def _create_tosca_template(self, file_name, valid_params):
+ tosca_tpl = None
+ try:
+ tosca_tpl = ToscaTemplate(file_name, valid_params)
+ print "-----------------------------"
+ print '\n'.join(['%s:%s' % item for item in tosca_tpl.__dict__.items()])
+ print "-----------------------------"
+ return tosca_tpl
+ finally:
+ pass
+ # if tosca_tpl != None and hasattr(tosca_tpl, "temp_dir") and os.path.exists(tosca_tpl.temp_dir):
+ # try:
+ # shutil.rmtree(tosca_tpl.temp_dir)
+ # except Exception, e:
+ # pass
+ # # if tosca_tpl != None and tosca_tpl.temp_dir != None and os.path.exists(tosca_tpl.temp_dir):
+ # # try:
+ # # shutil.rmtree(tosca_tpl.temp_dir)
+ # # except Exception, e:
+ # # pass
+
+ def _check_download_file(self, path):
+ if (path.startswith("ftp") or path.startswith("sftp")):
+ return self.downloadFileFromFtpServer(path)
+ elif (path.startswith("http")):
+ return self.download_file_from_httpserver(path)
+ return path
+
+ def download_file_from_httpserver(self, path):
+ path = path.encode("utf-8")
+ tmps = str.split(path, '/')
+ localFileName = tmps[len(tmps) - 1]
+ urllib.urlretrieve(path, localFileName)
+ return localFileName
+
+ def downloadFileFromFtpServer(self, path):
+ path = path.encode("utf-8")
+ tmp = str.split(path, '://')
+ protocol = tmp[0]
+ tmp = str.split(tmp[1], ':')
+ if len(tmp) == 2:
+ userName = tmp[0]
+ tmp = str.split(tmp[1], '@')
+ userPwd = tmp[0]
+ index = tmp[1].index('/')
+ hostIp = tmp[1][0:index]
+ remoteFileName = tmp[1][index:len(tmp[1])]
+ if protocol.lower() == 'ftp':
+ hostPort = 21
+ else:
+ hostPort = 22
+
+ if len(tmp) == 3:
+ userName = tmp[0]
+ userPwd = str.split(tmp[1], '@')[0]
+ hostIp = str.split(tmp[1], '@')[1]
+ index = tmp[2].index('/')
+ hostPort = tmp[2][0:index]
+ remoteFileName = tmp[2][index:len(tmp[2])]
+
+ localFileName = str.split(remoteFileName, '/')
+ localFileName = localFileName[len(localFileName) - 1]
+
+ if protocol.lower() == 'sftp':
+ self.sftp_get(userName, userPwd, hostIp, hostPort, remoteFileName, localFileName)
+ else:
+ self.ftp_get(userName, userPwd, hostIp, hostPort, remoteFileName, localFileName)
+ return localFileName
diff --git a/lcm/pub/utils/toscaparser/dataentityext.py b/lcm/pub/utils/toscaparser/dataentityext.py
new file mode 100644
index 00000000..02c11acf
--- /dev/null
+++ b/lcm/pub/utils/toscaparser/dataentityext.py
@@ -0,0 +1,34 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+
+from toscaparser.dataentity import DataEntity
+from toscaparser.elements.constraints import Schema
+from toscaparser.common.exception import ExceptionCollector
+
+class DataEntityExt(object):
+ '''A complex data value entity ext.'''
+
+ @staticmethod
+ def validate_datatype(type, value, entry_schema=None, custom_def=None):
+ if value:
+ if (type == Schema.STRING):
+ return str(value)
+ elif type == Schema.FLOAT:
+ try:
+ return float(value)
+ except Exception:
+ ExceptionCollector.appendException(ValueError(('"%s" is not an float.') % value))
+
+ return DataEntity.validate_datatype(type, value, entry_schema, custom_def)
+ return value
+
diff --git a/lcm/pub/utils/toscaparser/etsinsdinfomodel.py b/lcm/pub/utils/toscaparser/etsinsdinfomodel.py
index 3a9cee0a..693a7fdd 100644
--- a/lcm/pub/utils/toscaparser/etsinsdinfomodel.py
+++ b/lcm/pub/utils/toscaparser/etsinsdinfomodel.py
@@ -4,4 +4,9 @@ from lcm.pub.utils.toscaparser.baseinfomodel import BaseInfoModel
class EtsiNsdInfoModel(BaseInfoModel):
def __init__(self, path, params):
- pass
+ tosca = self.buildToscaTemplate(path, params)
+ self.parseModel(tosca)
+
+
+ def parseModel(self, tosca):
+ pass \ No newline at end of file