Loading config.py 0 → 100644 +1 −0 Original line number Diff line number Diff line VERSION = "0.0.1" No newline at end of file doc2tosca.py +39 −16 Original line number Diff line number Diff line #!/bin/python3.5 #!/bin/python3 ''' Generate tosca definitions from Docx specfication ''' import sys import os import re from io import StringIO Loading Loading @@ -139,7 +140,7 @@ def generate_tables_between(a_id, b_id, content, buf): print(" Regex != 1 ") return definitions_count def dump_header(model_name, buf, imports): def dump_header(model_name, buf, imports=None): ''' Writes the header to the file for a specific model ''' Loading @@ -155,27 +156,24 @@ for mn in MODEL_NAMES: MODELS[mn] = tosca_model_info(mn, '- etsi_nfv_sol001_common_types.yaml') if __name__ == "__main__": try: SOL001_FN = sys.argv[1] except: print('Error: Filename missing or filename not a docx document') print('Usage: doc2tosca <docx-with-tosca-definitions>') sys.exit(1) print( "Opening " + SOL001_FN) def generate_templates(filename): ''' Takes a filename and loads the definition into the MODELS dictionary ''' if isinstance(filename, str): print("Opening " + filename) SOL001 = docx.Document(SOL001_FN) sol_001 = docx.Document(filename) for m in MODELS: dump_header(MODELS[m]['name'], MODELS[m]['buf'], MODELS[m]['imports']) # MODELS[m]['imports'] dump_header(MODELS[m]['name'], MODELS[m]['buf']) p_id = 0 cur_sect = "0" CONTENT = get_content(SOL001) CONTENT = get_content(sol_001) tables=0 while p_id < len(CONTENT): Loading Loading @@ -204,9 +202,34 @@ if __name__ == "__main__": count = generate_tables_between(sect_8_id, annex_a_id, CONTENT, MODELS['pnfd']['buf']) print("Printed " + str(count) + " types to " + "PNFD\n\n\n") 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']) print("Writing to " + MODELS[m]['fn']) MODELS[m]['fd'] = open(MODELS[m]['fn'], 'w') MODELS[m]['buf'].seek(0) MODELS[m]['fd'].write(MODELS[m]['buf'].read()) MODELS[m]['fd'].write('\n') MODELS[m]['fd'].close() if __name__ == "__main__": try: SOL001_FN = sys.argv[1] except: print('Error: Filename missing or filename not a docx document') print('Usage: doc2tosca <docx-with-tosca-definitions>') sys.exit(1) generate_templates(SOL001_FN) print_to_files() templates/home.html +5 −4 Original line number Diff line number Diff line Loading @@ -24,10 +24,11 @@ {% endwith %} <h1 style="text-align:center">TOSCA export</h1> <h1 style="text-align:center">TOSCA import/export</h1> <h5 style="text-align:center; margin-bottom: 50px">v {{ VERSION }}</h5> <div class="row"> <div class="col-sm" > <h2>tosca2doc</h2> <h2 style="text-align:center">tosca2doc</h2> <form action="/tosca2doc" method="post" enctype="multipart/form-data"> Tosca YAML files:<br /> <input type="file" name="file" multiple=""/><br /> Loading @@ -36,7 +37,7 @@ </div> <div class="col-sm"> <h2>doc2tosca</h2> <h2 style="text-align:center" >doc2tosca</h2> <form action="/doc2tosca" method="post" enctype="multipart/form-data"> Docx file:<br /> <input type="file" name="file" /><br /> Loading web_app.py +58 −3 Original line number Diff line number Diff line #!/bin/bash #!/bin/python3 import os from flask import Flask, flash, request, redirect, url_for, send_file, render_template from werkzeug.utils import secure_filename import docx import tempfile from zipfile import ZipFile import os import config import tosca2doc import doc2tosca app = Flask(__name__) UPLOAD_FOLDER = '/tmp/upload' ALLOWED_EXTENSIONS = set(['txt', 'yaml', 'docx']) Loading @@ -30,7 +37,7 @@ def allowed_file(filename): @app.route("/") def hello(): return render_template("./home.html") return render_template("./home.html", VERSION=config.VERSION) @app.route("/tosca2doc", methods=['POST']) def mk_tosca2doc(): Loading Loading @@ -78,4 +85,52 @@ def mk_tosca2doc(): doc.save('/tmp/myfile.docx') return send_file('/tmp/myfile.docx') return ("No content found") No newline at end of file #return ("No content found") def get_all_yaml_file_paths(directory): # initializing empty file paths list file_paths = [] # crawling through directory and subdirectories for root, directories, files in os.walk(directory): for filename in files: if ".yaml" in filename: # join the two strings in order to form the full filepath. filepath = os.path.join(root, filename) file_paths.append(filepath) print(filepath) # returning all file paths return file_paths @app.route("/doc2tosca", methods=['POST']) def mk_doc2tosca(): zip_fn = "tosca_defs.zip" if 'file' not in request.files: flash('No file part') return redirect(request.url) ufiles = request.files.getlist("file") # uploaded_file.filename # uploaded_file.read() sol001_file = ufiles[0] doc2tosca.generate_templates(sol001_file) tmp_dir = tempfile.mkdtemp() print("TMP DIR: " + tmp_dir) doc2tosca.print_to_files(tmp_dir) file_paths = get_all_yaml_file_paths(tmp_dir) zip_path = os.path.join(tmp_dir, zip_fn) with ZipFile( zip_path, 'w') as archive: for myfile in file_paths: archive.write(myfile, arcname=os.path.basename(myfile)) return send_file(zip_path, as_attachment=True) Loading
config.py 0 → 100644 +1 −0 Original line number Diff line number Diff line VERSION = "0.0.1" No newline at end of file
doc2tosca.py +39 −16 Original line number Diff line number Diff line #!/bin/python3.5 #!/bin/python3 ''' Generate tosca definitions from Docx specfication ''' import sys import os import re from io import StringIO Loading Loading @@ -139,7 +140,7 @@ def generate_tables_between(a_id, b_id, content, buf): print(" Regex != 1 ") return definitions_count def dump_header(model_name, buf, imports): def dump_header(model_name, buf, imports=None): ''' Writes the header to the file for a specific model ''' Loading @@ -155,27 +156,24 @@ for mn in MODEL_NAMES: MODELS[mn] = tosca_model_info(mn, '- etsi_nfv_sol001_common_types.yaml') if __name__ == "__main__": try: SOL001_FN = sys.argv[1] except: print('Error: Filename missing or filename not a docx document') print('Usage: doc2tosca <docx-with-tosca-definitions>') sys.exit(1) print( "Opening " + SOL001_FN) def generate_templates(filename): ''' Takes a filename and loads the definition into the MODELS dictionary ''' if isinstance(filename, str): print("Opening " + filename) SOL001 = docx.Document(SOL001_FN) sol_001 = docx.Document(filename) for m in MODELS: dump_header(MODELS[m]['name'], MODELS[m]['buf'], MODELS[m]['imports']) # MODELS[m]['imports'] dump_header(MODELS[m]['name'], MODELS[m]['buf']) p_id = 0 cur_sect = "0" CONTENT = get_content(SOL001) CONTENT = get_content(sol_001) tables=0 while p_id < len(CONTENT): Loading Loading @@ -204,9 +202,34 @@ if __name__ == "__main__": count = generate_tables_between(sect_8_id, annex_a_id, CONTENT, MODELS['pnfd']['buf']) print("Printed " + str(count) + " types to " + "PNFD\n\n\n") 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']) print("Writing to " + MODELS[m]['fn']) MODELS[m]['fd'] = open(MODELS[m]['fn'], 'w') MODELS[m]['buf'].seek(0) MODELS[m]['fd'].write(MODELS[m]['buf'].read()) MODELS[m]['fd'].write('\n') MODELS[m]['fd'].close() if __name__ == "__main__": try: SOL001_FN = sys.argv[1] except: print('Error: Filename missing or filename not a docx document') print('Usage: doc2tosca <docx-with-tosca-definitions>') sys.exit(1) generate_templates(SOL001_FN) print_to_files()
templates/home.html +5 −4 Original line number Diff line number Diff line Loading @@ -24,10 +24,11 @@ {% endwith %} <h1 style="text-align:center">TOSCA export</h1> <h1 style="text-align:center">TOSCA import/export</h1> <h5 style="text-align:center; margin-bottom: 50px">v {{ VERSION }}</h5> <div class="row"> <div class="col-sm" > <h2>tosca2doc</h2> <h2 style="text-align:center">tosca2doc</h2> <form action="/tosca2doc" method="post" enctype="multipart/form-data"> Tosca YAML files:<br /> <input type="file" name="file" multiple=""/><br /> Loading @@ -36,7 +37,7 @@ </div> <div class="col-sm"> <h2>doc2tosca</h2> <h2 style="text-align:center" >doc2tosca</h2> <form action="/doc2tosca" method="post" enctype="multipart/form-data"> Docx file:<br /> <input type="file" name="file" /><br /> Loading
web_app.py +58 −3 Original line number Diff line number Diff line #!/bin/bash #!/bin/python3 import os from flask import Flask, flash, request, redirect, url_for, send_file, render_template from werkzeug.utils import secure_filename import docx import tempfile from zipfile import ZipFile import os import config import tosca2doc import doc2tosca app = Flask(__name__) UPLOAD_FOLDER = '/tmp/upload' ALLOWED_EXTENSIONS = set(['txt', 'yaml', 'docx']) Loading @@ -30,7 +37,7 @@ def allowed_file(filename): @app.route("/") def hello(): return render_template("./home.html") return render_template("./home.html", VERSION=config.VERSION) @app.route("/tosca2doc", methods=['POST']) def mk_tosca2doc(): Loading Loading @@ -78,4 +85,52 @@ def mk_tosca2doc(): doc.save('/tmp/myfile.docx') return send_file('/tmp/myfile.docx') return ("No content found") No newline at end of file #return ("No content found") def get_all_yaml_file_paths(directory): # initializing empty file paths list file_paths = [] # crawling through directory and subdirectories for root, directories, files in os.walk(directory): for filename in files: if ".yaml" in filename: # join the two strings in order to form the full filepath. filepath = os.path.join(root, filename) file_paths.append(filepath) print(filepath) # returning all file paths return file_paths @app.route("/doc2tosca", methods=['POST']) def mk_doc2tosca(): zip_fn = "tosca_defs.zip" if 'file' not in request.files: flash('No file part') return redirect(request.url) ufiles = request.files.getlist("file") # uploaded_file.filename # uploaded_file.read() sol001_file = ufiles[0] doc2tosca.generate_templates(sol001_file) tmp_dir = tempfile.mkdtemp() print("TMP DIR: " + tmp_dir) doc2tosca.print_to_files(tmp_dir) file_paths = get_all_yaml_file_paths(tmp_dir) zip_path = os.path.join(tmp_dir, zip_fn) with ZipFile( zip_path, 'w') as archive: for myfile in file_paths: archive.write(myfile, arcname=os.path.basename(myfile)) return send_file(zip_path, as_attachment=True)