zephyr-backend/balloon/__init__.py
2025-01-15 14:48:48 +08:00

78 lines
2.4 KiB
Python

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("./cache/ballon_data_lin.parquet")
all_ballon_files = glob.glob("./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("/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:
return jsonify(message="No wave detected")
return send_file(buff, mimetype='image/png')