#!/usr/bin/env python3 import datetime import logging import re from typing import Dict, List, Optional import xml from dateutil.parser import parse import generic_news_rss_renderer as gnrss logger = logging.getLogger(__name__) class bellevue_city_calendar_renderer(gnrss.generic_news_rss_renderer): """Read the Bellevue City Calendar feed.""" def __init__( self, name_to_timeout_dict: Dict[str, int], feed_site: str, feed_uris: List[str], page_title: str, ): super().__init__(name_to_timeout_dict, feed_site, feed_uris, page_title) def get_headlines_page_prefix(self) -> str: return "bellevue-calendar" def get_details_page_prefix(self) -> str: return "bellevue-calendar-details" def should_use_https(self) -> bool: return True def get_event_time( self, item: xml.etree.ElementTree.Element ) -> Optional[datetime.datetime]: return parse(self.find_pubdate(item)) def find_pubdate(self, item: xml.etree.ElementTree.Element) -> Optional[str]: descr = item.findtext("description") if descr is None: return None m = re.search(r'time datetime="([^"]+)"', descr) if m is None: return None return m.group(1) def item_is_interesting_for_headlines( self, title: str, description: str, item: xml.etree.ElementTree.Element ) -> bool: if "City Council" in title: return False if "City Offices Closed" in title: return False if "Regular Meeting" in title: return False if "Commission" in title: return False date = self.get_event_time(item) if date is None: return False tzinfo = date.tzinfo now = datetime.datetime.now(tzinfo) delta = (now - date).total_seconds() / (60 * 60 * 24) return delta < 0 def do_details(self) -> bool: logger.debug("No Bellevue city calendar items are interesting for articles...") return False def item_is_interesting_for_article( self, title: str, description: str, item: xml.etree.ElementTree.Element ) -> bool: logger.debug("No Bellevue city calendar items are interesting for articles...") return False # Test # x = bellevue_city_calendar_renderer( # {"Fetch News" : 1, # "Shuffle News" : 1}, # "bellevuewa.gov", # [ "/calendar/events.xml" ], # "Test" ) # if x.fetch_news() == 0: # print("Error fetching news, no items fetched.") # else: # x.shuffle_news()