from flask import Blueprint import balloon.extract_wave import balloon.read_data import balloon.plot_once import balloon.plot_year from flask import Flask, jsonify, request, send_file from balloon.plot_once_backend import render_by_mode_single from balloon.plot_year_backend import get_all_modes, render_based_on_mode from utils import * all_year_data = pd.read_parquet("./balloon/ballon_data_lin.parquet") all_ballon_files = glob.glob("./balloon/data/**/**.nc", recursive=True) def get_dataframe_between_year(start_year, end_year): res = all_year_data filtered_res = res[(res['file_name'].str.extract(r'LIN-(\d{4})')[0].astype(int) >= start_year) & (res['file_name'].str.extract(r'LIN-(\d{4})')[0].astype(int) <= end_year)] return filtered_res plot_once = balloon.plot_once.plot_once plot_year = balloon.plot_year.plot_year is_terrain_wave = balloon.extract_wave.is_terrain_wave read_data = balloon.read_data.read_data extract_wave = balloon.extract_wave.extract_wave balloon_module = Blueprint("Balloon", __name__) @balloon_module.route('/') def home(): return jsonify(message="Welcome to the Flask balloon_module!") @balloon_module.route("/metadata/modes") def supermeta(): return jsonify({ "combos": comboType, "comboMode": comboMode, "date": comboDate }) @balloon_module.route("/metadata") def list_ballon(): return all_ballon_files @balloon_module.route("/metadata/year") def list_ballon_year_modes(): return get_all_modes() @balloon_module.route("/metadata/stations") def list_stations(): return [] @balloon_module.route("/render/year") def render_full_year(): # get start_year and end_year from query start_year = request.args.get('start_year') end_year = request.args.get('end_year') mode = request.args.get('mode') season = request.args.get('season') print(start_year, end_year) df = get_dataframe_between_year(int(start_year), int(end_year)) buff = render_based_on_mode(df, mode, season) return send_file(buff, mimetype='image/png') @balloon_module.route("/render/single") def render_single_path(): path = request.args.get('path') mode = request.args.get('mode') data = balloon.read_data(path) buff = render_by_mode_single(data, mode) if buff is None: # give a 204 response if no data is found return '', 204 return send_file(buff, mimetype='image/png')