X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=chooser.py;h=35d38b5ad9ede0e4a3f1170dc31051fcb0f06c70;hb=ba913d3c5ec6fd5e229398ebfe9e073aaae7d73c;hp=d5c6482f331e818f7863eae63087c94f3e1ad077;hpb=c06bfef53f70551e7920bc4facce27f47b89e2ba;p=kiosk.git diff --git a/chooser.py b/chooser.py index d5c6482..35d38b5 100644 --- a/chooser.py +++ b/chooser.py @@ -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