|
2 | 2 | Defines command-line utilities for use with packet
|
3 | 3 | """
|
4 | 4 |
|
| 5 | +import sys |
| 6 | + |
5 | 7 | from secrets import token_hex
|
6 | 8 | from datetime import datetime, time, timedelta
|
7 | 9 | import csv
|
@@ -31,9 +33,9 @@ def create_secret():
|
31 | 33 |
|
32 | 34 | class CSVFreshman:
|
33 | 35 | def __init__(self, row):
|
34 |
| - self.name = row[0] |
35 |
| - self.rit_username = row[3] |
36 |
| - self.onfloor = row[1] == 'TRUE' |
| 36 | + self.name = row[0].strip() |
| 37 | + self.rit_username = row[3].strip() |
| 38 | + self.onfloor = row[1].strip() == 'TRUE' |
37 | 39 |
|
38 | 40 |
|
39 | 41 | def parse_csv(freshmen_csv):
|
@@ -219,31 +221,59 @@ def ldap_sync():
|
219 | 221 |
|
220 | 222 |
|
221 | 223 | @app.cli.command('fetch-results')
|
222 |
| -def fetch_results(): |
| 224 | +@click.option('-f', '--file', 'file_path', required=False, type=click.Path(exists=False, writable=True), |
| 225 | + help='The file to write to. If no file provided, output is sent to stdout.') |
| 226 | +@click.option('--csv/--no-csv', 'use_csv', required=False, default=False, help='Format output as comma separated list.') |
| 227 | +@click.option('--date', 'date_str', required=False, default='', help='Packet end date in the format MM/DD/YYYY.') |
| 228 | +def fetch_results(file_path, use_csv, date_str): |
223 | 229 | """
|
224 | 230 | Fetches and prints the results from a given packet season.
|
225 | 231 | """
|
226 |
| - end_date = datetime.combine(input_date("Enter the last day of the packet season you'd like to retrieve results " |
| 232 | + end_date = None |
| 233 | + try: |
| 234 | + end_date = datetime.combine(datetime.strptime(date_str, '%m/%d/%Y').date(), packet_end_time) |
| 235 | + except ValueError: |
| 236 | + end_date = datetime.combine(input_date("Enter the last day of the packet season you'd like to retrieve results " |
227 | 237 | 'from'), packet_end_time)
|
228 | 238 |
|
229 |
| - for packet in Packet.query.filter_by(end=end_date).all(): |
230 |
| - print() |
231 | 239 |
|
232 |
| - print('{} ({}):'.format(packet.freshman.name, packet.freshman.rit_username)) |
| 240 | + file_handle = open(file_path, 'w', newline='') if file_path else sys.stdout |
233 | 241 |
|
| 242 | + column_titles = ['Name (RIT Username)', 'Upperclassmen Score', 'Total Score', 'Upperclassmen', 'Freshmen', |
| 243 | + 'Miscellaneous', 'Total Missed'] |
| 244 | + data = list() |
| 245 | + for packet in Packet.query.filter_by(end=end_date).all(): |
234 | 246 | received = packet.signatures_received()
|
235 | 247 | required = packet.signatures_required()
|
236 | 248 |
|
237 |
| - print('\tUpperclassmen score: {:0.2f}%'.format(received.member_total / required.member_total * 100)) |
238 |
| - print('\tTotal score: {:0.2f}%'.format(received.total / required.total * 100)) |
239 |
| - print() |
240 |
| - |
241 |
| - print('\tUpperclassmen: {}/{}'.format(received.upper, required.upper)) |
242 |
| - print('\tFreshmen: {}/{}'.format(received.fresh, required.fresh)) |
243 |
| - print('\tMiscellaneous: {}/{}'.format(received.misc, required.misc)) |
244 |
| - print() |
245 |
| - |
246 |
| - print('\tTotal missed:', required.total - received.total) |
| 249 | + row = [ |
| 250 | + '{} ({}):'.format(packet.freshman.name, packet.freshman.rit_username), |
| 251 | + '{:0.2f}%'.format(received.member_total / required.member_total * 100), |
| 252 | + '{:0.2f}%'.format(received.total / required.total * 100), |
| 253 | + '{}/{}'.format(received.upper, required.upper), |
| 254 | + '{}/{}'.format(received.fresh, required.fresh), |
| 255 | + '{}/{}'.format(received.misc, required.misc), |
| 256 | + required.total - received.total, |
| 257 | + ] |
| 258 | + data.append(row) |
| 259 | + |
| 260 | + if use_csv: |
| 261 | + writer = csv.writer(file_handle) |
| 262 | + writer.writerow(column_titles) |
| 263 | + writer.writerows(data) |
| 264 | + else: |
| 265 | + for row in data: |
| 266 | + file_handle.write(f''' |
| 267 | +
|
| 268 | +{row[0]} |
| 269 | +\t{column_titles[1]}: {row[1]} |
| 270 | +\t{column_titles[2]}: {row[2]} |
| 271 | +\t{column_titles[3]}: {row[3]} |
| 272 | +\t{column_titles[4]}: {row[4]} |
| 273 | +\t{column_titles[5]}: {row[5]} |
| 274 | +
|
| 275 | +\t{column_titles[6]}: {row[6]} |
| 276 | +''') |
247 | 277 |
|
248 | 278 |
|
249 | 279 | @app.cli.command('extend-packet')
|
|
0 commit comments