diff --git a/backend.py b/backend.py index 13140f6..1a6d38c 100644 --- a/backend.py +++ b/backend.py @@ -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") diff --git a/balloon/__init__.py b/balloon/__init__.py index 40d1acd..5faeeb3 100644 --- a/balloon/__init__.py +++ b/balloon/__init__.py @@ -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') diff --git a/cosmic/__init__.py b/cosmic/__init__.py index ddeda83..b02f2d9 100644 --- a/cosmic/__init__.py +++ b/cosmic/__init__.py @@ -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") \ No newline at end of file + return await send_file(buf, mimetype="image/png") \ No newline at end of file diff --git a/radar/__init__.py b/radar/__init__.py index ab7437d..2a1921e 100644 --- a/radar/__init__.py +++ b/radar/__init__.py @@ -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') diff --git a/saber/__init__.py b/saber/__init__.py index 8aee9e3..08d14ba 100644 --- a/saber/__init__.py +++ b/saber/__init__.py @@ -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() diff --git a/tidi/__init__.py b/tidi/__init__.py index d529038..5eb7419 100644 --- a/tidi/__init__.py +++ b/tidi/__init__.py @@ -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")