Skip to content

Commit

Permalink
Caching and cleaning functions
Browse files Browse the repository at this point in the history
  • Loading branch information
devinmatte committed Sep 3, 2018
1 parent d554747 commit 2ddcb1d
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 17 deletions.
3 changes: 3 additions & 0 deletions packet/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"""

from datetime import datetime
from functools import lru_cache

from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, Boolean
from sqlalchemy.orm import relationship

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

@lru_cache(maxsize=1024)
def signatures_required(self):
eboard = UpperSignature.query.filter_by(eboard=True).count()
return {'eboard': eboard,
Expand Down
15 changes: 15 additions & 0 deletions packet/packet.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import copy
from functools import lru_cache

from packet.ldap import ldap_get_member, ldap_is_intromember
Expand Down Expand Up @@ -37,6 +38,7 @@ def sign(signer_username, freshman_username):
# Clear functions that read signatures cache
get_number_signed.cache_clear()
get_signatures.cache_clear()
get_upperclassmen_percent.cache_clear()

return True

Expand All @@ -63,3 +65,16 @@ def get_number_signed(freshman_username):
@lru_cache(maxsize=4096)
def get_number_required(freshman_username):
return Freshman.query.filter_by(rit_username=freshman_username).first().current_packet().signatures_required()


@lru_cache(maxsize=2048)
def get_upperclassmen_percent(uid):
upperclassmen_required = copy.deepcopy(get_number_required(uid))
del upperclassmen_required['freshmen']
upperclassmen_required = sum(upperclassmen_required.values())

upperclassmen_signature = copy.deepcopy(get_number_signed(uid))
del upperclassmen_signature['freshmen']
upperclassmen_signature = sum(upperclassmen_signature.values())

return upperclassmen_signature / upperclassmen_required * 100
25 changes: 8 additions & 17 deletions packet/routes/shared.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from packet import auth, app
from packet.models import Freshman, Packet
from packet.packet import get_signatures, get_number_required, get_number_signed
from packet.packet import get_signatures, get_number_required, get_number_signed, get_upperclassmen_percent
from packet.utils import before_request, signed_packet


Expand All @@ -14,21 +14,12 @@
@before_request
def freshman_packet(uid, info=None):
freshman = Freshman.query.filter_by(rit_username=uid).first()
upperclassmen_percent = get_upperclassmen_percent(uid)
signatures = get_signatures(uid)
signed_dict = get_number_signed(uid)
required = sum(get_number_required(uid).values())
signed = sum(signed_dict.values())

upperclassmen_required = get_number_required(uid)
del upperclassmen_required['freshmen']
upperclassmen_required = sum(upperclassmen_required.values())

upperclassmen_signature = get_number_signed(uid)
del upperclassmen_signature['freshmen']
upperclassmen_signature = sum(upperclassmen_signature.values())

upperclassmen_percent = upperclassmen_signature / upperclassmen_required * 100

packet_signed = signed_packet(info['uid'], uid)
return render_template("packet.html", info=info, signatures=signatures, uid=uid, required=required, signed=signed,
freshman=freshman, packet_signed=packet_signed, upperclassmen_percent=upperclassmen_percent,
Expand All @@ -39,12 +30,12 @@ def freshman_packet(uid, info=None):
@auth.oidc_auth
@before_request
def packets(info=None):
packets = Packet.query.filter(Packet.end > datetime.now()).filter(Packet.start < datetime.now()).all()
open_packets = Packet.query.filter(Packet.end > datetime.now()).filter(Packet.start < datetime.now()).all()

# Add the did_sign flag
if app.config["REALM"] == "csh":
# User is an upperclassman
for packet in packets:
for packet in open_packets:
packet.did_sign = False
packet.total_signatures = sum(packet.signatures_received().values())
packet.required_signatures = sum(packet.signatures_required().values())
Expand All @@ -55,7 +46,7 @@ def packets(info=None):
break
else:
# User is a freshman
for packet in packets:
for packet in open_packets:
packet.did_sign = False
packet.total_signatures = sum(packet.signatures_received().values())
packet.required_signatures = sum(packet.signatures_required().values())
Expand All @@ -65,7 +56,7 @@ def packets(info=None):
packet.did_sign = True
break

packets.sort(key=lambda x: sum(x.signatures_received().values()), reverse=True)
packets.sort(key=lambda x: x.did_sign, reverse=True)
open_packets.sort(key=lambda x: sum(x.signatures_received().values()), reverse=True)
open_packets.sort(key=lambda x: x.did_sign, reverse=True)

return render_template("active_packets.html", info=info, packets=packets)
return render_template("active_packets.html", info=info, packets=open_packets)

0 comments on commit 2ddcb1d

Please sign in to comment.