Remove references to utils in lieu of just using pylib.
[kiosk.git] / stevens_renderer.py
index ed2afa4c5ff7f67cf07094baaf035bfe471543f9..bba06030b90e7924327f5238ebc8bf0f3e2957be 100644 (file)
@@ -1,49 +1,58 @@
-import renderer
-import file_writer
+#!/usr/bin/env python3
+
 import http.client
+from typing import List, Dict
 import xml.etree.ElementTree as ET
 
+import renderer
+import file_writer
+
 
 class stevens_pass_conditions_renderer(renderer.debuggable_abstaining_renderer):
-    def __init__(self, name_to_timeout_dict, feed_site, feed_uris):
+    """Renders a page about Stevens Pass conditions."""
+
+    def __init__(
+        self, name_to_timeout_dict: Dict[str, int], feed_site: str, feed_uris: List[str]
+    ) -> None:
         super(stevens_pass_conditions_renderer, self).__init__(
             name_to_timeout_dict, False
         )
         self.feed_site = feed_site
         self.feed_uris = feed_uris
 
-    def debug_prefix(self):
+    def debug_prefix(self) -> str:
         return "stevens"
 
-    def periodic_render(self, key):
-        f = file_writer.file_writer("stevens-conditions_1_86400.html")
-        for uri in self.feed_uris:
-            self.conn = http.client.HTTPSConnection(self.feed_site)
-            self.conn.request("GET", uri, None, {"Accept-Charset": "utf-8"})
-            response = self.conn.getresponse()
-            if response.status == 200:
-                raw = response.read()
-                rss = ET.fromstring(raw)
-                channel = rss[0]
-                for item in channel.getchildren():
-                    if item.tag == "title":
-                        f.write("<h1>%s</h1><hr>" % item.text)
-                        f.write(
-                            '<IMG WIDTH=512 ALIGN=RIGHT HEIGHT=382 SRC="https://images.wsdot.wa.gov/nc/002vc06430.jpg?t=637059938785646824" style="padding:8px;">'
-                        )
-                    elif item.tag == "item":
-                        for x in item.getchildren():
-                            if x.tag == "description":
-                                text = x.text
-                                text = text.replace(
-                                    "<strong>Stevens Pass US2</strong><br/>", ""
-                                )
-                                text = text.replace("<br/><br/>", "<BR>")
-                                text = text.replace(
-                                    "<strong>Elevation Meters:</strong>1238<BR>", ""
-                                )
-                                f.write("<P>\n%s\n" % text)
-                f.close()
-                return True
-        f.close()
+    def periodic_render(self, key: str) -> bool:
+        with file_writer.file_writer("stevens-conditions_1_86400.html") as f:
+            for uri in self.feed_uris:
+                self.conn = http.client.HTTPSConnection(self.feed_site)
+                self.conn.request("GET", uri, None, {"Accept-Charset": "utf-8"})
+                response = self.conn.getresponse()
+                if response.status == 200:
+                    raw = response.read()
+                    rss = ET.fromstring(raw)
+                    channel = rss[0]
+                    for item in channel.getchildren():
+                        if item.tag == "title":
+                            f.write(f"<h1>{item.text}</h1><hr>")
+                            f.write(
+                                '<IMG WIDTH=512 ALIGN=RIGHT HEIGHT=382 SRC="https://images.wsdot.wa.gov/nc/002vc06430.jpg?t=637059938785646824" style="padding:8px;">'
+                            )
+                        elif item.tag == "item":
+                            for x in item.getchildren():
+                                if x.tag == "description":
+                                    text = x.text
+                                    if text is not None:
+                                        text = text.replace(
+                                            "<strong>Stevens Pass US2</strong><br/>", ""
+                                        )
+                                        text = text.replace("<br/><br/>", "<BR>")
+                                        text = text.replace(
+                                            "<strong>Elevation Meters:</strong>1238<BR>", ""
+                                        )
+                                    else:
+                                        text = ""
+                                    f.write(f"<P>\n{text}\n")
+                    return True
         return False