88
99from packet import app , db
1010from packet .context_processors import get_rit_name
11- from packet .commands import packet_start_time , packet_end_time
11+ from packet .commands import packet_start_time , packet_end_time , CSVFreshman
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
1515from packet .log_utils import log_time
1616from packet .mail import send_report_mail , send_start_packet_mail
17- 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
1818from packet .models import Packet , MiscSignature , NotificationSubscription , Freshman , FreshSignature , UpperSignature
1919from packet .notifications import packet_signed_notification , packet_100_percent_notification , \
20- packet_starting_notification , packets_starting_notification
20+ packet_starting_notification , packets_starting_notification
21+
22+
23+ class POSTFreshman :
24+ def __init__ (self , freshman ):
25+ self .name = freshman ['name' ].strip ()
26+ self .rit_username = freshman ['rit_username' ].strip ()
27+ self .onfloor = freshman ['onfloor' ].strip () == 'TRUE'
2128
2229
2330@app .route ('/api/v1/freshmen' , methods = ['POST' ])
@@ -40,43 +47,9 @@ def sync_freshman():
4047 if not _ldap_is_member_of_group (ldap_get_member (username ), 'eboard-evaluations' ):
4148 return 'Forbidden: not Evaluations Director' , 403
4249
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
50+ freshmen_in_post = {freshman .rit_username : freshman for freshman in map (POSTFreshman , request .json )}
51+ sync_freshman_list (freshmen_in_post )
52+ return dumps ('Done' ), 200
8053
8154
8255@app .route ('/api/v1/packets' , methods = ['POST' ])
@@ -164,7 +137,7 @@ def get_packets_by_user(username: str) -> dict:
164137 return {packet .id : {
165138 'start' : packet .start ,
166139 'end' : packet .end ,
167- } for packet in frosh .packets }
140+ } for packet in frosh .packets }
168141
169142
170143@app .route ('/api/v1/packets/<username>/newest' , methods = ['GET' ])
@@ -178,13 +151,13 @@ def get_newest_packet_by_user(username: str) -> dict:
178151 packet = frosh .packets [- 1 ]
179152
180153 return {
181- packet .id : {
182- 'start' : packet .start ,
183- 'end' : packet .end ,
184- 'required' : vars (packet .signatures_required ()),
185- 'received' : vars (packet .signatures_received ()),
186- }
187- }
154+ packet .id : {
155+ 'start' : packet .start ,
156+ 'end' : packet .end ,
157+ 'required' : vars (packet .signatures_required ()),
158+ 'received' : vars (packet .signatures_received ()),
159+ }
160+ }
188161
189162
190163@app .route ('/api/v1/packet/<packet_id>' , methods = ['GET' ])
@@ -197,9 +170,10 @@ def get_packet_by_id(packet_id: int) -> dict:
197170 packet = Packet .by_id (packet_id )
198171
199172 return {
200- 'required' : vars (packet .signatures_required ()),
201- 'received' : vars (packet .signatures_received ()),
202- }
173+ 'required' : vars (packet .signatures_required ()),
174+ 'received' : vars (packet .signatures_received ()),
175+ }
176+
203177
204178@app .route ('/api/v1/sign/<packet_id>/' , methods = ['POST' ])
205179@packet_auth
@@ -259,7 +233,7 @@ def report(info):
259233def packet_stats (packet_id ):
260234 packet = Packet .by_id (packet_id )
261235
262- dates = [packet .start .date () + timedelta (days = x ) for x in range (0 , (packet .end - packet .start ).days + 1 )]
236+ dates = [packet .start .date () + timedelta (days = x ) for x in range (0 , (packet .end - packet .start ).days + 1 )]
263237
264238 print (dates )
265239
@@ -280,15 +254,15 @@ def packet_stats(packet_id):
280254 total_stats = dict ()
281255 for date in dates :
282256 total_stats [date .isoformat ()] = {
283- 'upper' : upper_stats [date ],
284- 'fresh' : fresh_stats [date ],
285- 'misc' : misc_stats [date ],
286- }
257+ 'upper' : upper_stats [date ],
258+ 'fresh' : fresh_stats [date ],
259+ 'misc' : misc_stats [date ],
260+ }
287261
288262 return {
289- 'packet_id' : packet_id ,
290- 'dates' : total_stats ,
291- }
263+ 'packet_id' : packet_id ,
264+ 'dates' : total_stats ,
265+ }
292266
293267
294268def sig2dict (sig ):
@@ -298,39 +272,39 @@ def sig2dict(sig):
298272 """
299273 packet = Packet .by_id (sig .packet_id )
300274 return {
301- 'date' : sig .updated .date (),
302- 'packet' : {
303- 'id' : packet .id ,
304- 'freshman_username' : packet .freshman_username ,
305- },
306- }
275+ 'date' : sig .updated .date (),
276+ 'packet' : {
277+ 'id' : packet .id ,
278+ 'freshman_username' : packet .freshman_username ,
279+ },
280+ }
307281
308282
309283@app .route ('/api/v1/stats/upperclassman/<uid>' )
310284@packet_auth
311285def upperclassman_stats (uid ):
312-
313286 sigs = UpperSignature .query .filter (
314- UpperSignature .signed ,
315- UpperSignature .member == uid
316- ).all () + MiscSignature .query .filter (MiscSignature .member == uid ).all ()
287+ UpperSignature .signed ,
288+ UpperSignature .member == uid
289+ ).all () + MiscSignature .query .filter (MiscSignature .member == uid ).all ()
317290
318291 sig_dicts = list (map (sig2dict , sigs ))
319292
320293 dates = set (map (lambda sd : sd ['date' ], sig_dicts ))
321294
322295 return {
323- 'member' : uid ,
324- 'signatures' : {
325- date .isoformat () : list (
326- map (lambda sd : sd ['packet' ],
327- filter (lambda sig , d = date : sig ['date' ] == d ,
328- sig_dicts
329- )
330- )
331- ) for date in dates
332- }
333- }
296+ 'member' : uid ,
297+ 'signatures' : {
298+ date .isoformat (): list (
299+ map (lambda sd : sd ['packet' ],
300+ filter (lambda sig , d = date : sig ['date' ] == d ,
301+ sig_dicts
302+ )
303+ )
304+ ) for date in dates
305+ }
306+ }
307+
334308
335309def commit_sig (packet , was_100 , uid ):
336310 packet_signed_notification (packet , uid )
0 commit comments