Skip to content

Commit 53926d3

Browse files
committed
Add file output and csv formatting to fetch-results
1 parent eb456da commit 53926d3

File tree

1 file changed

+45
-15
lines changed

1 file changed

+45
-15
lines changed

packet/commands.py

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
Defines command-line utilities for use with packet
33
"""
44

5+
import sys
6+
57
from secrets import token_hex
68
from datetime import datetime, time, timedelta
79
import csv
@@ -219,31 +221,59 @@ def ldap_sync():
219221

220222

221223
@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):
223229
"""
224230
Fetches and prints the results from a given packet season.
225231
"""
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 "
227237
'from'), packet_end_time)
228238

229-
for packet in Packet.query.filter_by(end=end_date).all():
230-
print()
231239

232-
print('{} ({}):'.format(packet.freshman.name, packet.freshman.rit_username))
240+
file_handle = open(file_path, 'w', newline='') if file_path else sys.stdout
233241

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():
234246
received = packet.signatures_received()
235247
required = packet.signatures_required()
236248

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+
''')
247277

248278

249279
@app.cli.command('extend-packet')

0 commit comments

Comments
 (0)