|
17 | 17 | from packet.models import Packet, MiscSignature, NotificationSubscription, Freshman, FreshSignature, UpperSignature |
18 | 18 | from packet.notifications import packet_signed_notification, packet_100_percent_notification, \ |
19 | 19 | packet_starting_notification, packets_starting_notification |
| 20 | +import packet.stats as stats |
20 | 21 |
|
21 | 22 |
|
22 | 23 | @app.route('/api/v1/freshmen', methods=['POST']) |
@@ -255,80 +256,13 @@ def report(info): |
255 | 256 | @app.route('/api/v1/stats/packet/<packet_id>') |
256 | 257 | @packet_auth |
257 | 258 | def packet_stats(packet_id): |
258 | | - packet = Packet.by_id(packet_id) |
259 | | - |
260 | | - dates = [packet.start.date() + timedelta(days=x) for x in range(0, (packet.end-packet.start).days + 1)] |
261 | | - |
262 | | - print(dates) |
263 | | - |
264 | | - upper_stats = {date: list() for date in dates} |
265 | | - for uid, date in map(lambda sig: (sig.member, sig.updated), |
266 | | - filter(lambda sig: sig.signed, packet.upper_signatures)): |
267 | | - upper_stats[date.date()].append(uid) |
268 | | - |
269 | | - fresh_stats = {date: list() for date in dates} |
270 | | - for username, date in map(lambda sig: (sig.freshman_username, sig.updated), |
271 | | - filter(lambda sig: sig.signed, packet.fresh_signatures)): |
272 | | - fresh_stats[date.date()].append(username) |
273 | | - |
274 | | - misc_stats = {date: list() for date in dates} |
275 | | - for uid, date in map(lambda sig: (sig.member, sig.updated), packet.misc_signatures): |
276 | | - misc_stats[date.date()].append(uid) |
277 | | - |
278 | | - total_stats = dict() |
279 | | - for date in dates: |
280 | | - total_stats[date.isoformat()] = { |
281 | | - 'upper': upper_stats[date], |
282 | | - 'fresh': fresh_stats[date], |
283 | | - 'misc': misc_stats[date], |
284 | | - } |
285 | | - |
286 | | - return { |
287 | | - 'packet_id': packet_id, |
288 | | - 'dates': total_stats, |
289 | | - } |
290 | | - |
291 | | - |
292 | | -def sig2dict(sig): |
293 | | - """ |
294 | | - A utility function for upperclassman stats. |
295 | | - Converts an UpperSignature to a dictionary with the date and the packet. |
296 | | - """ |
297 | | - packet = Packet.by_id(sig.packet_id) |
298 | | - return { |
299 | | - 'date': sig.updated.date(), |
300 | | - 'packet': { |
301 | | - 'id': packet.id, |
302 | | - 'freshman_username': packet.freshman_username, |
303 | | - }, |
304 | | - } |
| 259 | + return stats.packet_stats(packet_id) |
305 | 260 |
|
306 | 261 |
|
307 | 262 | @app.route('/api/v1/stats/upperclassman/<uid>') |
308 | 263 | @packet_auth |
309 | 264 | def upperclassman_stats(uid): |
310 | | - |
311 | | - sigs = UpperSignature.query.filter( |
312 | | - UpperSignature.signed, |
313 | | - UpperSignature.member == uid |
314 | | - ).all() + MiscSignature.query.filter(MiscSignature.member == uid).all() |
315 | | - |
316 | | - sig_dicts = list(map(sig2dict, sigs)) |
317 | | - |
318 | | - dates = set(map(lambda sd: sd['date'], sig_dicts)) |
319 | | - |
320 | | - return { |
321 | | - 'member': uid, |
322 | | - 'signatures': { |
323 | | - date.isoformat() : list( |
324 | | - map(lambda sd: sd['packet'], |
325 | | - filter(lambda sig, d=date: sig['date'] == d, |
326 | | - sig_dicts |
327 | | - ) |
328 | | - ) |
329 | | - ) for date in dates |
330 | | - } |
331 | | - } |
| 265 | + return stats.upperclassman_stats(uid) |
332 | 266 |
|
333 | 267 | def commit_sig(packet, was_100, uid): |
334 | 268 | packet_signed_notification(packet, uid) |
|
0 commit comments