diff --git a/YKWIM/__init__.py b/YKWIM/__init__.py index acf485aecab25b8ade564683366bd0cbeeb92035..fabb8663fec58db3851bd294eeb18ee968188df6 100644 --- a/YKWIM/__init__.py +++ b/YKWIM/__init__.py @@ -1,6 +1,6 @@ from flask import Flask app = Flask(__name__) -app.config.from_object("config.ProductionConfig") +app.config.from_object("config.DevelopmentConfig") from YKWIM import views \ No newline at end of file diff --git a/YKWIM/generateJSON.py b/YKWIM/generateJSON.py index e43efaf21ac434fcd4f2a62d1cc32c8851e5b645..309fae1c9ec9470e19f4b7865545f18139de059f 100644 --- a/YKWIM/generateJSON.py +++ b/YKWIM/generateJSON.py @@ -22,7 +22,7 @@ def generateJSON(file, path=app.config["UPLOAD_FOLDER"]): #attributes sheet parsing list=[] - classe=book["Attributs"][1][0] #à valider + classe=book["Attributs"][1][0] index= list_of_all_values.index(classe) for attr in filter(lambda value:True if value[1]!='' else False,book["Attributs"][1:]): if (classe != attr[0] and attr[0]!=''): @@ -66,7 +66,7 @@ def generateJSON(file, path=app.config["UPLOAD_FOLDER"]): #enumeration values sheet parsing list=[] - enumeration=book["Valeurs d'énumération"][1][0] #à valider + enumeration=book["Valeurs d'énumération"][1][0] index= list_of_all_values.index(enumeration) for enum in filter(lambda value:True if value[1]!='' else False,book["Valeurs d'énumération"][1:]): if (enumeration != enum[0] and enum[0]!=''): diff --git a/YKWIM/static/doc/notice.pdf b/YKWIM/static/doc/notice.pdf index 54828cacb331c6a9b66d45fbb62dcf7361e718b1..02a3686a2f1aabd81b18465e5d48831aca7241cc 100644 Binary files a/YKWIM/static/doc/notice.pdf and b/YKWIM/static/doc/notice.pdf differ diff --git a/YKWIM/static/doc/template.ods b/YKWIM/static/doc/template.ods index 65ddd906c22950a48178ee84da67db105db6eef0..11afa63577899710183d1513bb8bff65f4ff6480 100644 Binary files a/YKWIM/static/doc/template.ods and b/YKWIM/static/doc/template.ods differ diff --git a/YKWIM/templates/index.html b/YKWIM/templates/index.html index a00b63902a4dff19046d0ea5158f803057dc2384..d1f1447fea27b982b0301acb689008b00c8ccdf6 100644 --- a/YKWIM/templates/index.html +++ b/YKWIM/templates/index.html @@ -77,16 +77,26 @@ <div class="row py-3"> <button type="submit" class="offset-4 btn btn-primary col-8" aria-disabled="disabled">Convertir</button> </div> + {% if error_template %} + <div class="row py-3"> + <div class="alert alert-warning alert-dismissible fade show" role="alert"> + <span>{{error_template}}</span> + <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> + </div> + </div> + {% endif %} </form> </div> <!--UML class diagram--> + {% if uml_image %} <div class="container py-3"> <div class="row justify-content-center"> - <p class="col-6 border">remarques</p> - <img src="{{uml_image}}" class="col-6 border" alt="UML class diagram"> + <p class="col-6 border">Données RDF</p> + <img src="{{url_for('getDocumentLink',document_link=uml_image)}}" class="col-6 border" alt="UML class diagram"> </div> </div> + {% endif %} </div> <div class="tab-pane" id="pills-config" role="tabpanel" aria-labelledby="pills-config-tab"> diff --git a/YKWIM/tests/template_test.ods b/YKWIM/tests/template_test.ods new file mode 100644 index 0000000000000000000000000000000000000000..5ccc6bb736f93c5a5934148d12e628c93cd76db2 Binary files /dev/null and b/YKWIM/tests/template_test.ods differ diff --git a/YKWIM/validateTemplate.py b/YKWIM/validateTemplate.py new file mode 100644 index 0000000000000000000000000000000000000000..b91597515e85213463bbcae2d34f43d474efb735 --- /dev/null +++ b/YKWIM/validateTemplate.py @@ -0,0 +1,72 @@ +import pyexcel as p + +def validateTemplate(file): + + book=p.get_book_dict(file_name=file) + + #------------------------ + #classes sheet validation + #------------------------ + + #0. La feuille classe doit contenir au moins une classe + if (book["Classes"][1][0]=='') : return "La feuille classe doit contenir au moins une classe" + + #1. Chaque classe doit avoir un lien de référence ou une définition + for cl in filter(lambda value:True if value[0]!='' else False, book["Classes"][1:]): + if (cl[1]=='' and cl[2]==''): return f"La classe {cl[0]} doit avoir un lien de référence ou une définition" + + #------------------------ + #attributes sheet validation + #------------------------ + + #0. Le nom de la classe du 1er attribut est obligatoire + if (book["Attributs"][1][0]=='') : return "Le nom de la classe du 1er attribut est obligatoire" + + list=[] + classe=book["Attributs"][1][0] + + #1. Tous les champs doivent être remplis. Le choix existe uniquement entre lien de référence et définition. + for attr in filter(lambda value:True if value[1]!='' else False,book["Attributs"][1:]): + if (attr[4]==''): return f"L'attribut {attr[1]} doit avoir une source" + if (attr[5]==''): return f"Le champs \"Identifiant\" n'est pas précisé pour l'attribut {attr[1]}" + if (attr[2]=='' and attr[3]==''): return f"L'attribut {attr[1]} doit avoir un lien de référence ou une définition" + + #2. Chaque classe doit avoir au minimum un identifiant + if (classe != attr[0] and attr[0]!=''):# si on passe à une autre classe, vérifier que la classe d'avant a un identifiant + if ("oui" not in list) : return f"la classe {classe} n'a pas d'identifiant" + classe=attr[0] + list=[] + list.append(attr[5]) + + # vérifier l'identifiant de la dernière classe + if ("oui" not in list) : return f"la classe {classe} n'a pas d'identifiant" + + #------------------------ + #associations sheet validation + #------------------------ + + #0. Chaque association doit avoir un lien de référence ou une définition + for ass in filter(lambda value:True if value[2]!='' else False,book["Associations"][1:]): + if (ass[3]=='' and ass[4]==''): return f"L'association {ass[2]} doit avoir un lien de référence ou une définition" + + #------------------------ + #enumerations sheet validation + #------------------------ + + #0. Chaque énumération doit avoir un lien de référence ou une définition + for enum in filter(lambda value:True if value[0]!='' else False, book["Énumérations"][1:]): + if (enum[1]=='' and enum[2]==''): return f"L'énumération {enum[0]} doit avoir un lien de référence ou une définition" + enum_exit=True #une énumération existe dans le diagramme UML + + #------------------------ + #enumeration values sheet validation + #------------------------ + + if enum_exit : + + #0. Le nom de l'énumération de la 1ère valeur est obligatoire + if (book["Valeurs d'énumération"][1][0]=='') : return "Le nom de l'énumération de la 1ère valeur est obligatoire" + + #1. Chaque valeur d'énumération doit avoir un lien de référence ou une définition + for enum in filter(lambda value:True if value[1]!='' else False,book["Valeurs d'énumération"][1:]): + if (enum[2]=='' and enum[3]==''): return f"La valeur d'énumération {enum[1]} doit avoir un lien de référence ou une définition" \ No newline at end of file diff --git a/YKWIM/views.py b/YKWIM/views.py index 5ae09ab07d1cb48a9871241ea541717de4754614..8a9470cda25407fcf5abc7bb2fe8e1dbb10ff292 100644 --- a/YKWIM/views.py +++ b/YKWIM/views.py @@ -1,5 +1,5 @@ -from YKWIM import app, plantUML2Image as pl -from flask import render_template, request, url_for, send_from_directory, redirect +from YKWIM import app, plantUML2Image as pl, validateTemplate as val +from flask import render_template, request, send_from_directory, flash from werkzeug.utils import secure_filename import os @@ -9,8 +9,12 @@ def index(): datasetURL=request.form["datasetURL"] file = request.files["templateFile"] file.save(os.path.join(app.config['UPLOAD_FOLDER'],secure_filename(file.filename))) - uml_image = pl.plantUML2Image(app.config['UPLOAD_FOLDER']+secure_filename(file.filename),"svg") - return render_template("index.html", uml_image=url_for('getDocumentLink',document_link=uml_image)) + error_template = val.validateTemplate(app.config['UPLOAD_FOLDER']+secure_filename(file.filename)) + if error_template == None : + uml_image = pl.plantUML2Image(app.config['UPLOAD_FOLDER']+secure_filename(file.filename),"svg") + return render_template("index.html", uml_image=uml_image) + else: + return render_template("index.html", error_template=error_template) else: return render_template("index.html")