Skip to content

Commit 2d17b0e

Browse files
committed
Refactored and fixed the upperclassmen only pages
1 parent c5559aa commit 2d17b0e

File tree

3 files changed

+43
-40
lines changed

3 files changed

+43
-40
lines changed

packet/routes/upperclassmen.py

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,58 @@
1-
from datetime import datetime
2-
from itertools import chain
1+
"""
2+
Routes available to CSH users only
3+
"""
34

4-
from flask import redirect, render_template
5-
from sqlalchemy import func, case
5+
from flask import redirect, render_template, url_for
6+
from itertools import chain
7+
from operator import itemgetter
68

7-
from packet import auth, app, db
8-
from packet.models import Packet, UpperSignature, MiscSignature
9+
from packet import auth, app
10+
from packet.models import Packet, MiscSignature
911
from packet.utils import before_request
1012

1113

1214
@app.route("/")
1315
@auth.oidc_auth
1416
def index():
15-
return redirect("/packets", 302)
17+
return redirect(url_for("packets"), 302)
1618

1719

18-
@app.route("/member/<uid>")
20+
@app.route("/member/<uid>/")
1921
@auth.oidc_auth
2022
@before_request
2123
def upperclassman(uid, info=None):
22-
open_packets = Packet.query.filter(Packet.end > datetime.now()).filter(Packet.start < datetime.now()).all()
23-
signatures = 0
24+
open_packets = Packet.open_packets()
2425

26+
# Pre-calculate and store the return value of did_sign()
2527
for packet in open_packets:
26-
packet.did_sign = False
28+
packet.did_sign_result = packet.did_sign(uid, True)
2729

28-
for sig in chain(filter(lambda sig: sig.signed, packet.upper_signatures), packet.misc_signatures):
29-
if sig.member == uid:
30-
packet.did_sign = True
31-
signatures += 1
32-
break
30+
signatures = sum(map(lambda packet: 1 if packet.did_sign_result else 0, open_packets))
3331

34-
open_packets.sort(key=lambda x: x.did_sign, reverse=True)
32+
open_packets.sort(key=lambda packet: packet.freshman_username)
33+
open_packets.sort(key=lambda packet: packet.did_sign_result, reverse=True)
3534

3635
return render_template("upperclassman.html", info=info, open_packets=open_packets, member=uid,
3736
signatures=signatures)
3837

3938

40-
@app.route("/upperclassmen")
39+
@app.route("/upperclassmen/")
4140
@auth.oidc_auth
4241
@before_request
4342
def upperclassmen_total(info=None):
44-
open_packets = Packet.query.filter(Packet.end > datetime.now()).filter(Packet.start < datetime.now()).count()
43+
open_packets = Packet.open_packets()
4544

46-
# TODO: Only count open Packets
47-
upperclassmen = (db.session.query(func.count(case([(UpperSignature.signed == True, 1)])).label("signatures"),
48-
UpperSignature.member)).group_by(UpperSignature.member).all()
49-
upperclassmen += (db.session.query(func.count().label("signatures"),
50-
MiscSignature.member)).group_by(MiscSignature.member).all()
45+
# Sum up the signed packets per upperclassman
46+
upperclassmen = dict()
47+
for packet in open_packets:
48+
for sig in chain(packet.upper_signatures, packet.misc_signatures):
49+
if sig.member not in upperclassmen:
50+
upperclassmen[sig.member] = 0
5151

52-
upperclassmen.sort(reverse=True)
52+
if isinstance(sig, MiscSignature):
53+
upperclassmen[sig.member] += 1
54+
elif sig.signed:
55+
upperclassmen[sig.member] += 1
5356

54-
return render_template("upperclassmen_totals.html", info=info, upperclassmen=upperclassmen,
55-
open_packets=open_packets)
57+
return render_template("upperclassmen_totals.html", info=info, num_open_packets=len(open_packets),
58+
upperclassmen=sorted(upperclassmen.items(), key=itemgetter(1), reverse=True))

packet/templates/upperclassman.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<div class="container main">
55
<div class="row mobile-hide">
66
<div class="col-sm-10">
7-
<h3 class="page-title">{{ get_display_name(member) }}</h3>
7+
<h3 class="page-title">{{ get_csh_name(member) }}</h3>
88
</div>
99
</div>
1010
<div id="eval-blocks">
@@ -21,19 +21,19 @@ <h3 class="page-title">{{ get_display_name(member) }}</h3>
2121
<tbody>
2222
{% for packet in open_packets %}
2323
{# Using inline style because of how themeswitcher loads the css theme :( #}
24-
<tr {% if packet.did_sign %}style="background-color: #4caf505e" {% endif %}>
24+
<tr {% if packet.did_sign_result %}style="background-color: #4caf505e" {% endif %}>
2525
<td>
26-
<a href="/packet/{{ packet.freshman.rit_username }}">
26+
<a href="{{ url_for('freshman_packet', freshman_username=packet.freshman_username, packet_id=packet.id) }}">
2727
<img class="eval-user-img"
28-
alt="{{ packet.freshman.name }}"
28+
alt="{{ get_rit_name(packet.freshman_username) }}"
2929
src="https://www.gravatar.com/avatar/freshmen?d=mp&f=y"
3030
width="25"
31-
height="25"/> {{ packet.freshman.name }}
32-
({{ packet.freshman.rit_username }})
31+
height="25"/>
32+
{{ get_rit_name(packet.freshman_username) }}
3333
</a>
3434
</td>
3535
<td width="15%">
36-
{% if packet.did_sign %}
36+
{% if packet.did_sign_result %}
3737
<i class="fas fa-check"></i>
3838
{% else %}
3939
<i class="fas fa-times"></i>

packet/templates/upperclassmen_totals.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,19 @@ <h3 class="page-title">Upperclassmen Signatures</h3>
2323
</tr>
2424
</thead>
2525
<tbody>
26-
{% for m in upperclassmen %}
26+
{% for member, signed_count in upperclassmen %}
2727
<tr>
2828
<td>
29-
<a href="/member/{{ m.member }}">
29+
<a href="{{ url_for("upperclassman", uid=member) }}">
3030
<img class="eval-user-img"
31-
alt="{{ m.member }}"
32-
src="https://profiles.csh.rit.edu/image/{{ m.member }}"
31+
alt="{{ member }}"
32+
src="https://profiles.csh.rit.edu/image/{{ member }}"
3333
width="25"
34-
height="25"/> {{ get_display_name(m.member) }}
34+
height="25"/> {{ get_csh_name(member) }}
3535
</a>
3636
</td>
3737
<td>
38-
{{ m.signatures }}/{{ open_packets }}
38+
{{ signed_count }}/{{ num_open_packets }}
3939
</td>
4040
</tr>
4141
{% endfor %}

0 commit comments

Comments
 (0)