Skip to content

Commit daf43af

Browse files
committed
More spring evals speedup
1 parent 2111455 commit daf43af

File tree

3 files changed

+33
-13
lines changed

3 files changed

+33
-13
lines changed

conditional/blueprints/dashboard.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def display_dashboard(user_dict=None):
5757
spring = {}
5858
c_meetings = get_cm(user_dict['account'])
5959
spring['committee_meetings'] = len(c_meetings)
60-
spring['req_meetings'] = req_cm(user_dict['account'])
60+
spring['req_meetings'] = req_cm(user_dict['account'].uid)
6161
h_meetings = [(m.meeting_id, m.attendance_status) for m in get_hm(user_dict['account'])]
6262
spring['hm_missed'] = len([h for h in h_meetings if h[1] == "Absent"])
6363
eval_entry = SpringEval.query.filter(SpringEval.uid == user_dict['account'].uid,

conditional/blueprints/spring_evals.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from time import perf_counter
12
import structlog
23
from flask import Blueprint, request
34
from sqlalchemy import func
@@ -58,6 +59,12 @@ def display_spring_evals(internal=False, user_dict=None):
5859
MajorProject.date >= start_of_year()
5960
).all()
6061

62+
coop_members = CurrentCoops.query.filter(
63+
CurrentCoops.date_created >= start_of_year()
64+
).with_entities(
65+
func.array_agg(CurrentCoops.uid)
66+
).scalar()
67+
6168
major_projects = {}
6269

6370
for project in major_project_query:
@@ -73,6 +80,8 @@ def display_spring_evals(internal=False, user_dict=None):
7380
sp_members = []
7481
for account in active_members:
7582
uid = account.uid
83+
name = account.cn
84+
7685
spring_entry = SpringEval.query.filter(
7786
SpringEval.date_created > start_of_year(),
7887
SpringEval.uid == uid,
@@ -100,18 +109,23 @@ def display_spring_evals(internal=False, user_dict=None):
100109
func.array_agg(HouseMeeting.date)
101110
).scalar()
102111

112+
cm_attended_count = cm_count.get(uid, 0)
113+
member_major_projects = major_projects.get(uid, [])
114+
115+
passed_mps = [project for project in member_major_projects if project['status'] == 'Passed']
116+
117+
req_cm_count = req_cm(uid, coop_members)
118+
103119
member = {
104-
'name': account.cn,
120+
'name': name,
105121
'uid': uid,
106122
'status': spring_entry.status,
107-
'committee_meetings': cm_count.get(uid, 0),
108-
'req_meetings': req_cm(account),
123+
'committee_meetings': cm_attended_count,
124+
'req_meetings': req_cm_count,
109125
'house_meetings_missed': member_missed_hms,
110-
'major_projects': major_projects.get(uid, [])
126+
'major_projects': member_major_projects
111127
}
112128

113-
passed_mps = [project for project in member['major_projects'] if project['status'] == 'Passed']
114-
115129
member['major_projects_len'] = len(member['major_projects'])
116130
member['major_projects_passed'] = passed_mps
117131
member['major_projects_passed_len'] = len(member['major_projects_passed'])

conditional/util/member.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,20 @@ def get_hm(member, only_absent=False):
126126
return h_meetings
127127

128128

129-
@service_cache(maxsize=128)
130-
def req_cm(member):
129+
# @service_cache(maxsize=128)
130+
def req_cm(uid, members_on_coop = None):
131131
# Get the number of required committee meetings based on if the member
132132
# is going on co-op in the current operating session.
133-
co_op = CurrentCoops.query.filter(
134-
CurrentCoops.uid == member.uid,
135-
CurrentCoops.date_created > start_of_year()).first()
136-
if co_op:
133+
on_coop = False
134+
if members_on_coop:
135+
on_coop = uid in members_on_coop
136+
else:
137+
co_op = CurrentCoops.query.filter(
138+
CurrentCoops.uid == uid,
139+
CurrentCoops.date_created > start_of_year()).first()
140+
if co_op:
141+
on_coop = True
142+
if on_coop:
137143
return 15
138144
return 30
139145

0 commit comments

Comments
 (0)