import os import json from benchmark.Utils import Files, Folders from benchmark.ResultsBase import StubReport from benchmark.Datasets import Datasets from flask_login import current_user from flask import Blueprint, current_app, send_file from flask import render_template, current_app, request, redirect, url_for from flask_login import login_required # import shutil # import xlsxwriter # from benchmark.ResultsFiles import Excel, ReportDatasets results = Blueprint("results", __name__, template_folder="templates") @results.route("/select") @login_required def select(compare="False"): # Get a list of files in a directory files = {} os.chdir(current_user.benchmark.folder) names = Files.get_all_results(hidden=False) for name in names: report = StubReport(os.path.join(Folders.results, name)) report.report() files[name] = { "duration": report.duration, "score": report.score, "title": report.title, } candidate = current_app.config["FRAMEWORKS"].copy() candidate.remove(current_app.config["FRAMEWORK"]) return render_template( "select.html", files=files, candidate=candidate[0], framework=current_app.config["FRAMEWORK"], compare=compare.capitalize() == "True", ) @results.route("/datasets") @login_required def datasets(): os.chdir(current_user.benchmark.folder) dt = Datasets() datos = [] for dataset in dt: datos.append(dt.get_attributes(dataset)) return render_template("datasets.html", datasets=datos) @results.route("/best/") @login_required def best(file_name): os.chdir(current_user.benchmark.folder) dt = Datasets() datos = [] for dataset in dt: datos.append(dt.get_attributes(dataset)) return render_template("datasets.html", datasets=datos) @results.route("/report/") @login_required def report(file_name): os.chdir(current_user.benchmark.folder) with open(os.path.join(Folders.results, file_name)) as f: data = json.load(f) try: compare = current_app.config["COMPARE"] summary = process_data(file_name, compare, data) except Exception as e: return render_template("error.html", message=str(e), compare=compare) return render_template( "report.html", data=data, file=file_name, summary=summary, framework=current_app.config["FRAMEWORK"], back=back, ) def process_data(file_name, compare, data): report = StubReport( os.path.join(Folders.results, file_name), compare=compare ) new_list = [] for result in data["results"]: symbol = report._compute_status(result["dataset"], result["score"]) result["symbol"] = symbol if symbol != " " else " " new_list.append(result) data["results"] = new_list # Compute summary with explanation of symbols summary = {} for key, value in report._compare_totals.items(): summary[key] = (report._status_meaning(key), value) return summary