-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparse_session.py
More file actions
116 lines (101 loc) · 5.34 KB
/
parse_session.py
File metadata and controls
116 lines (101 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import csv
import os
from datetime import *
from parse_session_types import session_settings
def parse_session_file(filename):
# open the file
with open(filename, 'r') as csvfile:
attendance = {}
readCSV = csv.reader(csvfile, delimiter=',')
count = 0
# for each row process the data in the file
for row in readCSV:
count += 1
if count == 2: # get the file metadata held in the second row of the file
session_type = row[1]
session_date = datetime.strptime(row[2], '%m/%d/%Y %I:%M:%S %p').date()
host = row[4].lower()
# the start time of the session from session_settings
session_start_time = session_settings[session_type]['start_time']
if count > 4: # the data begins on line 4
# parse times
# the time from that the user joined the session
start = datetime.strptime(row[2], '%m/%d/%Y %I:%M:%S %p')
# the time from that the user left the session
end = datetime.strptime(row[3], '%m/%d/%Y %I:%M:%S %p')
# calculate the time in the session, checking that the time they joined is after the start time
time = end - max(start, datetime.combine(session_date, session_start_time.time()))
# set email and names
email = row[1].lower()
# if the email is not in attendance, add the email, name, and set time_attended to 0
if email not in attendance:
attendance[email] = {
"time_attended": 0
}
# add the time the the person was in the session to their previous times
attendance[email]["time_attended"] += time.total_seconds() / 60
# remove host from the attendance list
del attendance[host.lower()]
return attendance, session_type, session_date
def add_attendance_override(filename, attendance):
with open(filename, 'r') as override:
email = override.readline().strip().lower()
while email:
if email not in attendance:
attendance[email] = {
"time_attended": 'override'
}
email = override.readline().strip().lower()
return attendance
def remove_nonqualifiers(output_dir, session, session_type, session_date, includeNonQ):
csv_filename = os.path.join(output_dir, session_date.strftime("%Y-%m-%d") + '_' + session_settings[session_type]['abbreviation'] + "-nonqualifiers.csv")
key_delete = []
try:
with open(csv_filename, 'w') as csvfile:
csvfile.write("email,first_name,last_name,time_attended\n")
for key in session.keys():
if session[key]['time_attended'] < session_settings[session_type]['required_time']:
csvfile.write(key + ',' + str(session[key]['time_attended']) + '\n')
key_delete.append(key)
if not includeNonQ:
for key in key_delete:
del session[key]
csvfile.close()
except IOError:
print("I/O error: Unable to open file " + csv_filename)
def write_session_csv(output_dir, attendance, session_type, session_date, suffix='', qualifiersOnly=False):
# get the filename in the format of YYYY-MM-DD_ABV[-suffix].csv
csv_filename = os.path.join(output_dir, session_date.strftime("%Y-%m-%d") + '_' + session_settings[session_type]['abbreviation'] + suffix + '.csv')
# get the titles of the columns
csv_columns = ['email']
for email in attendance.keys():
for value in attendance[email]:
csv_columns.append(value)
break
try:
with open(csv_filename, 'w') as csvfile:
# write the column times to the file
csvfile.write(','.join(csv_columns) + '\n')
# for each email in attendance
for email in sorted(attendance.keys()):
if (((attendance[email]['time_attended'] == 'override' or attendance[email]['time_attended'] >= session_settings[session_type]['required_time']) and qualifiersOnly)
or not qualifiersOnly):
csvfile.write(email)
# get the value of each part and write to the file
for value in attendance[email]:
csvfile.write(',' + str(attendance[email][value]))
csvfile.write('\n')
except IOError:
print("I/O error: Unable to open file " + csv_filename)
def get_session_data(output_dir, includeNonQ, session_file_name, override_file_name=None):
session_atten, stype, sdate = parse_session_file(session_file_name)
# write the file all people that attended the session
write_session_csv(output_dir, session_atten, stype, sdate, '-all')
# remove from the list those that did not qualify for the time minimum
remove_nonqualifiers(output_dir, session_atten, stype, sdate, includeNonQ)
# add in the people that are on the override list
if override_file_name is not None:
session_atten = add_attendance_override(override_file_name, session_atten)
# write the file of those that qualified including overrides
write_session_csv(output_dir, session_atten, stype, sdate, '-qualifiers', True)
return session_atten, stype, sdate