Skip to content

Commit 69097d5

Browse files
zedoaxdevinmatte
authored andcommitted
Merge SQL Middleman and Packet Backend (#11)
* created mediator * Created packet.py with signature get/sign functions * Get raw numbers through packet.py middleman * Formatting fixes * Added function for is active * Fixing functions to run after learning how Models work * Updated numbers function to return map of individual values * Removed numbers functions in favor of model Changed return type for signatures to dictionary * Added sanity checks * Wrote signature api route * Fixed imports for pylint * Fixed bad build, semantic changes * Added eval support to signing route * Fix import * Fixed AttributeError * import api route * Fixed packet signing * Fixed datetime import * Fix travis build
1 parent b92da8c commit 69097d5

File tree

4 files changed

+74
-3
lines changed

4 files changed

+74
-3
lines changed

packet/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,7 @@
3939
from .routes import upperclassmen
4040
else:
4141
from .routes import freshmen
42+
from .routes import api
43+
4244
from . import commands
4345
from . import models

packet/models.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,32 @@ class Packet(db.Model):
4747
fresh_signatures = relationship("FreshSignature")
4848
misc_signatures = relationship("MiscSignature")
4949

50+
def is_open(self):
51+
return self.start < datetime.now() < self.end
52+
5053
def signatures_required(self):
51-
return len(self.upper_signatures) + len(self.fresh_signatures) + REQUIRED_MISC_SIGNATURES
54+
eboard = UpperSignature.query.filter_by(eboard=True).count()
55+
return {'eboard': eboard,
56+
'upperclassmen': len(self.upper_signatures) - eboard,
57+
'freshmen': len(self.fresh_signatures),
58+
'misc': REQUIRED_MISC_SIGNATURES}
5259

5360
def signatures_received(self):
5461
"""
5562
Result capped so it will never be greater than that of signatures_required()
5663
"""
57-
upper_count = UpperSignature.query.with_parent(self).filter_by(signed=True).count()
64+
eboard_count = UpperSignature.query.with_parent(self).filter_by(signed=True, eboard=True).count()
65+
upper_count = UpperSignature.query.with_parent(self).filter_by(signed=True, eboard=False).count()
5866
fresh_count = FreshSignature.query.with_parent(self).filter_by(signed=True).count()
5967
misc_count = len(self.misc_signatures)
6068

6169
if misc_count > REQUIRED_MISC_SIGNATURES:
6270
misc_count = REQUIRED_MISC_SIGNATURES
6371

64-
return upper_count + fresh_count + misc_count
72+
return {'eboard': eboard_count,
73+
'upperclassmen': upper_count,
74+
'freshmen': fresh_count,
75+
'miscellaneous': misc_count}
6576

6677

6778
class UpperSignature(db.Model):

packet/packet.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from datetime import datetime
2+
from .models import Freshman, UpperSignature, FreshSignature, MiscSignature, db
3+
4+
5+
def sign(member_username, freshman_username):
6+
freshman = Freshman.query.filter_by(rit_username=freshman_username)[0]
7+
packet = freshman.current_packet()
8+
if packet is None:
9+
return False
10+
if not packet.is_open():
11+
return False
12+
13+
upper_signature = UpperSignature.query.filter_by(member=member_username)[0]
14+
fresh_signature = FreshSignature.query.filter_by(member=member_username)[0]
15+
if upper_signature:
16+
upper_signature.signed = True
17+
elif fresh_signature:
18+
fresh_signature.signed = True
19+
else:
20+
db.session.add(MiscSignature(packet.id, member_username, datetime.now(), packet))
21+
db.session.commit()
22+
return True
23+
24+
25+
def get_signatures(freshman_username):
26+
packet = Freshman.query.filter_by(rit_username=freshman_username)[0].current_packet()
27+
eboard = UpperSignature.query.filter_by(packet_id=packet.id, eboard=True)
28+
upper_signatures = UpperSignature.query.filter_by(packet_id=packet.id, eboard=False)
29+
return {'eboard': eboard,
30+
'upperclassmen': upper_signatures,
31+
'freshmen': FreshSignature.query.filter_by(packet_id=packet.id),
32+
'misc': MiscSignature.query.filter_by(packet_id=packet.id)}
33+
34+
35+
def get_number_signed(freshman_username):
36+
return Freshman.query.filter_by(rit_username=freshman_username)[0].current_packet().signatures_received()
37+
38+
39+
def get_number_required(freshman_username):
40+
return Freshman.query.filter_by(rit_username=freshman_username)[0].current_packet().signatures_required()

packet/routes/api.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from packet import auth, app
2+
from packet.utils import before_request
3+
from packet.packet import sign
4+
5+
6+
@app.route("/api/v1/<member_username>/sign/<packet_username>")
7+
@auth.oidc_auth
8+
@before_request
9+
def sign(member_username, packet_username, info):
10+
if info.uid != member_username:
11+
if info.member_info:
12+
if "eboard-evaluations" not in info.member_info.group_list:
13+
return "Error: You are not evals"
14+
else:
15+
return "Error: UID Submission Mismatch"
16+
if not sign(member_username, packet_username):
17+
return "Error: Signature not valid. Reason: Unknown"
18+
return "Success: Signed Packet: " + packet_username

0 commit comments

Comments
 (0)