Towards mypy cleanliness.
[kiosk.git] / chooser.py
index d5c6482f331e818f7863eae63087c94f3e1ad077..35d38b5ad9ede0e4a3f1170dc31051fcb0f06c70 100644 (file)
@@ -8,7 +8,7 @@ import random
 import re
 import sys
 import time
-from typing import Callable, List
+from typing import Callable, List, Optional, Set, Tuple
 
 import constants
 import trigger
@@ -28,7 +28,7 @@ class chooser(ABC):
         ]
         for page in pages:
             result = re.match(valid_filename, page)
-            if result != None:
+            if result is not None:
                 print(f'chooser: candidate page: "{page}"')
                 if result.group(3) != "none":
                     freshness_requirement = int(result.group(3))
@@ -53,7 +53,7 @@ class weighted_random_chooser(chooser):
     def __init__(self, filter_list: List[Callable[[str], bool]]) -> None:
         self.last_choice = ""
         self.valid_filename = re.compile("([^_]+)_(\d+)_([^\.]+)\.html")
-        self.pages = None
+        self.pages: Optional[List[str]] = None
         self.count = 0
         self.filter_list = filter_list
         if filter_list is None:
@@ -67,19 +67,19 @@ class weighted_random_chooser(chooser):
         return True
 
     def choose_next_page(self) -> str:
-        if self.pages == None or self.count % 100 == 0:
+        if self.pages is None or self.count % 100 == 0:
             self.pages = self.get_page_list()
 
         total_weight = 0
         weights = []
         for page in self.pages:
             result = re.match(self.valid_filename, page)
-            if result != None:
+            if result is not None:
                 weight = int(result.group(2))
                 weights.append(weight)
                 total_weight += weight
         if total_weight <= 0:
-            raise error
+            raise Exception
 
         while True:
             random_pick = random.randrange(0, total_weight - 1)
@@ -117,20 +117,20 @@ class weighted_random_chooser_with_triggers(weighted_random_chooser):
         self.trigger_list = trigger_list
         if trigger_list is None:
             self.trigger_list = []
-        self.page_queue = set(())
+        self.page_queue: Set[Tuple[str, int]] = set(())
 
     def check_for_triggers(self) -> bool:
         triggered = False
         for t in self.trigger_list:
             x = t.get_triggered_page_list()
-            if x != None and len(x) > 0:
+            if x is not None and len(x) > 0:
                 for y in x:
                     self.page_queue.add(y)
                     triggered = True
         return triggered
 
-    def choose_next_page(self) -> str:
-        if self.pages == None or self.count % 100 == 0:
+    def choose_next_page(self) -> Tuple[str, bool]:
+        if self.pages is None or self.count % 100 == 0:
             self.pages = self.get_page_list()
 
         triggered = self.check_for_triggers()
@@ -141,15 +141,17 @@ class weighted_random_chooser_with_triggers(weighted_random_chooser):
             page = None
             priority = None
             for t in self.page_queue:
-                if priority == None or t[1] > priority:
+                if priority is None or t[1] > priority:
                     page = t[0]
                     priority = t[1]
+            assert(page is not None)
+            assert(priority is not None)
             self.page_queue.remove((page, priority))
-            return page, triggered
+            return (page, triggered)
 
         # Fall back on weighted random choice.
         else:
-            return weighted_random_chooser.choose_next_page(self), False
+            return (weighted_random_chooser.choose_next_page(self), False)
 
 
 # Test