From bfe25516a8ac0cc3468d1738d1400c2fd92a469f Mon Sep 17 00:00:00 2001 From: Michele Carignani <michele.carignani@etsi.org> Date: Fri, 17 May 2019 18:07:40 +0200 Subject: [PATCH] Parametrized version in doc2tosca --- src/config.py | 2 +- src/doc2tosca.py | 28 ++++++++++++++++------------ src/templates/home.html | 11 +++++++++-- src/web_app.py | 26 +++++++++++++++++--------- 4 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/config.py b/src/config.py index 052374a..bc4ffb3 100644 --- a/src/config.py +++ b/src/config.py @@ -1 +1 @@ -VERSION = "0.0.1" \ No newline at end of file +VERSION = "0.0.2" diff --git a/src/doc2tosca.py b/src/doc2tosca.py index 070c1fa..cd061f2 100644 --- a/src/doc2tosca.py +++ b/src/doc2tosca.py @@ -16,6 +16,8 @@ BASE_FILENAME = "generated_etsi_nfv_sol001_{}_types.yaml" TOSCA_VERSION = "tosca_simple_yaml_1_2" SPEC_VERSION = "2.6.1" +allowed_versions = ["2.6.1","2.7.1"] + MODEL_NAMES = ['vnfd', 'nsd', 'pnfd', 'common'] HDR = '''tosca_definitions_version: {tosca_version} @@ -141,36 +143,39 @@ def generate_tables_between(a_id, b_id, content, buf): print(" Regex != 1 ") return definitions_count -def dump_header(model_name, buf, imports=None): +def dump_header(model_name, buf, spec_version=SPEC_VERSION, imports=None): ''' Writes the header to the file for a specific model ''' buf.write(HDR.format( tosca_version=TOSCA_VERSION, model=model_name, - spec_version=SPEC_VERSION, + spec_version=spec_version, imports=imports)) MODELS = {} -for mn in MODEL_NAMES: - MODELS[mn] = tosca_model_info( - mn, - '- https://forge.etsi.org/rep/nfv/SOL001/raw/v{}/etsi_nfv_sol001_common_types.yaml'.format(SPEC_VERSION) - ) - - -def generate_templates(filename): +def generate_templates(filename, spec_version=SPEC_VERSION): ''' Takes a filename or file object and loads the definition into the MODELS dictionary ''' if isinstance(filename, str): print("Opening " + filename) + for mn in MODEL_NAMES: + MODELS[mn] = tosca_model_info( + mn, + '- https://forge.etsi.org/rep/nfv/SOL001/raw/v{}/etsi_nfv_sol001_common_types.yaml'.format(spec_version) + ) + sol_001 = docx.Document(filename) for m in MODELS: - dump_header(MODELS[m]['name'], MODELS[m]['buf'], MODELS[m]['imports']) + dump_header( + MODELS[m]['name'], + MODELS[m]['buf'], + spec_version, + MODELS[m]['imports']) p_id = 0 @@ -211,7 +216,6 @@ def print_to_files(prefix=None): Prefix is a path to a folder to work into ''' for m in MODELS: - if prefix != None: MODELS[m]['fn'] = os.path.join(prefix, MODELS[m]['fn']) diff --git a/src/templates/home.html b/src/templates/home.html index 15719fb..4c3563e 100644 --- a/src/templates/home.html +++ b/src/templates/home.html @@ -74,9 +74,16 @@ For any other inquiry, contact <a href="mailto:cti_support@etsi.org">ETSI CTI</a <center> <a href="doc2tosca-info">Details</a> </center> - <form action="doc2tosca" method="post" enctype="multipart/form-data"> + <form action="doc2tosca" id="doc2tosca-form" name="doc2tosca-form" method="post" enctype="multipart/form-data"> Docx file:<br /> - <input type="file" name="file" /><br /><br /> + <input type="file" name="file" /></br></br> + Version: + <select class="form-control form-control-sm" form="doc2tosca-form" name="doc-version"> + {% for version in doc_allowed_versions %} + <option value="{{version}}">{{version}}</option> + {% endfor %} + </select> + <br /><br /> <center> <input type="submit" class="btn btn-primary" value="Upload" /> </center> diff --git a/src/web_app.py b/src/web_app.py index 6f9df65..1bc36a4 100644 --- a/src/web_app.py +++ b/src/web_app.py @@ -20,10 +20,8 @@ class ReverseProxied(object): self.script_name = script_name self.scheme = scheme self.server = server - print("Reverse Proxy set up") def __call__(self, environ, start_response): - print("ReverseProxy called") script_name = environ.get('HTTP_X_SCRIPT_NAME', '') or self.script_name if script_name: environ['SCRIPT_NAME'] = script_name @@ -34,9 +32,6 @@ class ReverseProxied(object): if scheme: environ['wsgi.url_scheme'] = scheme server = environ.get('HTTP_X_FORWARDED_HOST', '') or self.server - print('HTTP_X_FORWARDED_SERVER ' + environ.get('HTTP_X_FORWARDED_SERVER')) - print('HTTP_X_FORWARDED_FOR ' + environ.get('HTTP_X_FORWARDED_FOR')) - print('HTTP_X_FORWARDED_HOST ' + environ.get('HTTP_X_FORWARDED_HOST')) if server: environ['HTTP_HOST'] = server return self.app(environ, start_response) @@ -68,7 +63,7 @@ def hello(): ''' Render home page ''' - return render_template("./home.html", VERSION=config.VERSION) + return render_template("./home.html", VERSION=config.VERSION, doc_allowed_versions=doc2tosca.allowed_versions) @app.route("/doc2tosca-info") def doc2tosca_info(): @@ -158,6 +153,8 @@ def get_all_yaml_file_paths(directory): def after_request(response): if request.path != '/doc2tosca': return response + if g.get('tmp_dir') == None: + return response shutil.rmtree(g.tmp_dir, ignore_errors=True) print("Deleted {}\n\n".format(g.tmp_dir)) return response @@ -168,14 +165,25 @@ def mk_doc2tosca(): zip_fn = "tosca_defs.zip" if 'file' not in request.files: - flash('No file part') - return redirect(request.url) + flash('No file uploaded') + return redirect("/tosca-ie") ufiles = request.files.getlist("file") + try: + print(request.form) + doc_version = request.form.get('doc-version') + except: + flash("Something went wrong :/") + return redirect("/tosca-ie") + + if doc_version not in doc2tosca.allowed_versions: + flash('Incorrect doc version selected') + return redirect("/tosca-ie") + sol001_file = ufiles[0] - doc2tosca.generate_templates(sol001_file) + doc2tosca.generate_templates(sol001_file, doc_version) tmp_dir = tempfile.mkdtemp() print("TMP DIR: " + tmp_dir) -- GitLab