Fix cameras, improve weather, delegate health renderer to a helper,
[kiosk.git] / stranger_renderer.py
index ccdad547c0a534a04d63a1632c858210bb043963..0c566d93e3123a5e18f52a5960475140b84ac66c 100644 (file)
@@ -1,11 +1,12 @@
 #!/usr/bin/env python3
 
-from bs4 import BeautifulSoup  # type: ignore
 import datetime
 import http.client
-import random
+import logging
 import re
-from typing import Dict, List
+from typing import Dict
+
+from bs4 import BeautifulSoup  # type: ignore
 
 import file_writer
 import grab_bag
@@ -14,17 +15,21 @@ import profanity_filter
 import renderer
 
 
-class stranger_events_renderer(renderer.debuggable_abstaining_renderer):
+logger = logging.getLogger(__file__)
+
+
+class stranger_events_renderer(renderer.abstaining_renderer):
     def __init__(self, name_to_timeout_dict: Dict[str, int]):
-        super(stranger_events_renderer, self).__init__(name_to_timeout_dict, True)
+        super().__init__(name_to_timeout_dict)
         self.feed_site = "everout.com"
         self.events = grab_bag.grab_bag()
+        self.pfilter = profanity_filter.ProfanityFilter()
 
     def debug_prefix(self) -> str:
         return "stranger"
 
     def periodic_render(self, key: str) -> bool:
-        self.debug_print("called for action %s" % key)
+        logger.debug("called for action %s" % key)
         if key == "Fetch Events":
             return self.fetch_events()
         elif key == "Shuffle Events":
@@ -77,7 +82,7 @@ class stranger_events_renderer(renderer.debuggable_abstaining_renderer):
         layout.set_style(self.get_style())
         subset = self.events.subset(4)
         if subset is None:
-            self.debug_print("Not enough events to build page.")
+            logger.debug("Not enough events to build page.")
             return False
 
         for msg in subset:
@@ -88,11 +93,7 @@ class stranger_events_renderer(renderer.debuggable_abstaining_renderer):
 
     def fetch_events(self) -> bool:
         self.events.clear()
-        feed_uris = [
-            "/seattle/events/?page=1",
-            "/seattle/events/?page=2",
-            "/seattle/events/?page=3",
-        ]
+        feed_uris = []
         now = datetime.datetime.now()
         ts = now + datetime.timedelta(1)
         tomorrow = datetime.datetime.strftime(ts, "%Y-%m-%d")
@@ -112,26 +113,25 @@ class stranger_events_renderer(renderer.debuggable_abstaining_renderer):
             feed_uris.append(f"/seattle/events/?start-date={next_sun}&page=1")
             feed_uris.append(f"/seattle/events/?start-date={next_sun}&page=2")
 
-        filter = profanity_filter.ProfanityFilter()
         for uri in feed_uris:
             try:
-                self.debug_print("fetching 'https://%s%s'" % (self.feed_site, uri))
+                logger.debug("fetching 'https://%s%s'" % (self.feed_site, uri))
                 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:
-                    self.debug_print("Connection failed, status %d" % (response.status))
-                    self.debug_print(str(response.getheaders()))
+                    logger.debug("Connection failed, status %d" % (response.status))
+                    logger.debug(str(response.getheaders()))
                     continue
                 raw = response.read()
-            except:
-                self.debug_print("Exception talking to the stranger, ignoring.")
+            except Exception:
+                logger.debug("Exception talking to the stranger, ignoring.")
                 continue
 
             soup = BeautifulSoup(raw, "html.parser")
             for x in soup.find_all("div", class_="row event list-item mb-3 py-3"):
                 text = x.get_text()
-                if filter.contains_bad_word(text):
+                if self.pfilter.contains_bad_word(text):
                     continue
                 raw_str = str(x)
                 raw_str = raw_str.replace(
@@ -149,7 +149,7 @@ class stranger_events_renderer(renderer.debuggable_abstaining_renderer):
                     re.DOTALL | re.IGNORECASE,
                 )
                 self.events.add(raw_str)
-            self.debug_print(f"fetched {self.events.size()} events so far.")
+            logger.debug(f"fetched {self.events.size()} events so far.")
         return self.events.size() > 0