import glob from io import BytesIO from flask import Blueprint, request, send_file from matplotlib import pyplot as plt from saber.process import DataProcessor from saber.render import Renderer from saber.utils import * saber_module = Blueprint('saber', __name__) lat_range = (30.0, 40.0) alt_range = (20.0, 105.0) lambda_range = (2, 15) lvboin = True processor = DataProcessor( lat_range=lat_range, alt_range=alt_range, lambda_range=lambda_range, lvboin=lvboin) renderer = Renderer() def extract_payload(): buffer = BytesIO() plt.savefig(buffer, format="png") buffer.seek(0) return send_file(buffer, mimetype="image/png") all_saber_files = glob.glob("./saber/data/**/**.nc", recursive=True) @saber_module.route("/metadata") def get_files(): return all_saber_files @saber_module.route("/metadata/list_days") def get_days(): path = request.args.get("path") ncfile = data_nc_load(path) return ncfile.date_time.tolist() @saber_module.route("/render/plot_wave_fitting") def do_plot_wave_day_fitting(): path = request.args.get("path") day = request.args.get("day") height = request.args.get("height") ncfile = data_nc_load(path) data = processor.process_day(ncfile, int(day)) renderer.plot_wave_fitting(data, int(height)) return extract_payload() @saber_module.route("/render/day_fft_ifft_plot") def do_day_fft_ifft_plot(): path = request.args.get("path") day = request.args.get("day") cycle_no = request.args.get("cycle_no") ncfile = data_nc_load(path) data = processor.process_day(ncfile, int(day)) renderer.day_fft_ifft_plot(wave_data=data, cycle_no=int(cycle_no)) return extract_payload() @saber_module.route("/render/day_cycle_power_wave_plot") def do_day_cycle_power_wave_plot(): path = request.args.get("path") day = request.args.get("day") cycle_no = request.args.get("cycle_no") ncfile = data_nc_load(path) data = processor.process_day(ncfile, int(day)) renderer.day_cycle_power_wave_plot(wave_data=data, cycle_no=int(cycle_no)) return extract_payload() @saber_module.route("/render/month_power_wave_plot") def do_month_power_wave_plot(): path = request.args.get("path") month = request.args.get("month") ncfile = data_nc_load(path) data = processor.process_month(ncfile) renderer.month_power_wave_plot(wave_data=data, date_time=ncfile.date_time) return extract_payload() @saber_module.route("/render/year_power_wave_plot") def do_year_power_wave_plot(): year = request.args.get("year") data = processor.process_year([ data_nc_load(path) for path in glob.glob(f"./saber/data/{year}/*.nc") ]) renderer.year_power_wave_plot(year_wave=data) return extract_payload()