From 9006bb289d481914d85e6c3279036692ca88c28d Mon Sep 17 00:00:00 2001 From: Galen Guyer Date: Mon, 3 Oct 2022 10:41:06 -0400 Subject: Add page for evals with packets opened in the past semester --- .tool-versions | 2 ++ packet/models.py | 7 +++++++ packet/routes/admin.py | 24 ++++++++++++++++++++++++ packet/templates/admin_past_packets.html | 21 +++++++++++++++++++++ packet/templates/include/nav.html | 3 ++- packet/utils.py | 2 +- requirements.in | 2 +- requirements.txt | 6 ++++-- 8 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 .tool-versions create mode 100644 packet/templates/admin_past_packets.html diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..11bfbc4 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,2 @@ +python 3.9.7 +nodejs 10.24.1 diff --git a/packet/models.py b/packet/models.py index f22e467..dfb2fe5 100644 --- a/packet/models.py +++ b/packet/models.py @@ -129,6 +129,13 @@ class Packet(db.Model): """ return cls.query.filter(cls.start < datetime.now(), cls.end > datetime.now()).all() + @classmethod + def opened_after(cls, date: datetime) -> list['Packet']: + """ + Helper method for fetching all packets opened after a given date + """ + return cls.query.filter(cls.start > date).all() + @classmethod def by_id(cls, packet_id: int) -> 'Packet': """ diff --git a/packet/routes/admin.py b/packet/routes/admin.py index 96a877b..f4ae1ca 100644 --- a/packet/routes/admin.py +++ b/packet/routes/admin.py @@ -1,3 +1,5 @@ +import datetime + from flask import render_template from packet import app @@ -29,6 +31,28 @@ def admin_packets(info=None): info=info) +@app.route('/admin/past-packets') +@log_cache +@packet_auth +@admin_auth +@before_request +@log_time +def admin_past_packets(info=None): + open_packets = Packet.opened_after(datetime.date.today() - datetime.timedelta(days=(30 * 4))) + + # Pre-calculate and store the return values of did_sign(), signatures_received(), and signatures_required() + for packet in open_packets: + packet.did_sign_result = packet.did_sign(info['uid'], app.config['REALM'] == 'csh') + packet.signatures_received_result = packet.signatures_received() + packet.signatures_required_result = packet.signatures_required() + + open_packets.sort(key=packet_sort_key, reverse=False) + + return render_template('admin_past_packets.html', + open_packets=open_packets, + info=info) + + @app.route('/admin/freshmen') @log_cache @packet_auth diff --git a/packet/templates/admin_past_packets.html b/packet/templates/admin_past_packets.html new file mode 100644 index 0000000..71261c8 --- /dev/null +++ b/packet/templates/admin_past_packets.html @@ -0,0 +1,21 @@ +{% extends "extend/base.html" %} + +{% block body %} +
+
+
+
+

Past Packets

+
+
+
+
+ {% include 'include/admin/open_packets.html' %} +
+
+{% endblock %} + +{% block scripts %} + {{ super() }} + +{% endblock %} diff --git a/packet/templates/include/nav.html b/packet/templates/include/nav.html index 6573b8b..63720dd 100644 --- a/packet/templates/include/nav.html +++ b/packet/templates/include/nav.html @@ -26,7 +26,8 @@ {% endif %} diff --git a/packet/utils.py b/packet/utils.py index a6e9158..964ac9e 100644 --- a/packet/utils.py +++ b/packet/utils.py @@ -70,7 +70,7 @@ def before_reqest_callback() -> Any: """ Pre-request function to ensure we're on the right URL before OIDC sees anything """ - if urlparse(request.base_url).hostname != app.config['SERVER_NAME']: + if urlparse(request.base_url).hostname != app.config['SERVER_NAME'].split(':')[0]: return redirect(request.base_url.replace(urlparse(request.base_url).hostname, app.config['SERVER_NAME']), code=302) return None diff --git a/requirements.in b/requirements.in index c0ccec2..c6dab1b 100644 --- a/requirements.in +++ b/requirements.in @@ -3,7 +3,7 @@ Flask-Mail==0.9.1 Flask-Migrate~=2.7.0 Flask-pyoidc~=3.7.0 Flask~=1.1.4 -csh_ldap~=2.3.1 +csh_ldap~=2.4.0 ddtrace==1.1.4 flask_sqlalchemy~=2.5.1 gunicorn~=20.0.4 diff --git a/requirements.txt b/requirements.txt index baff1f9..f76cc2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -28,7 +28,7 @@ click==7.1.2 # pip-tools cryptography==37.0.2 # via oic -csh-ldap==2.3.1 +csh-ldap==2.4.0 # via -r requirements.in ddsketch==2.0.3 # via ddtrace @@ -60,6 +60,8 @@ flask-sqlalchemy==2.5.1 # flask-migrate future==0.18.2 # via pyjwkest +greenlet==1.1.3 + # via sqlalchemy gunicorn==20.0.4 # via -r requirements.in idna==3.3 @@ -129,7 +131,7 @@ pylint-quotes==0.2.1 # via -r requirements.in pyparsing==3.0.9 # via packaging -python-ldap==3.0.0 +python-ldap==3.4.0 # via csh-ldap requests==2.27.1 # via -- cgit v1.2.3