def report(pdf=None, path_simulation_output_json=None, path_pdf_report=None): """Display the report of a MVS simulation Command line use: .. code-block:: bash mvs_report [-h] [-i [PATH_SIM_OUTPUT]] [-o [REPORT_PATH]] [-pdf] optional command line arguments: -h, --help show this help message and exit -pdf [PRINT_REPORT] print the report as pdf (default: False) -i [OUTPUT_FOLDER] path to the simulation result json file 'json_with_results.json' -o [REPORT_PATH] path to save the pdf report -d [DEBUG_REPORT] run the dash app in debug mode with hot-reload Parameters ---------- pdf: bool if True a pdf report should be generated Default: False path_simulation_output_json: str path to the simulation result json file 'json_with_results.json' path_pdf_report: str path to save the pdf report Returns ------- Save a pdf report if option -pdf is provided, otherwise display the report as an app """ # Parse the arguments from the command line parser = A0.report_arg_parser() args = vars(parser.parse_args()) # Give priority from user input kwargs over command line arguments # However the command line arguments have priority over default kwargs if pdf is None: pdf = args.get(ARG_PDF, False) if path_simulation_output_json is None: path_simulation_output_json = args.get(ARG_PATH_SIM_OUTPUT) if path_pdf_report is None: path_pdf_report = args.get(ARG_REPORT_PATH) # if the user only provided the path to the folder, we complete with default json file if os.path.isdir(path_simulation_output_json) is True: path_simulation_output_json = os.path.join( path_simulation_output_json, JSON_WITH_RESULTS + JSON_FILE_EXTENSION) logging.warning( f"Only path to a folder provided ({args.get(ARG_PATH_SIM_OUTPUT)}), looking now for default {JSON_WITH_RESULTS + JSON_FILE_EXTENSION} file within this folder" ) if os.path.exists(path_simulation_output_json) is False: raise FileNotFoundError( "Simulation results file {} not found. You need to run a simulation to generate " "the data before you can generate a report\n\n\tsee `mvs_tool -h` for help on how " "to run a simulation\n".format(path_simulation_output_json)) else: # path to the mvs simulation output files path_sim_output = os.path.dirname(path_simulation_output_json) # if report path is not specified it will be included in the mvs simulation outputs folder if path_pdf_report == "": path_pdf_report = os.path.join(path_sim_output, REPORT_FOLDER, PDF_REPORT) # load the results of a simulation dict_values = B0.load_json(path_simulation_output_json, flag_missing_values=False) test_app = create_app(dict_values, path_sim_output=path_sim_output) banner = "*" * 40 print(banner + "\nPress ctrl+c to stop the report server\n" + banner) if pdf is True: print_pdf(test_app, path_pdf_report=path_pdf_report) else: if args.get(ARG_DEBUG_REPORT) is True: test_app.run_server(debug=True) else: # run the dash server for 600s before shutting it down open_in_browser(test_app, timeout=600) print( banner + "\nThe report server has timed out.\nTo start it again run " "`mvs_report`.\nTo let it run for a longer time, change timeout setting in " "the cli.py file\n" + banner)
def report(pdf=None, path_simulation_output_json=None, path_pdf_report=None): """Display the report of a MVS simulation Command line use: .. code-block:: bash mvs_report [-h] [-i [PATH_SIM_OUTPUT]] [-o [REPORT_PATH]] [-pdf] optional command line arguments: -h, --help show this help message and exit -pdf [PRINT_REPORT] print the report as pdf (default: False) -i [OUTPUT_FOLDER] path to the simulation result json file 'json_with_results.json' -o [REPORT_PATH] path to save the pdf report Parameters ---------- pdf: bool if True a pdf report should be generated Default: False path_simulation_output_json: str path to the simulation result json file 'json_with_results.json' path_pdf_report: str path to save the pdf report Returns ------- Save a pdf report if option -pdf is provided, otherwise display the report as an app """ # Parse the arguments from the command line parser = initializing.report_arg_parser() args = vars(parser.parse_args()) print(args) # Give priority from user input kwargs over command line arguments # However the command line arguments have priority over default kwargs if pdf is None: pdf = args.get(ARG_PDF, False) if path_simulation_output_json is None: path_simulation_output_json = args.get(ARG_PATH_SIM_OUTPUT) if path_pdf_report is None: path_pdf_report = args.get(ARG_REPORT_PATH) # if the user only provided the path to the folder, we complete with default json file if os.path.isdir(path_simulation_output_json) is True: path_simulation_output_json = os.path.join(path_simulation_output_json, JSON_WITH_RESULTS) if os.path.exists(path_simulation_output_json) is False: raise FileNotFoundError( "{} not found. You need to run a simulation to generate the data to report" "see `python mvs_tool.py -h` for help".format( path_simulation_output_json)) else: # path to the mvs simulation output files path_sim_output = os.path.dirname(path_simulation_output_json) # if report path is not specified it will be included in the mvs simulation outputs folder if path_pdf_report == "": path_pdf_report = os.path.join(path_sim_output, REPORT_FOLDER, PDF_REPORT) # load the results of a simulation dict_values = data_input.load_json(path_simulation_output_json) test_app = create_app(dict_values, path_sim_output=path_sim_output) banner = "*" * 40 print(banner + "\nPress ctrl+c to stop the report server\n" + banner) if pdf is True: print_pdf(test_app, path_pdf_report=path_pdf_report) else: # run the dash server for 600s before shutting it down open_in_browser(test_app, timeout=600) print( banner + "\nThe report server has timed out.\nTo start it again run `python " "mvs_report.py`.\nTo let it run for a longer time, change timeout setting in " "the mvs_report.py file\n" + banner)