bba06030b90e7924327f5238ebc8bf0f3e2957be
[kiosk.git] / stevens_renderer.py
1 #!/usr/bin/env python3
2
3 import http.client
4 from typing import List, Dict
5 import xml.etree.ElementTree as ET
6
7 import renderer
8 import file_writer
9
10
11 class stevens_pass_conditions_renderer(renderer.debuggable_abstaining_renderer):
12     """Renders a page about Stevens Pass conditions."""
13
14     def __init__(
15         self, name_to_timeout_dict: Dict[str, int], feed_site: str, feed_uris: List[str]
16     ) -> None:
17         super(stevens_pass_conditions_renderer, self).__init__(
18             name_to_timeout_dict, False
19         )
20         self.feed_site = feed_site
21         self.feed_uris = feed_uris
22
23     def debug_prefix(self) -> str:
24         return "stevens"
25
26     def periodic_render(self, key: str) -> bool:
27         with file_writer.file_writer("stevens-conditions_1_86400.html") as f:
28             for uri in self.feed_uris:
29                 self.conn = http.client.HTTPSConnection(self.feed_site)
30                 self.conn.request("GET", uri, None, {"Accept-Charset": "utf-8"})
31                 response = self.conn.getresponse()
32                 if response.status == 200:
33                     raw = response.read()
34                     rss = ET.fromstring(raw)
35                     channel = rss[0]
36                     for item in channel.getchildren():
37                         if item.tag == "title":
38                             f.write(f"<h1>{item.text}</h1><hr>")
39                             f.write(
40                                 '<IMG WIDTH=512 ALIGN=RIGHT HEIGHT=382 SRC="https://images.wsdot.wa.gov/nc/002vc06430.jpg?t=637059938785646824" style="padding:8px;">'
41                             )
42                         elif item.tag == "item":
43                             for x in item.getchildren():
44                                 if x.tag == "description":
45                                     text = x.text
46                                     if text is not None:
47                                         text = text.replace(
48                                             "<strong>Stevens Pass US2</strong><br/>", ""
49                                         )
50                                         text = text.replace("<br/><br/>", "<BR>")
51                                         text = text.replace(
52                                             "<strong>Elevation Meters:</strong>1238<BR>", ""
53                                         )
54                                     else:
55                                         text = ""
56                                     f.write(f"<P>\n{text}\n")
57                     return True
58         return False