annotate create_school_cals.py @ 91:62caecb41dfd default tip

fix tag
author drewp@bigasterisk.com
date Fri, 03 Jan 2025 18:06:13 -0800
parents f76f6368e2af
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
1 import datetime
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
2 import json
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
3 from pprint import pprint
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
4
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
5 import tzlocal
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
6
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
7 from calendar_connection import getCalendarService
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
8
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
9 holidays = {
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
10 "2024-09-02": "Labor Day (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
11 "2024-10-07": "Staff Development (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
12 "2024-11-01": "Confs. & Staff Dev. (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
13 "2024-11-11": "Veteran's Day (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
14 "2024-11-25": "Thanksgiving Break (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
15 "2024-11-26": "Thanksgiving Break (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
16 "2024-11-27": "Thanksgiving Break (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
17 "2024-11-28": "Thanksgiving Break (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
18 "2024-11-29": "Thanksgiving Break (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
19 "2024-12-23": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
20 "2024-12-24": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
21 "2024-12-25": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
22 "2024-12-26": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
23 "2024-12-27": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
24 "2024-12-30": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
25 "2024-12-31": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
26 "2025-01-01": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
27 "2025-01-02": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
28 "2025-01-03": "Winter Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
29 "2025-01-20": "MLK's Birthday (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
30 "2025-01-27": "Staff Development Day (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
31 "2025-02-14": "Lincoln's Birthday (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
32 "2025-02-17": "President's Day (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
33 "2025-03-14": "No School (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
34 "2025-03-31": "Spring Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
35 "2025-04-01": "Spring Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
36 "2025-04-02": "Spring Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
37 "2025-04-03": "Spring Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
38 "2025-04-04": "Spring Recess (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
39 "2025-05-16": "Malcolm X's Birthday (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
40 "2025-05-26": "Memorial Day (school closed)",
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
41 }
34
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
42
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
43
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
44 def busdHoliday(s: datetime.datetime) -> str | None:
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
45 if s.weekday() > 4:
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
46 return 'weekend'
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
47 date = s.date().isoformat()
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
48 if date in holidays:
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
49 return holidays[date]
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
50 return None
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
51
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
52
47
f76f6368e2af fix JM wednesdays
drewp@bigasterisk.com
parents: 46
diff changeset
53 codeVersion = 'auto-gen v4'
34
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
54 service = getCalendarService()
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
55
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
56 calIdForPerson = json.load(open('gcalendarwatch.conf'))['calId']
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
57
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
58 s = datetime.datetime(2024, 8, 14-1, 9, 0, 0, tzinfo=tzlocal.get_localzone())
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
59 while s < datetime.datetime(2025, 6, 5, tzinfo=tzlocal.get_localzone()):
34
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
60 s = s + datetime.timedelta(days=1)
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
61 for calId, school, startHM, endHM in [
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
62 (calIdForPerson['asher'], 'john muir', (9, 0), (15, 10)),
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
63 (calIdForPerson['ari'], 'BHS', (8, 30), (15, 33)),
34
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
64 ]:
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
65 if holiday := busdHoliday(s):
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
66 if holiday == 'weekend':
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
67 continue
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
68 event = {
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
69 'summary': holiday,
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
70 'description': codeVersion,
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
71 'start': {
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
72 'date': s.date().isoformat()
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
73 }, # allday
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
74 'end': {
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
75 'date': s.date().isoformat()
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
76 }, # allday
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
77 }
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
78 else:
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
79 summary = f'{school}'
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
80 if school == 'john muir' and ('2023-10-28' <= s.date().isoformat() <= '2023-10-31'):
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
81 summary += ' (shortened day)'
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
82 # if school == 'BHS' and ('2023-12-20' <= s.date().isoformat() <= '2023-12-22'):
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
83 # summary += ' (finals schedule)'
34
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
84
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
85 if school == 'BHS' and s.weekday() == 0:
35
6d602c53eb33 fix bhs monday starts
drewp@bigasterisk.com
parents: 34
diff changeset
86 startHM = (10, 0)
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
87
47
f76f6368e2af fix JM wednesdays
drewp@bigasterisk.com
parents: 46
diff changeset
88 if school == 'john muir' and s.weekday() == 2:
f76f6368e2af fix JM wednesdays
drewp@bigasterisk.com
parents: 46
diff changeset
89 endHM = (14, 15)
f76f6368e2af fix JM wednesdays
drewp@bigasterisk.com
parents: 46
diff changeset
90
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
91 s = s.replace(hour=startHM[0], minute=startHM[1])
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
92 e = s.replace(hour=endHM[0], minute=endHM[1])
34
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
93
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
94 # schema: https://developers.google.com/calendar/api/v3/reference/events#resource-representations
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
95 event = {
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
96 'summary': summary,
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
97 'description': codeVersion,
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
98 'start': {
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
99 'dateTime': s.isoformat()
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
100 },
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
101 'end': {
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
102 'dateTime': e.isoformat()
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
103 },
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
104 }
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
105 print(calId, event)
34
281e4b12dd37 create 500+ school day events for 2023
drewp@bigasterisk.com
parents:
diff changeset
106 # https://developers.google.com/calendar/api/v3/reference/events/insert
46
a53d79faac16 new school year
drewp@bigasterisk.com
parents: 35
diff changeset
107 print(service.events().insert(calendarId=calId, body=event).execute())