Skip to content

Commit f1f530d

Browse files
feat: Speedup all the ldap stuff (#581)
* feat: update csh-ldap * feat: member management page goes fastttt * feat: dashboard, housing, and intro evals speeeed * feat: spring evals * feat: attendance pages speedup * fix: member management not working * fix: remove most references to ldap_get_GROUPNAME_group * fix: not all user dict * fix: lint
1 parent 2c88e1d commit f1f530d

15 files changed

Lines changed: 122 additions & 155 deletions

conditional/blueprints/attendance.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import structlog
44
from flask import Blueprint, jsonify, redirect, request
55

6-
from conditional import db, start_of_year, auth
6+
from conditional import db, start_of_year, auth, ldap
77
from conditional.models.models import CommitteeMeeting
88
from conditional.models.models import CurrentCoops
99
from conditional.models.models import FreshmanAccount
@@ -19,8 +19,6 @@
1919
from conditional.models.models import TechnicalSeminar
2020
from conditional.util.auth import get_user
2121
from conditional.util.flask import render_template
22-
from conditional.util.ldap import ldap_get_active_members
23-
from conditional.util.ldap import ldap_get_current_students
2422
from conditional.util.ldap import ldap_get_member
2523
from conditional.util.ldap import ldap_is_eboard
2624
from conditional.util.user_dict import user_dict_is_eboard, user_dict_is_eval_director
@@ -37,7 +35,8 @@ def get_all_members(user_dict=None):
3735
log = logger.new(request=request, auth_dict=user_dict)
3836
log.info('Retrieve Technical Seminar Attendance List')
3937

40-
members = ldap_get_current_students()
38+
members = ldap.get_group_member_attributes(groups=['current_student'],
39+
excluded_groups=[], attributes=['uid', 'displayName'])
4140

4241
named_members = [
4342
{
@@ -50,8 +49,8 @@ def get_all_members(user_dict=None):
5049
for account in members:
5150
named_members.append(
5251
{
53-
'display': account.displayName,
54-
'value': account.uid,
52+
'display': account['displayName'],
53+
'value': account['uid'],
5554
'freshman': False
5655
})
5756

@@ -66,7 +65,8 @@ def get_non_alumni_non_coop(internal=False, user_dict=None):
6665
log.info('Retrieve House Meeting Attendance List')
6766

6867
# Get all active members as a base house meeting attendance.
69-
active_members = ldap_get_active_members()
68+
active_members = ldap.get_group_member_attributes(groups=['active'],
69+
excluded_groups=[], attributes=['uid', 'displayName'])
7070

7171
if datetime.today() < datetime(start_of_year().year, 12, 31):
7272
semester = 'Fall'
@@ -86,14 +86,14 @@ def get_non_alumni_non_coop(internal=False, user_dict=None):
8686
FreshmanAccount.eval_date > datetime.now())]
8787

8888
for account in active_members:
89-
if account.uid in coop_members:
89+
if account['uid'] in coop_members:
9090
# Members who are on co-op don't need to go to house meeting.
9191
continue
9292

9393
eligible_members.append(
9494
{
95-
'display': account.displayName,
96-
'value': account.uid,
95+
'display': account['displayName'],
96+
'value': account['uid'],
9797
'freshman': False
9898
})
9999

@@ -110,7 +110,8 @@ def get_non_alumni(user_dict=None):
110110
log = logger.new(request=request, auth_dict=user_dict)
111111
log.info('Retrieve Committee Meeting Attendance List')
112112

113-
current_students = ldap_get_current_students()
113+
current_students = ldap.get_group_member_attributes(groups=['current_student'],
114+
excluded_groups=[], attributes=['uid', 'displayName'])
114115

115116
eligible_members = [
116117
{
@@ -123,8 +124,8 @@ def get_non_alumni(user_dict=None):
123124
for account in current_students:
124125
eligible_members.append(
125126
{
126-
'display': account.displayName,
127-
'value': account.uid,
127+
'display': account['displayName'],
128+
'value': account['uid'],
128129
'freshman': False
129130
})
130131

conditional/blueprints/dashboard.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
from conditional.util.auth import get_user
1313
from conditional.util.flask import render_template
1414
from conditional.util.housing import get_queue_position
15+
from conditional.util.ldap import ldap_get_active_member_uids
1516
from conditional.util.major_project import get_project_list
16-
from conditional.util.member import gatekeep_values, get_active_members, get_freshman_data, get_voting_members, \
17+
from conditional.util.member import gatekeep_values, get_freshman_data, get_voting_members, \
1718
get_cm, get_hm, is_gatekeep_active, req_cm
1819
from conditional.util.user_dict import user_dict_is_active, user_dict_is_bad_standing, user_dict_is_intromember, \
1920
user_dict_is_onfloor
@@ -49,7 +50,7 @@ def display_dashboard(user_dict=None):
4950
data['voting'] = bool(uid in can_vote)
5051

5152
data['voting_count'] = {"Voting Members": len(can_vote),
52-
"Active Members": len(get_active_members())}
53+
"Active Members": len(ldap_get_active_member_uids())}
5354
# freshman shit
5455
if user_dict_is_intromember(user_dict):
5556
data['freshman'] = get_freshman_data(uid)

conditional/blueprints/gatekeep.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22
from flask import Blueprint, request
33
from sqlalchemy import func
44

5-
from conditional import start_of_year, auth
5+
from conditional import start_of_year, auth, ldap
66
from conditional.models.models import CommitteeMeeting, HouseMeeting, MemberCommitteeAttendance, \
77
MemberSeminarAttendance, MemberSeminarHost, TechnicalSeminar
88
from conditional.models.models import MemberHouseMeetingAttendance
99
from conditional.util.auth import get_user
1010
from conditional.util.flask import render_template
11-
from conditional.util.ldap import ldap_get_active_members
1211
from conditional.util.member import get_semester_info, is_gatekeep_active
1312

1413
gatekeep_bp = Blueprint('gatekeep_bp', __name__)
@@ -89,9 +88,9 @@ def display_spring_evals(internal=False, user_dict=None):
8988
).all()}
9089

9190
gk_members = []
92-
for account in ldap_get_active_members():
93-
uid = account.uid
94-
name = account.cn
91+
for account in ldap.get_group_member_attributes(groups=['active'], excluded_groups=[], attributes=['uid', 'cn']):
92+
uid = account['uid']
93+
name = account['cn']
9594

9695
member_missed_hms = []
9796

conditional/blueprints/housing.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import structlog
22
from flask import Blueprint, request, jsonify
33

4-
from conditional import db, auth
4+
from conditional import db, auth, ldap
55
from conditional.models.models import FreshmanAccount
66
from conditional.models.models import InHousingQueue
77
from conditional.util.auth import get_user
88
from conditional.util.flask import render_template
99
from conditional.util.housing import get_housing_queue
1010
from conditional.util.ldap import ldap_get_current_students
1111
from conditional.util.ldap import ldap_get_member
12-
from conditional.util.ldap import ldap_get_onfloor_members
1312
from conditional.util.ldap import ldap_get_roomnumber
1413
from conditional.util.ldap import ldap_is_eval_director
1514
from conditional.util.ldap import ldap_set_active
@@ -28,20 +27,24 @@ def display_housing(user_dict=None):
2827
log.info('Display Housing Board')
2928

3029
housing = {}
31-
onfloors = ldap_get_onfloor_members()
30+
onfloors = ldap.get_group_member_attributes(groups=['onfloor', 'current_student'],
31+
excluded_groups=[], attributes=['cn', 'roomNumber'])
3232
onfloor_freshmen = FreshmanAccount.query.filter(
3333
FreshmanAccount.room_number is not None
3434
)
3535

3636
room_list = set()
3737

3838
for member in onfloors:
39-
room = ldap_get_roomnumber(member)
39+
if 'roomNumber' not in member:
40+
continue
41+
42+
room = member['roomNumber']
4043
if room in housing and room is not None:
41-
housing[room].append(member.cn)
44+
housing[room].append(member['cn'])
4245
room_list.add(room)
4346
elif room is not None:
44-
housing[room] = [member.cn]
47+
housing[room] = [member['cn']]
4548
room_list.add(room)
4649

4750
for f in onfloor_freshmen:

conditional/blueprints/intro_evals.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from flask import Blueprint, request
33
from sqlalchemy import func
44

5-
from conditional import start_of_year, auth
5+
from conditional import start_of_year, auth, ldap
66
from conditional.models.models import CommitteeMeeting
77
from conditional.models.models import FreshmanAccount
88
from conditional.models.models import FreshmanCommitteeAttendance
@@ -18,7 +18,6 @@
1818
from conditional.models.models import TechnicalSeminar
1919
from conditional.util.auth import get_user
2020
from conditional.util.flask import render_template
21-
from conditional.util.ldap import ldap_get_intro_members
2221
from conditional.util.member import get_semester_info
2322

2423
intro_evals_bp = Blueprint('intro_evals_bp', __name__)
@@ -157,7 +156,7 @@ def display_intro_evals(internal=False, user_dict=None):
157156
log = logger.new(request=request, auth_dict=user_dict)
158157
log.info('Display Intro Evals Listing')
159158

160-
members = ldap_get_intro_members()
159+
members = ldap.get_group_member_attributes(groups=['intromembers'], excluded_groups=[], attributes=['uid', 'cn'])
161160

162161
ie_members = get_intro_members_without_accounts()
163162

@@ -240,8 +239,8 @@ def display_intro_evals(internal=False, user_dict=None):
240239

241240
# freshmen who have accounts
242241
for member in members:
243-
uid = member.uid
244-
name = member.cn
242+
uid = member['uid']
243+
name = member['cn']
245244
freshman_data = FreshmanEvalData.query.filter(
246245
FreshmanEvalData.eval_date >= semester_start,
247246
FreshmanEvalData.uid == uid).first()

conditional/blueprints/member_management.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import structlog
77
from flask import Blueprint, request, jsonify, make_response
88

9-
from conditional import app, get_user, auth, db, start_of_year
9+
from conditional import app, get_user, auth, db, start_of_year, ldap
1010

1111
from conditional.models.models import FreshmanAccount
1212
from conditional.models.models import FreshmanEvalData
@@ -26,7 +26,7 @@
2626

2727
from conditional.blueprints.cache_management import clear_members_cache
2828

29-
from conditional.util.ldap import ldap_is_eval_director
29+
from conditional.util.ldap import ldap_get_active_member_uids, ldap_get_onfloor_member_uids, ldap_is_eval_director
3030
from conditional.util.ldap import ldap_is_active
3131
from conditional.util.ldap import ldap_is_onfloor
3232
from conditional.util.ldap import ldap_set_roomnumber
@@ -42,8 +42,6 @@
4242
from conditional.util.ldap import _ldap_add_member_to_group as ldap_add_member_to_group
4343
from conditional.util.ldap import _ldap_remove_member_from_group as ldap_remove_member_from_group
4444

45-
from conditional.util.member import get_members_info_active_and_onfloor
46-
4745
from conditional.util.flask import render_template
4846
from conditional.models.models import attendance_enum
4947
from conditional.util.user_dict import user_dict_is_active, user_dict_is_bad_standing, user_dict_is_current_student, \
@@ -64,7 +62,20 @@ def display_member_management(user_dict=None):
6462
if not user_dict_is_eval_director(user_dict) and not user_dict_is_financial_director(user_dict):
6563
return "must be eval director", 403
6664

67-
member_list, active_members, onfloor_members = get_members_info_active_and_onfloor()
65+
active_members = set(ldap_get_active_member_uids())
66+
onfloor_members = set(ldap_get_onfloor_member_uids())
67+
68+
member_list = ldap.get_group_member_attributes(groups=["current_student"],
69+
excluded_groups=[], attributes=['uid', 'housingPoints', 'roomNumber', 'cn'])
70+
71+
for member in member_list:
72+
member['name'] = member['cn']
73+
member['active'] = member['uid'] in active_members
74+
member['onfloor'] = member['uid'] in onfloor_members
75+
76+
if 'roomNumber' in member:
77+
member['room'] = member['roomNumber']
78+
6879

6980
freshmen = FreshmanAccount.query
7081
freshmen_list = []

conditional/blueprints/spring_evals.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
from flask import Blueprint, request
33
from sqlalchemy import func
44

5-
from conditional import db, start_of_year, auth
5+
from conditional import db, start_of_year, auth, ldap
66
from conditional.models.models import CommitteeMeeting, CurrentCoops, HouseMeeting, MemberCommitteeAttendance
77
from conditional.models.models import MajorProject, MemberHouseMeetingAttendance, SpringEval
88
from conditional.util.auth import get_user
99
from conditional.util.flask import render_template
10-
from conditional.util.ldap import ldap_get_active_members
1110
from conditional.util.member import req_cm
1211

1312
spring_evals_bp = Blueprint('spring_evals_bp', __name__)
@@ -22,7 +21,7 @@ def display_spring_evals(internal=False, user_dict=None):
2221
log = logger.new(request=request, auth_dict=user_dict)
2322
log.info('Display Membership Evaluations Listing')
2423

25-
active_members = ldap_get_active_members()
24+
active_members = ldap.get_group_member_attributes(groups=['active'], excluded_groups=[], attributes=['uid', 'cn'])
2625

2726
cm_count = dict([tuple(row) for row in MemberCommitteeAttendance.query.join(
2827
CommitteeMeeting,
@@ -78,8 +77,8 @@ def display_spring_evals(internal=False, user_dict=None):
7877

7978
sp_members = []
8079
for account in active_members:
81-
uid = account.uid
82-
name = account.cn
80+
uid = account['uid']
81+
name = account['cn']
8382

8483
spring_entry = SpringEval.query.filter(
8584
SpringEval.date_created >= start_of_year(),

conditional/templates/housing.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ <h3 class="panel-title">Housing Queue
3131
<tbody>
3232
{% for m in queue %}
3333
<tr{% if not m['in_queue'] %} class="disabled"{% endif %}>
34-
<td>{{m['name']}}</td>
35-
<td>{{m['points']}}</td>
34+
<td>{{m['cn']}}</td>
35+
<td>{{m['housingPoints']}}</td>
3636
{% if is_eval_director %}
3737
<td class="col-in-queue"><input type="checkbox" data-uid="{{m['uid']}}"{% if m['in_queue'] %} checked="checked"{% endif %}></td>
3838
{% endif %}

conditional/templates/intro_evals.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,28 +88,28 @@ <h6 class="eval-uid">{{ m['uid'] }}</h6>
8888

8989
</div>
9090
<div class="text-center">
91-
{% if m['technical_seminars_hosted'] < 1 or m['technical_seminars'] < 2 %}
91+
{% if m['technical_seminars_hosted']|length < 1 or m['technical_seminars']|length < 2 %}
9292
<div class="eval-info-label">
9393
<i class="bi bi-x-circle-fill red eval-info-status"></i>Technical Seminars - Hosted
94-
<span class="eval-info-number">{{m['technical_seminars_hosted']}} / 1</span>
94+
<span class="eval-info-number">{{m['technical_seminars_hosted']|length}} / 1</span>
9595
</div>
9696
{% else %}
9797
<div class="eval-info-label">
9898
<i class="bi bi-check-circle-fill green eval-info-status"></i>Technical Seminars - Hosted
99-
<span class="eval-info-number">{{m['technical_seminars_hosted']}} / 1</span>
99+
<span class="eval-info-number">{{m['technical_seminars_hosted']|length}} / 1</span>
100100
</div>
101101
{% endif %}
102102
</div>
103103
<div class="text-center">
104-
{% if m['technical_seminars'] < 2 or m['technical_seminars_hosted'] < 1 %}
104+
{% if m['technical_seminars']|length < 2 or m['technical_seminars_hosted']|length < 1 %}
105105
<div class="eval-info-label">
106106
<i class="bi bi-x-circle-fill red eval-info-status"></i>Technical Seminars - Attended
107-
<span class="eval-info-number">{{m['technical_seminars_attended']}} / 2</span>
107+
<span class="eval-info-number">{{m['technical_seminars_attended']|length}} / 2</span>
108108
</div>
109109
{% else %}
110110
<div class="eval-info-label">
111111
<i class="bi bi-check-circle-fill green eval-info-status"></i>Technical Seminars - Attended
112-
<span class="eval-info-number">{{m['technical_seminars']}} / 2</span>
112+
<span class="eval-info-number">{{m['technical_seminars']|length}} / 2</span>
113113
</div>
114114
{% endif %}
115115
</div>

conditional/templates/member_management.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ <h3 class="panel-title">
168168
{% if m['onfloor'] %} &#10003; {% endif %}
169169
</td>
170170
<td>{% if m['room'] %}{{m['room']}}{% endif %}</td>
171-
<td>{{m['hp']}}</td>
171+
<td>{{m['housingPoints']}}</td>
172172
</tr>
173173
{% endfor %}
174174
</tbody>

0 commit comments

Comments
 (0)