66
77
88def sign (signer_username , freshman_username ):
9- if signer_username == freshman_username :
10- return False
11-
12- freshman_signed = Freshman .query .filter_by (rit_username = freshman_username ).first ()
13- if freshman_signed is None :
14- return False
15- packet = freshman_signed .current_packet ()
16- if packet is None or not packet .is_open ():
9+ if not valid_signature (signer_username , freshman_username ):
1710 return False
1811
12+ packet = get_freshman (freshman_username ).current_packet ()
1913 upper_signature = UpperSignature .query .filter (UpperSignature .member == signer_username ,
2014 UpperSignature .packet == packet ).first ()
2115 fresh_signature = FreshSignature .query .filter (FreshSignature .freshman_username == signer_username ,
@@ -27,25 +21,22 @@ def sign(signer_username, freshman_username):
2721 upper_signature .signed = True
2822 elif fresh_signature :
2923 # Make sure only on floor freshmen can sign packets
30- freshman_signer = Freshman . query . filter_by ( rit_username = signer_username ). first ( )
24+ freshman_signer = get_freshman ( signer_username )
3125 if freshman_signer and not freshman_signer .onfloor :
3226 return False
3327 fresh_signature .signed = True
3428 else :
3529 db .session .add (MiscSignature (packet = packet , member = signer_username ))
3630 db .session .commit ()
3731
38- # Clear functions that read signatures cache
39- get_number_signed .cache_clear ()
40- get_signatures .cache_clear ()
41- get_upperclassmen_percent .cache_clear ()
32+ clear_cache ()
4233
4334 return True
4435
4536
4637@lru_cache (maxsize = 2048 )
4738def get_signatures (freshman_username ):
48- packet = Freshman . query . filter_by ( rit_username = freshman_username ). first (). current_packet ( )
39+ packet = get_current_packet ( freshman_username )
4940 eboard = UpperSignature .query .filter_by (packet_id = packet .id , eboard = True ).order_by (UpperSignature .signed .desc ())
5041 upper_signatures = UpperSignature .query .filter_by (packet_id = packet .id , eboard = False ).order_by (
5142 UpperSignature .signed .desc ())
@@ -57,14 +48,40 @@ def get_signatures(freshman_username):
5748 'misc' : misc_signatures }
5849
5950
51+ @lru_cache (maxsize = 2048 )
52+ def valid_signature (signer_username , freshman_username ):
53+ if signer_username == freshman_username :
54+ return False
55+
56+ freshman_signed = get_freshman (freshman_username )
57+ if freshman_signed is None :
58+ return False
59+
60+ packet = freshman_signed .current_packet ()
61+ if packet is None or not packet .is_open ():
62+ return False
63+
64+ return True
65+
66+
67+ @lru_cache (maxsize = 512 )
68+ def get_freshman (freshman_username ):
69+ return Freshman .query .filter_by (rit_username = freshman_username ).first ()
70+
71+
72+ @lru_cache (maxsize = 512 )
73+ def get_current_packet (freshman_username ):
74+ return get_freshman (freshman_username ).current_packet ()
75+
76+
6077@lru_cache (maxsize = 2048 )
6178def get_number_signed (freshman_username ):
62- return Freshman . query . filter_by ( rit_username = freshman_username ). first (). current_packet ( ).signatures_received ()
79+ return get_current_packet ( freshman_username ).signatures_received ()
6380
6481
65- @lru_cache (maxsize = 4096 )
82+ @lru_cache (maxsize = 2048 )
6683def get_number_required (freshman_username ):
67- return Freshman . query . filter_by ( rit_username = freshman_username ). first (). current_packet ( ).signatures_required ()
84+ return get_current_packet ( freshman_username ).signatures_required ()
6885
6986
7087@lru_cache (maxsize = 2048 )
@@ -78,3 +95,27 @@ def get_upperclassmen_percent(uid):
7895 upperclassmen_signature = sum (upperclassmen_signature .values ())
7996
8097 return upperclassmen_signature / upperclassmen_required * 100
98+
99+
100+ @lru_cache (maxsize = 512 )
101+ def signed_packets (member ):
102+ # Checks whether or not member is a freshman
103+ if get_freshman (member ) is not None :
104+ return FreshSignature .query .filter_by (freshman_username = member , signed = True ).all ()
105+ # Checks whether or not member is an upperclassman
106+ if UpperSignature .query .filter_by (member = member ).first () is not None :
107+ return UpperSignature .query .filter_by (member = member , signed = True ).all ()
108+ return MiscSignature .query .filter_by (member = member ).all ()
109+
110+
111+ def clear_cache ():
112+ """
113+ Clear cache of all frequently changing data
114+ """
115+ get_number_signed .cache_clear ()
116+ get_signatures .cache_clear ()
117+ get_number_required .cache_clear ()
118+ get_upperclassmen_percent .cache_clear ()
119+ get_freshman .cache_clear ()
120+ get_current_packet .cache_clear ()
121+ signed_packets .cache_clear ()
0 commit comments