Skip to content

Commit 0cc3bae

Browse files
authored
Merge pull request #46 from ComputerScienceHouse/develop
Packet 3.0.1
2 parents f32edd7 + d027404 commit 0cc3bae

File tree

16 files changed

+125
-177
lines changed

16 files changed

+125
-177
lines changed
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
.sign-packet {
22
float: right;
33
text-align: right;
4-
}
4+
}
5+
6+
.sign-button {
7+
float: right;
8+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.signature-count {
2+
float: right;
3+
}

frontend/scss/packet.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ $csh-pink: #b0197e;
55
@import "components/switches";
66
@import "components/datatables";
77
@import "components/buttons";
8+
@import "components/signatures";

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"title": "CSH Packet",
33
"name": "csh-packet",
4-
"version": "3.0.0",
4+
"version": "3.0.1",
55
"description": "A webpacket for CSH",
66
"bugs": {
77
"url": "https://github.com/ComputerScienceHouse/packet/issues",

packet/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
from flask_pyoidc.flask_pyoidc import OIDCAuthentication
1111
from flask_sqlalchemy import SQLAlchemy
1212

13+
from ._version import __version__
14+
1315
app = Flask(__name__)
1416

1517
# Load default configuration and any environment variable overrides
@@ -19,6 +21,8 @@
1921
if os.path.exists(os.path.join(os.getcwd(), "config.py")):
2022
app.config.from_pyfile(os.path.join(os.getcwd(), "config.py"))
2123

24+
app.config["VERSION"] = __version__
25+
2226
# Initialize the extensions
2327
db = SQLAlchemy(app)
2428
migrate = Migrate(app, db)

packet/_version.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
__version__ = "3.0.1"

packet/ldap.py

Lines changed: 17 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
from functools import lru_cache
22

3-
import ldap
4-
53
from packet import _ldap
64

75

6+
@lru_cache(maxsize=1024)
87
def _ldap_get_group_members(group):
98
return _ldap.get_group(group).get_members()
109

1110

11+
@lru_cache(maxsize=2048)
1212
def _ldap_is_member_of_group(member, group):
1313
group_list = member.get("memberOf")
1414
for group_dn in group_list:
@@ -48,16 +48,6 @@ def ldap_get_onfloor_members():
4848
return _ldap_get_group_members("onfloor")
4949

5050

51-
@lru_cache(maxsize=1024)
52-
def ldap_get_current_students():
53-
return _ldap_get_group_members("current_student")
54-
55-
56-
@lru_cache(maxsize=1024)
57-
def ldap_get_all_members():
58-
return _ldap_get_group_members("member")
59-
60-
6151
@lru_cache(maxsize=1024)
6252
def ldap_get_groups(account):
6353
group_list = account.get("memberOf")
@@ -68,17 +58,6 @@ def ldap_get_groups(account):
6858
return groups
6959

7060

71-
@lru_cache(maxsize=1024)
72-
def ldap_get_group_desc(group):
73-
con = _ldap.get_con()
74-
results = con.search_s(
75-
"cn=groups,cn=accounts,dc=csh,dc=rit,dc=edu",
76-
ldap.SCOPE_SUBTREE,
77-
"(cn=%s)" % group,
78-
['description'])
79-
return results[0][1]['description'][0].decode('utf-8')
80-
81-
8261
@lru_cache(maxsize=1024)
8362
def ldap_get_eboard():
8463
members = _ldap_get_group_members("eboard-chairman") + _ldap_get_group_members("eboard-evaluations"
@@ -90,6 +69,7 @@ def ldap_get_eboard():
9069
return members
9170

9271

72+
@lru_cache(maxsize=2048)
9373
def ldap_get_live_onfloor():
9474
"""
9575
:return: All upperclassmen who live on floor and are not eboard
@@ -101,67 +81,51 @@ def ldap_get_live_onfloor():
10181
members.append(member)
10282
return members
10383

84+
10485
# Status checkers
10586

87+
@lru_cache(maxsize=1024)
88+
def ldap_is_eval_director(account):
89+
return _ldap_is_member_of_directorship(account, 'evaluations')
90+
91+
92+
@lru_cache(maxsize=1024)
10693
def ldap_is_active(account):
10794
return _ldap_is_member_of_group(account, 'active')
10895

10996

97+
@lru_cache(maxsize=1024)
11098
def ldap_is_alumni(account):
11199
# If the user is not active, they are an alumni.
112100
return not _ldap_is_member_of_group(account, 'active')
113101

114102

103+
@lru_cache(maxsize=1024)
115104
def ldap_is_eboard(account):
116105
return _ldap_is_member_of_group(account, 'eboard')
117106

118107

108+
@lru_cache(maxsize=1024)
119109
def ldap_is_rtp(account):
120110
return _ldap_is_member_of_group(account, 'rtp')
121111

122112

113+
@lru_cache(maxsize=1024)
123114
def ldap_is_intromember(account):
124115
return _ldap_is_member_of_group(account, 'intromembers')
125116

126117

118+
@lru_cache(maxsize=1024)
127119
def ldap_is_onfloor(account):
128120
return _ldap_is_member_of_group(account, 'onfloor')
129121

130122

123+
@lru_cache(maxsize=1024)
131124
def ldap_is_current_student(account):
132125
return _ldap_is_member_of_group(account, 'current_student')
133126

134127

135-
# Directorships
136-
137-
def ldap_is_financial_director(account):
138-
return _ldap_is_member_of_directorship(account, 'financial')
139-
140-
141-
def ldap_is_eval_director(account):
142-
return _ldap_is_member_of_directorship(account, 'evaluations')
143-
144-
145-
def ldap_is_chairman(account):
146-
return _ldap_is_member_of_directorship(account, 'chairman')
147-
148-
149-
def ldap_is_history(account):
150-
return _ldap_is_member_of_directorship(account, 'history')
151-
152-
153-
def ldap_is_imps(account):
154-
return _ldap_is_member_of_directorship(account, 'imps')
155-
156-
157-
def ldap_is_social(account):
158-
return _ldap_is_member_of_directorship(account, 'Social')
159-
160-
161-
def ldap_is_rd(account):
162-
return _ldap_is_member_of_directorship(account, 'research')
163-
164-
128+
@lru_cache(maxsize=1024)
165129
def ldap_get_roomnumber(account):
166130
try:
167131
return account.roomNumber

packet/member.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33

44
def signed_packets(member):
5-
is_freshman = Freshman.query.filter_by(rit_username=member).first() is not None
6-
if is_freshman:
5+
# Checks whether or not member is a freshman
6+
if Freshman.query.filter_by(rit_username=member).first() is not None:
77
return FreshSignature.query.filter_by(freshman_username=member, signed=True).all()
8-
is_upper = UpperSignature.query.filter_by(member=member).first() is not None
9-
if is_upper:
8+
# Checks whether or not member is an upperclassman
9+
if UpperSignature.query.filter_by(member=member).first() is not None:
1010
return UpperSignature.query.filter_by(member=member, signed=True).all()
1111
return MiscSignature.query.filter_by(member=member).all()

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: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import copy
2+
from functools import lru_cache
3+
4+
from packet.ldap import ldap_get_member, ldap_is_intromember
15
from .models import Freshman, UpperSignature, FreshSignature, MiscSignature, db
26

37

@@ -9,33 +13,37 @@ def sign(signer_username, freshman_username):
913
if freshman_signed is None:
1014
return False
1115
packet = freshman_signed.current_packet()
12-
if packet is None:
13-
return False
14-
if not packet.is_open():
16+
if packet is None or not packet.is_open():
1517
return False
1618

17-
# Make sure only on floor freshmen can sign packets
18-
freshman_signer = Freshman.query.filter_by(rit_username=signer_username).first()
19-
if freshman_signer:
20-
if not freshman_signer.onfloor:
21-
return False
22-
2319
upper_signature = UpperSignature.query.filter(UpperSignature.member == signer_username,
2420
UpperSignature.packet == packet).first()
2521
fresh_signature = FreshSignature.query.filter(FreshSignature.freshman_username == signer_username,
2622
FreshSignature.packet == packet).first()
2723

2824
if upper_signature:
25+
if ldap_is_intromember(ldap_get_member(signer_username)):
26+
return False
2927
upper_signature.signed = True
3028
elif fresh_signature:
29+
# Make sure only on floor freshmen can sign packets
30+
freshman_signer = Freshman.query.filter_by(rit_username=signer_username).first()
31+
if freshman_signer and not freshman_signer.onfloor:
32+
return False
3133
fresh_signature.signed = True
3234
else:
3335
db.session.add(MiscSignature(packet=packet, member=signer_username))
3436
db.session.commit()
3537

38+
# Clear functions that read signatures cache
39+
get_number_signed.cache_clear()
40+
get_signatures.cache_clear()
41+
get_upperclassmen_percent.cache_clear()
42+
3643
return True
3744

3845

46+
@lru_cache(maxsize=2048)
3947
def get_signatures(freshman_username):
4048
packet = Freshman.query.filter_by(rit_username=freshman_username).first().current_packet()
4149
eboard = UpperSignature.query.filter_by(packet_id=packet.id, eboard=True).order_by(UpperSignature.signed.desc())
@@ -49,9 +57,24 @@ def get_signatures(freshman_username):
4957
'misc': misc_signatures}
5058

5159

60+
@lru_cache(maxsize=2048)
5261
def get_number_signed(freshman_username):
5362
return Freshman.query.filter_by(rit_username=freshman_username).first().current_packet().signatures_received()
5463

5564

65+
@lru_cache(maxsize=4096)
5666
def get_number_required(freshman_username):
5767
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

0 commit comments

Comments
 (0)