@@ -9,7 +9,7 @@ import sys
9
9
import time
10
10
from configparser import ConfigParser
11
11
from dataclasses import dataclass
12
- from typing import List , Optional , Set , Tuple , TypedDict
12
+ from typing import Any , Dict , List , Optional , Set , Tuple , TypedDict
13
13
14
14
import dateutil .parser
15
15
import pytz
@@ -212,31 +212,28 @@ def populate_events() -> Optional[None]:
212
212
213
213
events .clear ()
214
214
for event in feed ["items" ]:
215
- try :
216
- start = dateutil .parser .parse (event ["start" ]["dateTime" ])
217
- # According to the API documentation, a time zone offset is required
218
- # for start.dateTime unless a time zone is explicitly specified in
219
- # start.timeZone.
220
- if start .tzinfo is None :
221
- event_timezone = pytz .timezone (event ["start" ]["timeZone" ])
222
- # pytz timezones include an extra localize method that's not part
223
- # of the tzinfo base class.
224
- start = event_timezone .localize (start )
225
- except KeyError :
226
- # All-day events can have only a date.
227
- start_naive = dateutil .parser .parse (event ["start" ]["date" ])
228
-
229
- # All-day events don't have a time zone offset; instead, we use the
230
- # time zone of the calendar.
231
- calendar_timezone = pytz .timezone (feed ["timeZone" ])
232
- # pytz timezones include an extra localize method that's not part
233
- # of the tzinfo base class.
234
- start = calendar_timezone .localize (start_naive )
215
+
216
+ def get_start_or_end (event : Dict [str , Any ], field_name : str ) -> datetime .datetime :
217
+ try :
218
+ field = dateutil .parser .parse (event [field_name ]["dateTime" ])
219
+ # a time zone offset is required unless timeZone is explicitly specified.
220
+ if field .tzinfo is None :
221
+ # pytz timezones include an extra localize method that's not part
222
+ # of the tzinfo base class.
223
+ event_timezone = pytz .timezone (event [field_name ]["timeZone" ])
224
+ field = event_timezone .localize (field )
225
+ except KeyError :
226
+ # All-day events can have only a date.
227
+ field_naive = dateutil .parser .parse (event [field_name ]["date" ])
228
+ # All-day events do not have a time zone offset; use the calendar's time zone.
229
+ calendar_timezone = pytz .timezone (feed ["timeZone" ])
230
+ field = calendar_timezone .localize (field_naive )
231
+ return field
235
232
236
233
events .append (
237
234
{
238
235
"id" : event ["id" ],
239
- "start" : start ,
236
+ "start" : get_start_or_end ( event , " start" ) ,
240
237
"summary" : event .get ("summary" , "(No Title)" ),
241
238
}
242
239
)
0 commit comments