diff --git a/wetter/__init__.py b/wetter/__init__.py index ed58555..777b515 100644 --- a/wetter/__init__.py +++ b/wetter/__init__.py @@ -4,8 +4,10 @@ from wetter.config.db import db as config_db from flask import Flask from flask_sqlalchemy import SQLAlchemy +import flask_excel as excel app = Flask(__name__) +excel.init_excel(app) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config["SQLALCHEMY_DATABASE_URI"] = config_db['uri'] diff --git a/wetter/templates/export/ce.csv b/wetter/templates/export/ce.csv deleted file mode 100644 index 1872094..0000000 --- a/wetter/templates/export/ce.csv +++ /dev/null @@ -1,9 +0,0 @@ -Datum ,Temperatur °C - ,Niederschlag mm - ,Windgeschwindigkeit m/s - ,Sonnenscheindauer -{% for c in climate %}{{ c.date }},{{ c.tmk }} °C - ,{{ c.rsk }} mm - ,{{ c.fm }} m/s - ,{{ c.sdk }} h -{% endfor %} diff --git a/wetter/templates/target.html b/wetter/templates/target.html index 0394185..1bb01ed 100644 --- a/wetter/templates/target.html +++ b/wetter/templates/target.html @@ -35,18 +35,18 @@
-
ce.csv
+
ce

- Download + xlsx csv
-
dwd.txt
+
dwd

- Download + txt
diff --git a/wetter/views.py b/wetter/views.py index f451b09..03a1262 100644 --- a/wetter/views.py +++ b/wetter/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -from wetter import app +from wetter import app, excel from wetter.models import Stations, Climate from wetter.utils import fromisoformat from flask import request, make_response, render_template, jsonify @@ -41,19 +41,41 @@ def export_target(dwd_id): return render_template('target.html', station=station, fr=fr.isoformat(), to=to.isoformat()) -@app.route('/station//export/target/ce.csv/') -def export_target_ce_csv_render(dwd_id): +def export_target_ce(request, dwd_id): fr = fromisoformat(request.args.get('from')) to = fromisoformat(request.args.get('to')) station = Stations.query.filter_by(dwd_id=dwd_id).first_or_404() climate = Climate.query.filter_by(station=station.id).filter(Climate.date >= fr.isoformat(), Climate.date <= to.isoformat()).order_by(Climate.date.asc()) - r = make_response(render_template('export/ce.csv', climate=climate)) - r.headers['Content-Type'] = 'text/csv; charset=utf-8' - r.headers['Content-Disposition'] = 'attachment; filename="wetter_' +station.dwd_id +'_' + fr.isoformat() + '_' + to.isoformat() +'_ce.csv' + out = [ + ["Datum", "Temperatur in °C"], + [None, "Niederschlagsmenge in mm"], + [None, "Windgeschwindigkeit in m/s"], + [None, "Sonnenscheindauer in h"], + ] - return r + for c in climate: + out.append([c.date.isoformat(), str(c.tmk) + " °C"]) + out.append([None, str(c.rsk) + " mm"]) + out.append([None, str(c.fm) + " m/s"]) + out.append([None, str(c.sdk) + " h"]) + + filename = 'wetter_' + station.dwd_id +'_' + fr.isoformat() + '_' + to.isoformat() +'_ce' + + return out, filename + +@app.route('/station//export/target/ce.csv/') +def export_target_ce_csv_render(dwd_id): + out, filename = export_target_ce(request, dwd_id) + + return excel.make_response_from_array(out, 'csv', file_name=filename) + +@app.route('/station//export/target/ce.xlsx/') +def export_target_ce_xlsx_render(dwd_id): + out, filename = export_target_ce(request, dwd_id) + + return excel.make_response_from_array(out, 'xlsx', file_name=filename) @app.route('/station//export/target/dwd.txt/') def export_target_dwd_txt_render(dwd_id): @@ -65,7 +87,7 @@ def export_target_dwd_txt_render(dwd_id): r = make_response(render_template('export/dwd.txt', station=station, climate=climate)) r.headers['Content-Type'] = 'text/txt; charset=utf-8' - r.headers['Content-Disposition'] = 'attachment; filename="wetter_' + station.dwd_id +'_' + fr.isoformat() + '_' + to.isoformat() +'_dwd.txt' + r.headers['Content-Disposition'] = 'attachment; filename="wetter_' + station.dwd_id +'_' + fr.isoformat() + '_' + to.isoformat() +'_dwd.txt"' return r