1212from packet .ldap import ldap_get_eboard_role , ldap_get_active_rtps , ldap_get_3das , ldap_get_webmasters , \
1313 ldap_get_drink_admins , ldap_get_constitutional_maintainers , ldap_is_intromember , ldap_get_active_members , \
1414 ldap_is_on_coop , _ldap_is_member_of_group , ldap_get_member
15+ from packet .log_utils import log_time
1516from packet .mail import send_report_mail , send_start_packet_mail
16- from packet .utils import before_request , packet_auth , notify_slack
17+ from packet .utils import before_request , packet_auth , notify_slack , sync_freshman as sync_freshman_list
1718from packet .models import Packet , MiscSignature , NotificationSubscription , Freshman , FreshSignature , UpperSignature
1819from packet .notifications import packet_signed_notification , packet_100_percent_notification , \
19- packet_starting_notification , packets_starting_notification
20+ packet_starting_notification , packets_starting_notification
2021import packet .stats as stats
2122
2223
24+ class POSTFreshman :
25+ def __init__ (self , freshman ):
26+ self .name = freshman ['name' ].strip ()
27+ self .rit_username = freshman ['rit_username' ].strip ()
28+ self .onfloor = freshman ['onfloor' ].strip () == 'TRUE'
29+
30+
2331@app .route ('/api/v1/freshmen' , methods = ['POST' ])
2432@packet_auth
2533def sync_freshman ():
@@ -40,47 +48,14 @@ def sync_freshman():
4048 if not _ldap_is_member_of_group (ldap_get_member (username ), 'eboard-evaluations' ):
4149 return 'Forbidden: not Evaluations Director' , 403
4250
43- freshmen = request .json
44- results = list ()
45-
46- packets = Packet .query .filter (Packet .end > datetime .now ()).all ()
47-
48- for freshman in freshmen :
49- rit_username = freshman ['rit_username' ]
50- name = freshman ['name' ]
51- onfloor = freshman ['onfloor' ]
52-
53- frosh = Freshman .query .filter_by (rit_username = rit_username ).first ()
54- if frosh :
55- if onfloor and not frosh .onfloor :
56- # Add new onfloor signature
57- for packet in packets :
58- db .session .add (FreshSignature (packet = packet , freshman = frosh ))
59- elif not onfloor and frosh .onfloor :
60- # Remove outdated onfloor signature
61- for packet in packets :
62- FreshSignature .query .filter_by (packet_id = packet .id , freshman_username = frosh .rit_username ).delete ()
63-
64- frosh .name = name
65- frosh .onfloor = onfloor
66-
67- results .append (f"'{ name } ({ rit_username } )' updated" )
68- else :
69- frosh = Freshman (rit_username = rit_username , name = name , onfloor = onfloor )
70- db .session .add (frosh )
71- if onfloor :
72- # Add onfloor signature
73- for packet in packets :
74- db .session .add (FreshSignature (packet = packet , freshman = frosh ))
75-
76- results .append (f"Freshman '{ name } ({ rit_username } )' created" )
77-
78- db .session .commit ()
79- return dumps (results ), 200
51+ freshmen_in_post = {freshman .rit_username : freshman for freshman in map (POSTFreshman , request .json )}
52+ sync_freshman_list (freshmen_in_post )
53+ return dumps ('Done' ), 200
8054
8155
8256@app .route ('/api/v1/packets' , methods = ['POST' ])
8357@packet_auth
58+ @log_time
8459def create_packet ():
8560 """
8661 Create a new packet.
@@ -163,7 +138,7 @@ def get_packets_by_user(username: str) -> dict:
163138 return {packet .id : {
164139 'start' : packet .start ,
165140 'end' : packet .end ,
166- } for packet in frosh .packets }
141+ } for packet in frosh .packets }
167142
168143
169144@app .route ('/api/v1/packets/<username>/newest' , methods = ['GET' ])
@@ -177,13 +152,13 @@ def get_newest_packet_by_user(username: str) -> dict:
177152 packet = frosh .packets [- 1 ]
178153
179154 return {
180- packet .id : {
181- 'start' : packet .start ,
182- 'end' : packet .end ,
183- 'required' : vars (packet .signatures_required ()),
184- 'received' : vars (packet .signatures_received ()),
185- }
186- }
155+ packet .id : {
156+ 'start' : packet .start ,
157+ 'end' : packet .end ,
158+ 'required' : vars (packet .signatures_required ()),
159+ 'received' : vars (packet .signatures_received ()),
160+ }
161+ }
187162
188163
189164@app .route ('/api/v1/packet/<packet_id>' , methods = ['GET' ])
@@ -196,9 +171,10 @@ def get_packet_by_id(packet_id: int) -> dict:
196171 packet = Packet .by_id (packet_id )
197172
198173 return {
199- 'required' : vars (packet .signatures_required ()),
200- 'received' : vars (packet .signatures_received ()),
201- }
174+ 'required' : vars (packet .signatures_required ()),
175+ 'received' : vars (packet .signatures_received ()),
176+ }
177+
202178
203179@app .route ('/api/v1/sign/<packet_id>/' , methods = ['POST' ])
204180@packet_auth
@@ -264,6 +240,7 @@ def packet_stats(packet_id):
264240def upperclassman_stats (uid ):
265241 return stats .upperclassman_stats (uid )
266242
243+
267244def commit_sig (packet , was_100 , uid ):
268245 packet_signed_notification (packet , uid )
269246 db .session .commit ()
0 commit comments