migrate to quart

This commit is contained in:
Dustella 2025-01-24 17:21:49 +08:00
parent f9e2e1b188
commit 9f93b1a158
Signed by: Dustella
GPG Key ID: 35AA0AA3DC402D5C
6 changed files with 40 additions and 48 deletions

View File

@ -1,20 +1,16 @@
from gevent import pywsgi, monkey
monkey.patch_all()
import cosmic
import tidi
from utils import *
import saber
import radar
import balloon
from flask import Flask, request
from flask_cors import CORS
from quart import Quart, request
from quart_cors import cors
from typing import get_args
import sys
import matplotlib.font_manager as fm
app = Flask(__name__)
CORS(app)
app = Quart(__name__)
fm.fontManager.addfont("./SimHei.ttf")
@app.before_request
@ -38,7 +34,7 @@ app.register_blueprint(saber.saber_module, url_prefix="/saber")
app.register_blueprint(tidi.tidi_module, url_prefix="/tidi")
app.register_blueprint(cosmic.cosmic_module, url_prefix="/cosmic")
# allow cors
CORS(app)
app = cors(app)
if __name__ == '__main__':
@ -46,12 +42,8 @@ if __name__ == '__main__':
args = sys.argv
if 'prod' in args:
# app.run()
# import gevent
server = pywsgi.WSGIServer(('0.0.0.0', 5000), app)
server.serve_forever()
pass
elif 'debug' in args:
app.run("0.0.0.0",port=18200,debug=True)
else:
raise Exception("Invalied")
raise Exception("Invalied Mode")

View File

@ -1,9 +1,9 @@
from flask import Blueprint
from quart 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 quart import 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 *
@ -58,7 +58,7 @@ def list_stations():
@balloon_module.route("/render/year")
def render_full_year():
async 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')
@ -67,11 +67,11 @@ def render_full_year():
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')
return await send_file(buff, mimetype='image/png')
@balloon_module.route("/render/single")
def render_single_path():
async def render_single_path():
path = request.args.get('path')
mode = request.args.get('mode')
data = balloon.read_data(path)
@ -79,4 +79,4 @@ def render_single_path():
if buff is None:
# give a 204 response if no data is found
return '', 204
return send_file(buff, mimetype='image/png')
return await send_file(buff, mimetype='image/png')

View File

@ -1,5 +1,5 @@
from io import BytesIO
from flask import Blueprint, request, send_file
from quart import Blueprint, request, send_file
from matplotlib import pyplot as plt
from cosmic.temp_render import temp_render
@ -12,11 +12,11 @@ def get_meta():
return []
@cosmic_module.route('/temp_render')
def render():
async def render():
T = request.args.get("T", 16)
temp_render(T=int(T))
buf = BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return send_file(buf, mimetype="image/png")
return await send_file(buf, mimetype="image/png")

View File

@ -1,7 +1,7 @@
import asyncio
import glob
from io import BytesIO
from flask import Blueprint, request, send_file
from quart import Blueprint, request, send_file
from matplotlib import pyplot as plt
from radar.plot_original import final_render_v2
from radar.plot_prod import final_plot_v2
@ -24,7 +24,7 @@ def get_all_models():
@radar_module.route('/render/heatmap')
def render_v1():
async def render_v1():
"""
wind_type: Any,
year: Any,
@ -55,11 +55,11 @@ def render_v1():
buf.seek(0)
# close the plot
plt.close()
return send_file(buf, mimetype='image/png')
return await send_file(buf, mimetype='image/png')
@radar_module.route('/render/changes')
def render_v2():
async def render_v2():
"""
year: Any,
station: Any,
@ -81,4 +81,4 @@ def render_v2():
buffer = final_plot_v2(int(year), station, model_name, month_range)
buffer.seek(0)
return send_file(buffer, mimetype='image/png')
return await send_file(buffer, mimetype='image/png')

View File

@ -1,6 +1,6 @@
import glob
from io import BytesIO
from flask import Blueprint, request, send_file
from quart import Blueprint, request, send_file
from matplotlib import pyplot as plt
from saber.process import DataProcessor
from saber.render import Renderer
@ -40,11 +40,11 @@ def get_processer():
return _p
def extract_payload():
async def extract_payload():
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)
return send_file(buffer, mimetype="image/png")
return await send_file(buffer, mimetype="image/png")
_all_saber_files = glob.glob("./saber/data/**/**.nc", recursive=True)
@ -67,7 +67,7 @@ def get_days():
@saber_module.route("/render/plot_wave_fitting")
def do_plot_wave_day_fitting():
async def do_plot_wave_day_fitting():
path = request.args.get("path")
day = request.args.get("day")
height = request.args.get("height_no")
@ -76,11 +76,11 @@ def do_plot_wave_day_fitting():
processor = get_processer()
data = processor.process_day(ncfile, int(day))
renderer.plot_wave_fitting(data, int(height))
return extract_payload()
return await extract_payload()
@saber_module.route("/render/day_fft_ifft_plot")
def do_day_fft_ifft_plot():
async def do_day_fft_ifft_plot():
path = request.args.get("path")
day = request.args.get("day")
cycle_no = request.args.get("cycle_no")
@ -89,11 +89,11 @@ def do_day_fft_ifft_plot():
processor = get_processer()
data = processor.process_day(ncfile, int(day))
renderer.day_fft_ifft_plot(wave_data=data, cycle_no=int(cycle_no))
return extract_payload()
return await extract_payload()
@saber_module.route("/render/day_cycle_power_wave_plot")
def do_day_cycle_power_wave_plot():
async def do_day_cycle_power_wave_plot():
path = request.args.get("path")
day = request.args.get("day")
cycle_no = request.args.get("cycle_no")
@ -102,11 +102,11 @@ def do_day_cycle_power_wave_plot():
processor = get_processer()
data = processor.process_day(ncfile, int(day))
renderer.day_cycle_power_wave_plot(wave_data=data, cycle_no=int(cycle_no))
return extract_payload()
return await extract_payload()
@saber_module.route("/render/month_power_wave_plot")
def do_month_power_wave_plot():
async def do_month_power_wave_plot():
path = request.args.get("path")
month = request.args.get("month")
@ -114,15 +114,15 @@ def do_month_power_wave_plot():
processor = get_processer()
data = processor.process_month(ncfile)
renderer.month_power_wave_plot(wave_data=data, date_time=ncfile.date_time)
return extract_payload()
return await extract_payload()
@saber_module.route("/render/year_power_wave_plot")
def do_year_power_wave_plot():
async def do_year_power_wave_plot():
year = request.args.get("year")
processor = get_processer()
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()
return await extract_payload()

View File

@ -1,6 +1,6 @@
import glob
from io import BytesIO
from flask import Blueprint, request, send_file
from quart import Blueprint, request, send_file
from matplotlib import pyplot as plt
from tidi.plot import TidiPlotv2
@ -19,7 +19,7 @@ def get_all_years():
}
@tidi_module.route('/render/wave')
def render_wave():
async def render_wave():
mode = request.args.get('mode')
year = request.args.get('year')
k = request.args.get('k')
@ -33,10 +33,10 @@ def render_wave():
plt.savefig(buffer, format="png")
buffer.seek(0)
return send_file(buffer, mimetype="image/png")
return await send_file(buffer, mimetype="image/png")
@tidi_module.route('/render/month_stats_v1')
def render_stats_v1():
async def render_stats_v1():
year = request.args.get('year')
year = int(year)
@ -45,10 +45,10 @@ def render_stats_v1():
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)
return send_file(buffer, mimetype="image/png")
return await send_file(buffer, mimetype="image/png")
@tidi_module.route('/render/month_stats_v2')
def render_stats_v2():
async def render_stats_v2():
year = request.args.get('year')
year = int(year)
@ -57,4 +57,4 @@ def render_stats_v2():
buffer = BytesIO()
plt.savefig(buffer, format="png")
buffer.seek(0)
return send_file(buffer, mimetype="image/png")
return await send_file(buffer, mimetype="image/png")