Skip to content

Commit 2ddcb1d

Browse files
committed
Caching and cleaning functions
1 parent d554747 commit 2ddcb1d

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

packet/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"""
44

55
from datetime import datetime
6+
from functools import lru_cache
7+
68
from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, Boolean
79
from sqlalchemy.orm import relationship
810

@@ -47,6 +49,7 @@ class Packet(db.Model):
4749
def is_open(self):
4850
return self.start < datetime.now() < self.end
4951

52+
@lru_cache(maxsize=1024)
5053
def signatures_required(self):
5154
eboard = UpperSignature.query.filter_by(eboard=True).count()
5255
return {'eboard': eboard,

packet/packet.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import copy
12
from functools import lru_cache
23

34
from packet.ldap import ldap_get_member, ldap_is_intromember
@@ -37,6 +38,7 @@ def sign(signer_username, freshman_username):
3738
# Clear functions that read signatures cache
3839
get_number_signed.cache_clear()
3940
get_signatures.cache_clear()
41+
get_upperclassmen_percent.cache_clear()
4042

4143
return True
4244

@@ -63,3 +65,16 @@ def get_number_signed(freshman_username):
6365
@lru_cache(maxsize=4096)
6466
def get_number_required(freshman_username):
6567
return Freshman.query.filter_by(rit_username=freshman_username).first().current_packet().signatures_required()
68+
69+
70+
@lru_cache(maxsize=2048)
71+
def get_upperclassmen_percent(uid):
72+
upperclassmen_required = copy.deepcopy(get_number_required(uid))
73+
del upperclassmen_required['freshmen']
74+
upperclassmen_required = sum(upperclassmen_required.values())
75+
76+
upperclassmen_signature = copy.deepcopy(get_number_signed(uid))
77+
del upperclassmen_signature['freshmen']
78+
upperclassmen_signature = sum(upperclassmen_signature.values())
79+
80+
return upperclassmen_signature / upperclassmen_required * 100

packet/routes/shared.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from packet import auth, app
77
from packet.models import Freshman, Packet
8-
from packet.packet import get_signatures, get_number_required, get_number_signed
8+
from packet.packet import get_signatures, get_number_required, get_number_signed, get_upperclassmen_percent
99
from packet.utils import before_request, signed_packet
1010

1111

@@ -14,21 +14,12 @@
1414
@before_request
1515
def freshman_packet(uid, info=None):
1616
freshman = Freshman.query.filter_by(rit_username=uid).first()
17+
upperclassmen_percent = get_upperclassmen_percent(uid)
1718
signatures = get_signatures(uid)
1819
signed_dict = get_number_signed(uid)
1920
required = sum(get_number_required(uid).values())
2021
signed = sum(signed_dict.values())
2122

22-
upperclassmen_required = get_number_required(uid)
23-
del upperclassmen_required['freshmen']
24-
upperclassmen_required = sum(upperclassmen_required.values())
25-
26-
upperclassmen_signature = get_number_signed(uid)
27-
del upperclassmen_signature['freshmen']
28-
upperclassmen_signature = sum(upperclassmen_signature.values())
29-
30-
upperclassmen_percent = upperclassmen_signature / upperclassmen_required * 100
31-
3223
packet_signed = signed_packet(info['uid'], uid)
3324
return render_template("packet.html", info=info, signatures=signatures, uid=uid, required=required, signed=signed,
3425
freshman=freshman, packet_signed=packet_signed, upperclassmen_percent=upperclassmen_percent,
@@ -39,12 +30,12 @@ def freshman_packet(uid, info=None):
3930
@auth.oidc_auth
4031
@before_request
4132
def packets(info=None):
42-
packets = Packet.query.filter(Packet.end > datetime.now()).filter(Packet.start < datetime.now()).all()
33+
open_packets = Packet.query.filter(Packet.end > datetime.now()).filter(Packet.start < datetime.now()).all()
4334

4435
# Add the did_sign flag
4536
if app.config["REALM"] == "csh":
4637
# User is an upperclassman
47-
for packet in packets:
38+
for packet in open_packets:
4839
packet.did_sign = False
4940
packet.total_signatures = sum(packet.signatures_received().values())
5041
packet.required_signatures = sum(packet.signatures_required().values())
@@ -55,7 +46,7 @@ def packets(info=None):
5546
break
5647
else:
5748
# User is a freshman
58-
for packet in packets:
49+
for packet in open_packets:
5950
packet.did_sign = False
6051
packet.total_signatures = sum(packet.signatures_received().values())
6152
packet.required_signatures = sum(packet.signatures_required().values())
@@ -65,7 +56,7 @@ def packets(info=None):
6556
packet.did_sign = True
6657
break
6758

68-
packets.sort(key=lambda x: sum(x.signatures_received().values()), reverse=True)
69-
packets.sort(key=lambda x: x.did_sign, reverse=True)
59+
open_packets.sort(key=lambda x: sum(x.signatures_received().values()), reverse=True)
60+
open_packets.sort(key=lambda x: x.did_sign, reverse=True)
7061

71-
return render_template("active_packets.html", info=info, packets=packets)
62+
return render_template("active_packets.html", info=info, packets=open_packets)

0 commit comments

Comments
 (0)