6
6
7
7
8
8
def 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 ):
17
10
return False
18
11
12
+ packet = get_freshman (freshman_username ).current_packet ()
19
13
upper_signature = UpperSignature .query .filter (UpperSignature .member == signer_username ,
20
14
UpperSignature .packet == packet ).first ()
21
15
fresh_signature = FreshSignature .query .filter (FreshSignature .freshman_username == signer_username ,
@@ -27,25 +21,22 @@ def sign(signer_username, freshman_username):
27
21
upper_signature .signed = True
28
22
elif fresh_signature :
29
23
# 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 )
31
25
if freshman_signer and not freshman_signer .onfloor :
32
26
return False
33
27
fresh_signature .signed = True
34
28
else :
35
29
db .session .add (MiscSignature (packet = packet , member = signer_username ))
36
30
db .session .commit ()
37
31
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 ()
42
33
43
34
return True
44
35
45
36
46
37
@lru_cache (maxsize = 2048 )
47
38
def get_signatures (freshman_username ):
48
- packet = Freshman . query . filter_by ( rit_username = freshman_username ). first (). current_packet ( )
39
+ packet = get_current_packet ( freshman_username )
49
40
eboard = UpperSignature .query .filter_by (packet_id = packet .id , eboard = True ).order_by (UpperSignature .signed .desc ())
50
41
upper_signatures = UpperSignature .query .filter_by (packet_id = packet .id , eboard = False ).order_by (
51
42
UpperSignature .signed .desc ())
@@ -57,14 +48,40 @@ def get_signatures(freshman_username):
57
48
'misc' : misc_signatures }
58
49
59
50
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
+
60
77
@lru_cache (maxsize = 2048 )
61
78
def 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 ()
63
80
64
81
65
- @lru_cache (maxsize = 4096 )
82
+ @lru_cache (maxsize = 2048 )
66
83
def 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 ()
68
85
69
86
70
87
@lru_cache (maxsize = 2048 )
@@ -78,3 +95,27 @@ def get_upperclassmen_percent(uid):
78
95
upperclassmen_signature = sum (upperclassmen_signature .values ())
79
96
80
97
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