Profanity filter, please.
[kiosk.git] / myq_renderer.py
index 4be8deeb28f59f5a8e219463f20134ed42d07b9a..ebfac233927a8038cda3daca83a2fe23fb984d78 100644 (file)
@@ -4,21 +4,22 @@ from aiohttp import ClientSession
 import asyncio
 import datetime
 from dateutil.parser import parse
-import pymyq
-from typing import Dict, List
+import pymyq  # type: ignore
+from typing import Dict, Optional
 
-import constants
+from pyutils.datetimes import datetime_utils
+
+import kiosk_constants
 import file_writer
 import renderer
-import secrets
-import utils
+import kiosk_secrets as secrets
 
 
-class garage_door_renderer(renderer.debuggable_abstaining_renderer):
+class garage_door_renderer(renderer.abstaining_renderer):
     def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None:
-        super(garage_door_renderer, self).__init__(name_to_timeout_dict, False)
-        self.doors = None
-        self.last_update = None
+        super().__init__(name_to_timeout_dict)
+        self.doors: Optional[Dict] = None
+        self.last_update: Optional[datetime.datetime] = None
 
     def debug_prefix(self) -> str:
         return "myq"
@@ -30,7 +31,7 @@ class garage_door_renderer(renderer.debuggable_abstaining_renderer):
         elif key == "Update Page":
             return self.update_page()
         else:
-            raise error("Unknown operaiton")
+            raise Exception("Unknown operaiton")
 
     async def poll_myq(self) -> bool:
         async with ClientSession() as websession:
@@ -38,10 +39,11 @@ class garage_door_renderer(renderer.debuggable_abstaining_renderer):
                 secrets.myq_username, secrets.myq_password, websession
             )
             self.doors = myq.devices
+            assert(self.doors is not None)
             return len(self.doors) > 0
 
     def update_page(self) -> bool:
-        with file_writer.file_writer(constants.myq_pagename) as f:
+        with file_writer.file_writer(kiosk_constants.myq_pagename) as f:
             f.write(
                 f"""
 <H1>Garage Door Status</H1>
@@ -52,12 +54,12 @@ class garage_door_renderer(renderer.debuggable_abstaining_renderer):
 """
             )
             html = self.do_door("Near House")
-            if html == None:
+            if html is None:
                 return False
             f.write(html)
 
             html = self.do_door("Middle Door")
-            if html == None:
+            if html is None:
                 return False
             f.write(html)
             f.write(
@@ -69,17 +71,19 @@ class garage_door_renderer(renderer.debuggable_abstaining_renderer):
 
     def get_state_icon(self, state: str) -> str:
         if state == "open":
-            return "/icons/garage_open.png"
+            return "/kiosk/images/garage_open.png"
         elif state == "closed":
-            return "/icons/garage_closed.png"
+            return "/kiosk/images/garage_closed.png"
         elif state == "opening":
-            return "/icons/garage_opening.png"
+            return "/kiosk/images/garage_opening.png"
         elif state == "closing":
-            return "/icons/garage_closing.png"
+            return "/kiosk/images/garage_closing.png"
         else:
             return str(state) + ", an unknown state for the door."
 
-    def do_door(self, name: str) -> str:
+    def do_door(self, name: str) -> Optional[str]:
+        if self.doors is None:
+            return None
         for key in self.doors:
             door = self.doors[key]
             if door.name == name:
@@ -94,7 +98,7 @@ class garage_door_renderer(renderer.debuggable_abstaining_renderer):
                 delta = (now - ts).total_seconds()
                 now = datetime.datetime.now()
                 is_night = now.hour <= 7 or now.hour >= 21
-                duration = utils.describe_duration_briefly(delta)
+                duration = datetime_utils.describe_duration_briefly(int(delta))
                 width = 0
                 if is_night and door.state == "open":
                     color = "border-color: #ff0000;"