From cb6e845d52b35cda223fea7b2de0ef3d3bea7390 Mon Sep 17 00:00:00 2001 From: clerie Date: Sat, 11 Apr 2020 14:27:42 +0200 Subject: [PATCH] Export date range validation --- wetter/templates/export.html | 26 ++++++++++++++++++++++++-- wetter/templates/target.html | 10 ++++++++++ wetter/utils.py | 11 ++++++++++- wetter/views.py | 32 +++++++++++++++++++++----------- 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/wetter/templates/export.html b/wetter/templates/export.html index 7dcbc1c..7d1fc66 100644 --- a/wetter/templates/export.html +++ b/wetter/templates/export.html @@ -13,6 +13,10 @@ + {% elif e == "end-before-start" %} + {% endif %}

Export @@ -23,20 +27,38 @@
- +
- +
+
+
+
+
+ + +
+
+
+
{% endblock %} {% block foot %} + {% endblock %} diff --git a/wetter/templates/target.html b/wetter/templates/target.html index 436f958..e8da1e8 100644 --- a/wetter/templates/target.html +++ b/wetter/templates/target.html @@ -27,6 +27,16 @@ +
+
+
+
+ + +
+
+
+
diff --git a/wetter/utils.py b/wetter/utils.py index 5795a46..df32418 100644 --- a/wetter/utils.py +++ b/wetter/utils.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -from datetime import datetime +from datetime import datetime, timedelta def fromisoformat(str): return datetime.strptime(str, '%Y-%m-%d').date() @@ -10,3 +10,12 @@ def toisoformat(str, alt=""): return fromisoformat(str).isoformat() except: return alt + +def daterangeofdays(fr, to): + return [fr + timedelta(days=x) for x in range(0, (to - fr).days + 1)] + +def daterangefilterweekend(dates): + return [date for date in dates if date.weekday() < 5] + +def strtobool(s): + return str(s).lower() in ['true', '1', 't', 'y', 'yes', 'on'] diff --git a/wetter/views.py b/wetter/views.py index 430d6cf..f75995e 100644 --- a/wetter/views.py +++ b/wetter/views.py @@ -2,7 +2,7 @@ from wetter import app, excel from wetter.models import Stations, Climate -from wetter.utils import fromisoformat, toisoformat +from wetter.utils import fromisoformat, toisoformat, strtobool from flask import request, make_response, render_template, redirect, jsonify from datetime import datetime from urllib.parse import urlencode @@ -29,34 +29,44 @@ def station(dwd_id): @app.route('/station//export/') def export(dwd_id): + today = datetime.today().date().isoformat() + fr = toisoformat(request.args.get('from')) to = toisoformat(request.args.get('to')) e = request.args.get('e') + if fr and to and not fr <= to: + fr, to = "", "" + station = Stations.query.filter_by(dwd_id=dwd_id).first_or_404() - return render_template('export.html', e=e, station=station, fr=fr, to=to) + return render_template('export.html', e=e, station=station, today=today, fr=fr, to=to) @app.route('/station//export/target/') def export_target(dwd_id): fr = toisoformat(request.args.get('from')) to = toisoformat(request.args.get('to')) + workdays_only = strtobool(request.args.get('workdays-only')) - if fr and to: + if fr and to and fr <= to: station = Stations.query.filter_by(dwd_id=dwd_id).first_or_404() - return render_template('target.html', station=station, fr=fr, to=to) + return render_template('target.html', station=station, fr=fr, to=to, workdays_only=workdays_only) else: - qs = { - "e": "empty", - } + qs = {} - if fr: - qs["from"] = fr + if not fr <= to: + qs["e"] = "end-before-start" - if to: - qs["to"] = to + else: + qs["e"] = "empty" + + if fr: + qs["from"] = fr + + if to: + qs["to"] = to return redirect('/station/' + dwd_id + '/export/?' + urlencode(qs), code=302)