diff --git a/Web/__init__.py b/Web/__init__.py new file mode 100644 index 0000000..7d2d82a --- /dev/null +++ b/Web/__init__.py @@ -0,0 +1,13 @@ +from flask import Flask +from Web.config import Config + +app = Flask(__name__) + +def create_app(config_class=Config): + app.config.from_object(config_class) + + from Web.main.routes import main + + app.register_blueprint(main) + + return app \ No newline at end of file diff --git a/Web/config.py b/Web/config.py new file mode 100644 index 0000000..0d6af55 --- /dev/null +++ b/Web/config.py @@ -0,0 +1,3 @@ +class Config(): + SECRET_KEY = '4542bae72a9fefada779b8c3fc68a826' + UPLOAD_FOLDER = '/path/to/the/uploads' \ No newline at end of file diff --git a/Web/main/__init__.py b/Web/main/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Web/main/forms.py b/Web/main/forms.py new file mode 100644 index 0000000..9777436 --- /dev/null +++ b/Web/main/forms.py @@ -0,0 +1,7 @@ +from flask_wtf import FlaskForm +from wtforms import FileField, SubmitField +from flask_wtf.file import FileAllowed + +class UploadJavaForm(FlaskForm): + java = FileField('.java hochladen', validators=[FileAllowed(['java', 'txt'])]) + submit = SubmitField('Bestätigen') \ No newline at end of file diff --git a/Web/main/routes.py b/Web/main/routes.py new file mode 100644 index 0000000..0fa8a87 --- /dev/null +++ b/Web/main/routes.py @@ -0,0 +1,75 @@ +from flask.helpers import send_file +import Web +from flask import render_template, abort, flash, Blueprint +from Web.main.forms import UploadJavaForm +from random import randint +import shutil as zip +import secrets +import os +import logging + +UPLOAD_FOLDER = '/path/to/' +ALLOWED_EXTENSIONS = {'java','txt'} + +from gui.utils import nassi +from interpreter.NassiShneidermann import NassiShneidermanDiagram, OB + +main = Blueprint('main', __name__) + +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + +def javaDatei(form_file): + try: + random_hex = secrets.token_hex(8) + _, f_ext = os.path.splitext(form_file.filename) + file_fname = random_hex + f_ext + dirctory_path = os.path.abspath(os.path.join('Web', os.pardir)) + file_path = os.path.join(dirctory_path, './tmp/input', file_fname) + form_file.save(file_path) + return file_path + except: + flash('Hier ist was falsch gelaufen!') + + +@main.route('/', methods=['POST', 'GET']) +@main.route('/generator', methods=['POST','GET']) +def generator(): + form = UploadJavaForm() + + if form.validate_on_submit(): + if form.java.data: + input_path = javaDatei(form.java.data) + output_path = os.path.join(os.path.abspath(os.path.join('Web', os.pardir)), './tmp/input') + outputname = str(randint(0, 100) ) + remove_tags = None + comments = None + behaviour = OB.RANDOM_NAME + types = None + + NSD = NassiShneidermanDiagram(True) + output_directory = output_path + '/' + outputname + + # if font_filepath != None: + # NSD.set_font(font_filepath) + + try: + if not os.path.exists(output_directory): + os.makedirs(output_directory) + except OSError: + logging.error('Error: Creating directory. ' + output_directory) + + + custom_tags = {"comments" : comments, "ignore" : remove_tags, "types" : types} + + NSD.load_from_file(input_path, custom_tags) + NSD.convert_to_image(output_directory, on_conflict=behaviour) + + zip_path = os.path.join(os.path.abspath(os.path.join('Web', os.pardir)), f'../tmp/output/{outputname}') + zip.make_archive(zip_path, 'zip', output_directory) + + return send_file(zip_path + '.zip', as_attachment=True) + + return render_template('upload.html', title='', legend='', form=form ) + diff --git a/Web/templates/layout.html b/Web/templates/layout.html new file mode 100644 index 0000000..cdb9c2d --- /dev/null +++ b/Web/templates/layout.html @@ -0,0 +1,68 @@ + + +
+ + + + + + + + + + {% if title %} +Test Page
+