-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate_calendar_csv.py
70 lines (58 loc) · 1.94 KB
/
generate_calendar_csv.py
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
import csv
import json
from datetime import date, timedelta
import argparse
def generate_parser():
parser = argparse.ArgumentParser(
description='Generate a Google Calendar supported CSV file from data retrieved from Calimove.com'
)
parser.add_argument(
'--subject',
help='title of the event'
)
parser.add_argument(
'--date',
type=date.fromisoformat,
default=date.today(),
help='date of day 1 (today by default)'
)
parser.add_argument(
'--source',
default='./retrieved_data.json',
help='data source json file path (generated by scrape_course_curriculum.js)'
)
parser.add_argument(
'--dest',
default='./calendar.csv',
help='target file path'
)
return parser
def json_file_as_dict(path):
f = open(path)
data = json.load(f)
f.close()
return data
def event_data_to_csv_dict(event_data, start_date, subject):
week = event_data['week']
day = event_data['day']
duration = event_data['duration'] if 'duration' in event_data else None
duration_string = f' - { duration }' if duration else ''
return {
'Subject': subject,
'Start Date': (start_date + timedelta(days=day-1)).isoformat(),
'All Day Event': True,
'Description': f'Week { week } - day { day }{ duration_string }',
'Private': True
}
def write_to_csv_file(data, path, start_date):
with open(path, 'w', newline='') as f:
fieldnames = ['Subject', 'Start Date', 'All Day Event', 'Description', 'Private']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for event_data in data:
csv_dict = event_data_to_csv_dict(event_data, start_date, args.subject)
writer.writerow(csv_dict)
parser = generate_parser()
args = parser.parse_args()
data = json_file_as_dict(args.source)
write_to_csv_file(data, args.dest, args.date)