Changes ;)
[kiosk.git] / bellevue_city_calendar_renderer.py
1 #!/usr/bin/env python3
2
3 import datetime
4 import re
5 from typing import Dict, List, Optional
6 import xml
7
8 from dateutil.parser import parse
9
10 import generic_news_rss_renderer as gnrss
11
12
13 class bellevue_city_calendar_renderer(gnrss.generic_news_rss_renderer):
14     """Read the Bellevue City Calendar feed."""
15
16     def __init__(
17         self,
18         name_to_timeout_dict: Dict[str, int],
19         feed_site: str,
20         feed_uris: List[str],
21         page_title: str,
22     ):
23         super(bellevue_city_calendar_renderer, self).__init__(
24             name_to_timeout_dict, feed_site, feed_uris, page_title
25         )
26         self.debug = True
27
28     def debug_prefix(self) -> str:
29         return f"bellevue_calendar({self.page_title})"
30
31     def get_headlines_page_prefix(self) -> str:
32         return "bellevue-calendar"
33
34     def get_details_page_prefix(self) -> str:
35         return "bellevue-calendar-details"
36
37     def should_use_https(self) -> bool:
38         return True
39
40     def get_event_time(self, item: xml.etree.ElementTree.Element) -> Optional[datetime.datetime]:
41         return parse(self.find_pubdate(item))
42
43     def find_pubdate(self, item: xml.etree.ElementTree.Element) -> Optional[str]:
44         descr = item.findtext("description")
45         if descr is None:
46             return None
47         m = re.search(r'time datetime="([^"]+)"', descr)
48         if m is None:
49             return None
50         return m.group(1)
51
52     def item_is_interesting_for_headlines(
53         self, title: str, description: str, item: xml.etree.ElementTree.Element
54     ) -> bool:
55         if "City Council" in title:
56             return False
57         if "City Offices Closed" in title:
58             return False
59         if "Regular Meeting" in title:
60             return False
61         if "Commission" in title:
62             return False
63         date = self.get_event_time(item)
64         if date is None:
65             return False
66         tzinfo = date.tzinfo
67         now = datetime.datetime.now(tzinfo)
68         delta = (now - date).total_seconds() / (60 * 60 * 24)
69         return delta < 0
70
71     def do_details(self) -> bool:
72         return False
73
74     def item_is_interesting_for_article(
75         self, title: str, description: str, item: xml.etree.ElementTree.Element
76     ) -> bool:
77         return False
78
79
80 # Test
81 #x = bellevue_city_calendar_renderer(
82 #   {"Fetch News" : 1,
83 #    "Shuffle News" : 1},
84 #   "bellevuewa.gov",
85 #   [ "/calendar/events.xml" ],
86 #   "Test" )
87 #if x.fetch_news() == 0:
88 #    print("Error fetching news, no items fetched.")
89 #else:
90 #    x.shuffle_news()