X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=chooser.py;h=3fecc09717ff47c43988d76ac167b79cc2e4ef3d;hb=73e4d75ceabe5546f3966cfdcd1f705c77be17f7;hp=35d38b5ad9ede0e4a3f1170dc31051fcb0f06c70;hpb=ba913d3c5ec6fd5e229398ebfe9e073aaae7d73c;p=kiosk.git diff --git a/chooser.py b/chooser.py index 35d38b5..3fecc09 100644 --- a/chooser.py +++ b/chooser.py @@ -8,7 +8,7 @@ import random import re import sys import time -from typing import Callable, List, Optional, Set, Tuple +from typing import Any, Callable, List, Optional, Set, Tuple import constants import trigger @@ -43,21 +43,21 @@ class chooser(ABC): return filenames @abstractmethod - def choose_next_page(self) -> str: + def choose_next_page(self) -> Any: pass class weighted_random_chooser(chooser): """Chooser that does it via weighted RNG.""" - def __init__(self, filter_list: List[Callable[[str], bool]]) -> None: + def __init__(self, filter_list: Optional[List[Callable[[str], bool]]]) -> None: self.last_choice = "" self.valid_filename = re.compile("([^_]+)_(\d+)_([^\.]+)\.html") self.pages: Optional[List[str]] = None self.count = 0 - self.filter_list = filter_list - if filter_list is None: - self.filter_list = [] + self.filter_list: List[Callable[[str], bool]] = [] + if filter_list is not None: + self.filter_list.extend(filter_list) self.filter_list.append(self.dont_choose_page_twice_in_a_row_filter) def dont_choose_page_twice_in_a_row_filter(self, choice: str) -> bool: @@ -66,7 +66,7 @@ class weighted_random_chooser(chooser): self.last_choice = choice return True - def choose_next_page(self) -> str: + def choose_next_page(self) -> Any: if self.pages is None or self.count % 100 == 0: self.pages = self.get_page_list() @@ -110,13 +110,13 @@ class weighted_random_chooser_with_triggers(weighted_random_chooser): def __init__( self, - trigger_list: List[trigger.trigger], + trigger_list: Optional[List[trigger.trigger]], filter_list: List[Callable[[str], bool]], ) -> None: weighted_random_chooser.__init__(self, filter_list) - self.trigger_list = trigger_list - if trigger_list is None: - self.trigger_list = [] + self.trigger_list: List[trigger.trigger] = [] + if trigger_list is not None: + self.trigger_list.extend(trigger_list) self.page_queue: Set[Tuple[str, int]] = set(()) def check_for_triggers(self) -> bool: @@ -136,6 +136,7 @@ class weighted_random_chooser_with_triggers(weighted_random_chooser): triggered = self.check_for_triggers() # First try to satisfy from the page queue. + now = datetime.datetime.now() if len(self.page_queue) > 0: print("chooser: Pulling page from queue...") page = None @@ -149,6 +150,12 @@ class weighted_random_chooser_with_triggers(weighted_random_chooser): self.page_queue.remove((page, priority)) return (page, triggered) + # Always show the clock in the middle of the night. + elif now.hour < 7: + for page in self.pages: + if "clock" in page: + return (page, False) + # Fall back on weighted random choice. else: return (weighted_random_chooser.choose_next_page(self), False)