|
1 | 1 | from datetime import datetime |
2 | 2 | from functools import lru_cache |
3 | 3 |
|
4 | | -from sqlalchemy import exc |
| 4 | +from sqlalchemy import exc, false, true |
5 | 5 |
|
6 | 6 | from packet.ldap import ldap_get_member, ldap_is_intromember |
7 | 7 | from .models import Freshman, UpperSignature, FreshSignature, MiscSignature, db, Packet |
@@ -151,23 +151,41 @@ def get_number_signed(freshman_username, separated=False): |
151 | 151 | .first().signatures_received(not separated) |
152 | 152 |
|
153 | 153 |
|
154 | | -@lru_cache(maxsize=512) |
155 | | -def get_number_required(separated=False): |
| 154 | +@lru_cache(maxsize=256) |
| 155 | +def get_number_required_on_floor(separated=False): |
156 | 156 | """ |
157 | 157 | Get the number of required signatures for Packet (not counting on/off-floor status) |
158 | 158 | :param separated: whether or not to separate those by category |
159 | 159 | :return: a map or an integer of total signatures required |
160 | 160 | """ |
161 | | - return db.session.query(Packet) \ |
162 | | - .filter(Packet.start < datetime.now(), Packet.end > datetime.now()).first().signatures_required(not separated) |
| 161 | + return db.session.query(Packet).join(Freshman).filter( |
| 162 | + Packet.start < datetime.now(), |
| 163 | + Packet.end > datetime.now(), |
| 164 | + Freshman.onfloor == true() |
| 165 | + ).first().signatures_required(not separated) |
| 166 | + |
| 167 | + |
| 168 | +@lru_cache(maxsize=256) |
| 169 | +def get_number_required_off_floor(separated=False): |
| 170 | + """ |
| 171 | + Get the number of required signatures for Packet (not counting on/off-floor status) |
| 172 | + :param separated: whether or not to separate those by category |
| 173 | + :return: a map or an integer of total signatures required |
| 174 | + """ |
| 175 | + return db.session.query(Packet).join(Freshman).filter( |
| 176 | + Packet.start < datetime.now(), |
| 177 | + Packet.end > datetime.now(), |
| 178 | + Freshman.onfloor == false() |
| 179 | + ).first().signatures_required(not separated) |
163 | 180 |
|
164 | 181 |
|
165 | 182 | @lru_cache(maxsize=512) |
166 | 183 | def get_upperclassmen_percent(username, onfloor=False): |
167 | | - required = get_number_required(True) |
168 | | - upperclassmen_required = required['upperclassmen'] + required['eboard'] + required['miscellaneous'] |
169 | 184 | if onfloor: |
170 | | - upperclassmen_required -= 1 |
| 185 | + required = get_number_required_on_floor(True) |
| 186 | + else: |
| 187 | + required = get_number_required_off_floor(True) |
| 188 | + upperclassmen_required = required['upperclassmen'] + required['eboard'] + required['miscellaneous'] |
171 | 189 |
|
172 | 190 | signatures = get_number_signed(username, True) |
173 | 191 | upperclassmen_signature = signatures['upperclassmen'] + signatures['eboard'] + signatures['miscellaneous'] |
@@ -208,7 +226,8 @@ def clear_cache(): |
208 | 226 | """ |
209 | 227 | get_upperclassmen_percent.cache_clear() |
210 | 228 | get_number_signed.cache_clear() |
211 | | - get_number_required.cache_clear() |
| 229 | + get_number_required_on_floor.cache_clear() |
| 230 | + get_number_required_off_floor.cache_clear() |
212 | 231 | signed_packets.cache_clear() |
213 | 232 | get_signatures.cache_clear() |
214 | 233 | get_misc_signatures.cache_clear() |
0 commit comments