@@ -240,36 +240,44 @@ def api_events(self, since_datetime=None):
240240
241241 def events (self , since_datetime = None ):
242242 for api_event in self .api_events (since_datetime = since_datetime ):
243+ if event := self .event (api_event ):
244+ yield event
243245
244- time_str = api_event ['EventTime' ]
245- if not time_str : # If we don't have an event time, skip it
246- continue
247-
248- try :
249- # Start times are entered manually. Sometimes, they don't
250- # conform to this format. Log events with invalid start times,
251- # but don't interrupt the scrape for them.
252- start_time = time .strptime (time_str , self .time_string_format )
253- except ValueError :
254- event_url = '{0}/events/{1}' .format (self .BASE_URL , api_event ['EventId' ])
255- self .logger .error ('API event has invalid start time "{0}": {1}' .format (time_str , event_url ))
256- continue
246+ def event (self , api_event ):
247+ time_str = api_event ["EventTime" ]
248+ if not time_str : # If we don't have an event time, skip it
249+ return
250+ try :
251+ # Start times are entered manually. Sometimes, they don't
252+ # conform to this format. Log events with invalid start times,
253+ # but don't interrupt the scrape for them.
254+ start_time = time .strptime (time_str , self .time_string_format )
255+ except ValueError :
256+ event_url = "{0}/events/{1}" .format (self .BASE_URL , api_event ["EventId" ])
257+ self .logger .error (
258+ 'API event has invalid start time "{0}": {1}' .format (
259+ time_str , event_url
260+ )
261+ )
262+ return
257263
258- start = self .toTime (api_event ['EventDate' ])
259- api_event ['start' ] = start .replace (hour = start_time .tm_hour ,
260- minute = start_time .tm_min )
264+ start = self .toTime (api_event ["EventDate" ])
265+ api_event ["start" ] = start .replace (
266+ hour = start_time .tm_hour , minute = start_time .tm_min
267+ )
261268
262- api_event [' status' ] = self ._event_status (api_event )
269+ api_event [" status" ] = self ._event_status (api_event )
263270
264- web_event = self ._get_web_event (api_event )
271+ web_event = self ._get_web_event (api_event )
265272
266- if web_event :
267- yield api_event , web_event
273+ if web_event :
274+ return api_event , web_event
268275
269- else :
270- event_url = '{0}/events/{1}' .format (self .BASE_URL , api_event ['EventId' ])
271- self .warning ('API event could not be found in web interface: {0}' .format (event_url ))
272- continue
276+ else :
277+ event_url = "{0}/events/{1}" .format (self .BASE_URL , api_event ["EventId" ])
278+ self .warning (
279+ "API event could not be found in web interface: {0}" .format (event_url )
280+ )
273281
274282 def agenda (self , event ):
275283 agenda_url = (self .BASE_URL +
@@ -378,6 +386,13 @@ def web_detail(self, event):
378386 except scrapelib .HTTPError as e :
379387 if e .response .status_code == 410 :
380388 return None
389+ elif e .response .status_code == 503 :
390+ # Events with draft agendas sometimes have an EventInSiteURL
391+ # that resolves to a 503 status code
392+ self .logger .error (
393+ f"Error while fetching event detail at { insite_url } : { e } "
394+ )
395+ return None
381396 else :
382397 raise
383398
0 commit comments