Skip to content

Commit 74f4cb4

Browse files
committed
Aggressive Caching
1 parent 8d8830b commit 74f4cb4

File tree

3 files changed

+20
-88
lines changed

3 files changed

+20
-88
lines changed

packet/ldap.py

Lines changed: 13 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
from functools import lru_cache
22

3-
import ldap
4-
53
from packet import _ldap
64

75

6+
@lru_cache(maxsize=4096)
87
def _ldap_get_group_members(group):
98
return _ldap.get_group(group).get_members()
109

1110

11+
@lru_cache(maxsize=4096)
1212
def _ldap_is_member_of_group(member, group):
1313
group_list = member.get("memberOf")
1414
for group_dn in group_list:
@@ -17,7 +17,7 @@ def _ldap_is_member_of_group(member, group):
1717
return False
1818

1919

20-
@lru_cache(maxsize=1024)
20+
@lru_cache(maxsize=2048)
2121
def _ldap_is_member_of_directorship(account, directorship):
2222
directors = _ldap.get_directorship_heads(directorship)
2323
for director in directors:
@@ -48,16 +48,6 @@ def ldap_get_onfloor_members():
4848
return _ldap_get_group_members("onfloor")
4949

5050

51-
@lru_cache(maxsize=1024)
52-
def ldap_get_current_students():
53-
return _ldap_get_group_members("current_student")
54-
55-
56-
@lru_cache(maxsize=1024)
57-
def ldap_get_all_members():
58-
return _ldap_get_group_members("member")
59-
60-
6151
@lru_cache(maxsize=1024)
6252
def ldap_get_groups(account):
6353
group_list = account.get("memberOf")
@@ -68,17 +58,6 @@ def ldap_get_groups(account):
6858
return groups
6959

7060

71-
@lru_cache(maxsize=1024)
72-
def ldap_get_group_desc(group):
73-
con = _ldap.get_con()
74-
results = con.search_s(
75-
"cn=groups,cn=accounts,dc=csh,dc=rit,dc=edu",
76-
ldap.SCOPE_SUBTREE,
77-
"(cn=%s)" % group,
78-
['description'])
79-
return results[0][1]['description'][0].decode('utf-8')
80-
81-
8261
@lru_cache(maxsize=1024)
8362
def ldap_get_eboard():
8463
members = _ldap_get_group_members("eboard-chairman") + _ldap_get_group_members("eboard-evaluations"
@@ -90,6 +69,7 @@ def ldap_get_eboard():
9069
return members
9170

9271

72+
@lru_cache(maxsize=2048)
9373
def ldap_get_live_onfloor():
9474
"""
9575
:return: All upperclassmen who live on floor and are not eboard
@@ -101,67 +81,46 @@ def ldap_get_live_onfloor():
10181
members.append(member)
10282
return members
10383

84+
10485
# Status checkers
10586

87+
@lru_cache(maxsize=1024)
10688
def ldap_is_active(account):
10789
return _ldap_is_member_of_group(account, 'active')
10890

10991

92+
@lru_cache(maxsize=1024)
11093
def ldap_is_alumni(account):
11194
# If the user is not active, they are an alumni.
11295
return not _ldap_is_member_of_group(account, 'active')
11396

11497

98+
@lru_cache(maxsize=1024)
11599
def ldap_is_eboard(account):
116100
return _ldap_is_member_of_group(account, 'eboard')
117101

118102

103+
@lru_cache(maxsize=1024)
119104
def ldap_is_rtp(account):
120105
return _ldap_is_member_of_group(account, 'rtp')
121106

122107

108+
@lru_cache(maxsize=1024)
123109
def ldap_is_intromember(account):
124110
return _ldap_is_member_of_group(account, 'intromembers')
125111

126112

113+
@lru_cache(maxsize=1024)
127114
def ldap_is_onfloor(account):
128115
return _ldap_is_member_of_group(account, 'onfloor')
129116

130117

118+
@lru_cache(maxsize=1024)
131119
def ldap_is_current_student(account):
132120
return _ldap_is_member_of_group(account, 'current_student')
133121

134122

135-
# Directorships
136-
137-
def ldap_is_financial_director(account):
138-
return _ldap_is_member_of_directorship(account, 'financial')
139-
140-
141-
def ldap_is_eval_director(account):
142-
return _ldap_is_member_of_directorship(account, 'evaluations')
143-
144-
145-
def ldap_is_chairman(account):
146-
return _ldap_is_member_of_directorship(account, 'chairman')
147-
148-
149-
def ldap_is_history(account):
150-
return _ldap_is_member_of_directorship(account, 'history')
151-
152-
153-
def ldap_is_imps(account):
154-
return _ldap_is_member_of_directorship(account, 'imps')
155-
156-
157-
def ldap_is_social(account):
158-
return _ldap_is_member_of_directorship(account, 'Social')
159-
160-
161-
def ldap_is_rd(account):
162-
return _ldap_is_member_of_directorship(account, 'research')
163-
164-
123+
@lru_cache(maxsize=1024)
165124
def ldap_get_roomnumber(account):
166125
try:
167126
return account.roomNumber

packet/packet.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from functools import lru_cache
2+
13
from packet.ldap import ldap_get_member, ldap_is_intromember
24
from .models import Freshman, UpperSignature, FreshSignature, MiscSignature, db
35

@@ -48,9 +50,11 @@ def get_signatures(freshman_username):
4850
'misc': misc_signatures}
4951

5052

53+
@lru_cache(maxsize=512)
5154
def get_number_signed(freshman_username):
5255
return Freshman.query.filter_by(rit_username=freshman_username).first().current_packet().signatures_received()
5356

5457

58+
@lru_cache(maxsize=4096)
5559
def get_number_required(freshman_username):
5660
return Freshman.query.filter_by(rit_username=freshman_username).first().current_packet().signatures_required()

packet/utils.py

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -45,55 +45,22 @@ def wrapped_function(*args, **kwargs):
4545
return wrapped_function
4646

4747

48+
@lru_cache(maxsize=2048)
4849
def get_member_info(uid):
4950
account = ldap_get_member(uid)
5051

5152
member_info = {
5253
"user_obj": account,
5354
"group_list": ldap_get_groups(account),
5455
"uid": account.uid,
55-
"ritUid": parse_rit_uid(account.ritDn),
5656
"name": account.cn,
5757
"active": ldap_is_active(account),
5858
"onfloor": ldap_is_onfloor(account),
5959
"room": ldap_get_roomnumber(account),
60-
"hp": account.housingPoints,
61-
"plex": account.plex,
62-
"rn": ldap_get_roomnumber(account),
63-
"birthday": parse_date(account.birthday),
64-
"memberSince": parse_date(account.memberSince),
65-
"lastlogin": parse_date(account.krblastsuccessfulauth),
66-
"year": parse_account_year(account.memberSince)
6760
}
6861
return member_info
6962

7063

71-
def parse_date(date):
72-
if date:
73-
year = date[0:4]
74-
month = date[4:6]
75-
day = date[6:8]
76-
return month + "-" + day + "-" + year
77-
return False
78-
79-
80-
def parse_rit_uid(dn):
81-
if dn:
82-
return dn.split(",")[0][4:]
83-
84-
return None
85-
86-
87-
def parse_account_year(date):
88-
if date:
89-
year = int(date[0:4])
90-
month = int(date[4:6])
91-
if month <= 8:
92-
year = year - 1
93-
return year
94-
return None
95-
96-
9764
@lru_cache(maxsize=2048)
9865
def is_on_floor(uid):
9966
return (Freshman.query.filter_by(rit_username=uid)).first().onfloor
@@ -118,13 +85,15 @@ def signed_packet(signer, freshman):
11885
@app.context_processor
11986
def utility_processor():
12087
# pylint: disable=bare-except
88+
@lru_cache(maxsize=4096)
12189
def get_display_name(username):
12290
try:
12391
member = ldap_get_member(username)
12492
return member.cn + " (" + member.uid + ")"
12593
except:
12694
return username
12795

96+
@lru_cache(maxsize=4096)
12897
def get_freshman_name(username):
12998
try:
13099
freshman = Freshman.query.filter_by(rit_username=username).first()

0 commit comments

Comments
 (0)