diff --git a/app/routes.py b/app/routes.py index 7bf67d6..cb40c86 100644 --- a/app/routes.py +++ b/app/routes.py @@ -1,121 +1,57 @@ -from flask import request, render_template, jsonify -from . import application +from flask import Flask, request, render_template, jsonify import json -from app.evaluation_metrics import evaluation import os +import logging +from app.evaluation_metrics import evaluation + +app = Flask(__name__) +# Configure logging +# logging.basicConfig(level=logging.DEBUG) def is_valid_json(my_json): try: json.loads(my_json) - except ValueError: + except ValueError as e: + logging.error(f"Invalid JSON format: {e}") return False return True - -@application.route('/file', methods=['GET', 'POST']) +@app.route('/', methods=['GET', 'POST']) def get_data_file(): if request.method == 'POST': - - f1 = request.files['file1'] - f2 = request.files['file2'] - true = True null = None false = False + logging.debug("Received POST request") - eval = evaluation() - - if isinstance(f1, (str, bytes, bytearray)) and isinstance(f2, (str, bytes, bytearray)): - if os.path.isfile(f1) and os.path.isfile(f2): - - f1.save(f1.filename) - ff1 = open(f1.filename, 'r') - + if request.files: + f1 = request.files['file1'] + f2 = request.files['file2'] - f2.save(f2.filename) - ff2 = open(f2.filename, 'r') + eval = evaluation() + f1.save(f1.filename) + logging.debug(f"Saved file 1 as: {f1.filename}") + with open(f1.filename, 'r') as ff1: data1 = json.load(ff1) - data2 = json.load(ff2) - - all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm = eval.matching_calculation( - data1, data2) - - kappa = eval.kappa_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - - # Text Similarity and CASS - Text_similarity = eval.text_similarity(data1, data2) - - - CASS = eval.CASS_calculation(Text_similarity, kappa) - - - # F1 - F1 = eval.F1_Macro_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - print('F1', F1) - # accuracy - Acc = eval.accuracy_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - - # U-Alpha - U_Alpha = eval.u_alpha_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - - results = { - "Macro F1": F1, - "Accuracy": Acc, - "CASS": CASS, - "Text Similarity": Text_similarity, - "U-Alpha": U_Alpha, - "Kappa": kappa - } - - return jsonify(results) - else: - return None - - elif is_valid_json(json.dumps(f1)) and is_valid_json(json.dumps(f2)): + f2.save(f2.filename) + logging.debug(f"Saved file 2 as: {f2.filename}") + with open(f2.filename, 'r') as ff2: + data2 = json.load(ff2) - data1 = f1 - data2 = f2 + os.remove(f1.filename) + os.remove(f2.filename) all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm = eval.matching_calculation( data1, data2) - - kappa = eval.kappa_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - - # Text Similarity and CASS + kappa = eval.kappa_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm) Text_similarity = eval.text_similarity(data1, data2) - - CASS = eval.CASS_calculation(Text_similarity, kappa) - - - # F1 - F1 = eval.F1_Macro_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - # accuracy - Acc = eval.accuracy_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - - # U-Alpha - U_Alpha = eval.u_alpha_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) + F1 = eval.F1_Macro_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm) + Acc = eval.accuracy_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm) + U_Alpha = eval.u_alpha_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm) results = { "Macro F1": F1, @@ -128,196 +64,39 @@ def get_data_file(): return jsonify(results) + if request.values: + data1 = request.values.get('json1') - else: - return None - - - - - - - elif request.method == 'GET': - - return render_template('docs.html') - - @application.route('/file', methods=['GET', 'POST']) - def get_data(): - if request.method == 'POST': - - f1 = request.files['file1'] - f2 = request.files['file2'] - - true = True - null = None - false = False - - eval = evaluation() - - if isinstance(f1, (str, bytes, bytearray)) and isinstance(f2, (str, bytes, bytearray)): - if os.path.isfile(f1) and os.path.isfile(f2): - - f1.save(f1.filename) - ff1 = open(f1.filename, 'r') - - f2.save(f2.filename) - ff2 = open(f2.filename, 'r') - - data1 = json.load(ff1) - data2 = json.load(ff2) - - all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm = eval.matching_calculation( - data1, data2) - - kappa = eval.kappa_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - # Text Similarity and CASS - Text_similarity = eval.text_similarity(data1, data2) - - CASS = eval.CASS_calculation(Text_similarity, kappa) - - # F1 - F1 = eval.F1_Macro_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - print('F1', F1) - # accuracy - Acc = eval.accuracy_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - # U-Alpha - U_Alpha = eval.u_alpha_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, - prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - results = { - "Macro F1": F1, - "Accuracy": Acc, - "CASS": CASS, - "Text Similarity": Text_similarity, - "U-Alpha": U_Alpha, - "Kappa": kappa - } - - return jsonify(results) - - else: - return None - - elif is_valid_json(json.dumps(f1)) and is_valid_json(json.dumps(f2)): - - data1 = f1 - data2 = f2 - - all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm = eval.matching_calculation( - data1, data2) - - kappa = eval.kappa_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - # Text Similarity and CASS - Text_similarity = eval.text_similarity(data1, data2) - - CASS = eval.CASS_calculation(Text_similarity, kappa) - - # F1 - F1 = eval.F1_Macro_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - # accuracy - Acc = eval.accuracy_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - # U-Alpha - U_Alpha = eval.u_alpha_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - results = { - "Macro F1": F1, - "Accuracy": Acc, - "CASS": CASS, - "Text Similarity": Text_similarity, - "U-Alpha": U_Alpha, - "Kappa": kappa - } - - return jsonify(results) - - - - else: - return None - - - - - - - elif request.method == 'GET': - - return render_template('docs.html') - -@application.route('/json', methods=['GET', 'POST']) -def get_data_json(): - if request.method == 'POST': - - f1 = request.args.get['file1'] - f2 = request.args.get['file2'] + data2 = request.values.get('json2') + # print("Received data1:", data1) + # + # print("Received data2:", data2) - true = True - null = None - false = False + if is_valid_json(json.dumps(data1)) and is_valid_json(json.dumps(data2)): - eval = evaluation() + # print("Both data1 and data2 are valid JSON") - if isinstance(f1, (str, bytes, bytearray)) and isinstance(f2, (str, bytes, bytearray)): - if os.path.isfile(f1) and os.path.isfile(f2): + data1 = json.loads(data1) - f1.save(f1.filename) - ff1 = open(f1.filename, 'r') + data2 = json.loads(data2) + # print("Parsed data1:", data1) + # + # print("Parsed data2:", data2) - f2.save(f2.filename) - ff2 = open(f2.filename, 'r') - data1 = json.load(ff1) - data2 = json.load(ff2) + eval = evaluation() all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm = eval.matching_calculation( data1, data2) - - kappa = eval.kappa_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - - # Text Similarity and CASS + kappa = eval.kappa_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm) Text_similarity = eval.text_similarity(data1, data2) - - CASS = eval.CASS_calculation(Text_similarity, kappa) - - - # F1 - F1 = eval.F1_Macro_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - print('F1', F1) - # accuracy - Acc = eval.accuracy_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - - # U-Alpha - U_Alpha = eval.u_alpha_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - + F1 = eval.F1_Macro_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm) + Acc = eval.accuracy_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm) + U_Alpha = eval.u_alpha_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm) results = { "Macro F1": F1, @@ -329,65 +108,16 @@ def get_data_json(): } return jsonify(results) - else: - return None - - elif is_valid_json(json.dumps(f1)) and is_valid_json(json.dumps(f2)): - - data1 = f1 - data2 = f2 - - all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, loc_ta_cm, prop_ya_cm = eval.matching_calculation( - data1, data2) - - kappa = eval.kappa_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - - # Text Similarity and CASS - Text_similarity = eval.text_similarity(data1, data2) - - - CASS = eval.CASS_calculation(Text_similarity, kappa) - - - # F1 - F1 = eval.F1_Macro_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, prop_ya_cm) - - # accuracy - Acc = eval.accuracy_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - - # U-Alpha - U_Alpha = eval.u_alpha_calculation(all_s_a_cm, prop_rels_comp_cm, loc_ya_rels_comp_cm, prop_ya_comp_cm, - loc_ta_cm, - prop_ya_cm) - - results = { - "Macro F1": F1, - "Accuracy": Acc, - "CASS": CASS, - "Text Similarity": Text_similarity, - "U-Alpha": U_Alpha, - "Kappa": kappa - } - - return jsonify(results) - - - + # logging.error("Invalid JSON data provided") + return jsonify({"error": "Invalid JSON data"}), 400 else: - return None - - - - - + # logging.error("No files or JSON data provided") + return jsonify({"error": "No files or JSON data provided"}), 400 elif request.method == 'GET': - + # logging.debug("Received GET request") return render_template('docs.html') + +# if __name__ == '__main__': +# app.run(debug=True)