X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=chooser.py;h=b83710e17f5ad32a6f0b8dd44bccd99d9c36ef92;hb=fa85ebf815dd7973250a5137e0152c2cb10a8b5e;hp=3514c976cb7c7149f539cefd25952d91fa97bf30;hpb=6b8d4eeb7153617221f822a243a117f0bcab07bf;p=kiosk.git diff --git a/chooser.py b/chooser.py index 3514c97..b83710e 100644 --- a/chooser.py +++ b/chooser.py @@ -8,13 +8,14 @@ import re import time from typing import Any, Callable, List, Optional, Set, Tuple -import datetime_utils +from pyutils import logging_utils +from pyutils.datetimes import datetime_utils -import constants +import kiosk_constants import trigger -logger = logging.getLogger(__file__) +logger = logging.getLogger(__name__) class chooser(ABC): @@ -23,14 +24,15 @@ class chooser(ABC): def __init__(self): pass + @logging_utils.LoggingContext(logger, prefix="chooser:") def get_page_list(self) -> List[str]: now = time.time() valid_filename = re.compile("([^_]+)_(\d+)_([^\.]+)\.html") filenames = [] pages = [ f - for f in os.listdir(constants.pages_dir) - if os.path.isfile(os.path.join(constants.pages_dir, f)) + for f in os.listdir(kiosk_constants.pages_dir) + if os.path.isfile(os.path.join(kiosk_constants.pages_dir, f)) ] for page in pages: result = re.match(valid_filename, page) @@ -38,17 +40,13 @@ class chooser(ABC): if result.group(3) != "none": freshness_requirement = int(result.group(3)) last_modified = int( - os.path.getmtime(os.path.join(constants.pages_dir, page)) + os.path.getmtime(os.path.join(kiosk_constants.pages_dir, page)) ) age = now - last_modified if age > freshness_requirement: - logger.warning( - f'chooser: "{page}" is too old.' - ) + logger.warning(f'"{page}" is too old.') continue - logger.info( - f'chooser: candidate page: "{page}"' - ) + logger.info(f'candidate page: "{page}"') filenames.append(page) return filenames @@ -69,17 +67,11 @@ class weighted_random_chooser(chooser): 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: - if self.last_choice is not None and choice == self.last_choice: - return False - self.last_choice = choice - return True + @logging_utils.LoggingContext(logger, prefix="chooser:") def choose_next_page(self) -> Any: if self.pages is None or self.count % 100 == 0: - logger.info('chooser: refreshing the candidate pages list.') + logger.info("refreshing the candidate pages list.") self.pages = self.get_page_list() total_weight = 0 @@ -130,6 +122,7 @@ class weighted_random_chooser_with_triggers(weighted_random_chooser): self.trigger_list.extend(trigger_list) self.page_queue: Set[Tuple[str, int]] = set(()) + @logging_utils.LoggingContext(logger, prefix="chooser:") def check_for_triggers(self) -> bool: triggered = False for t in self.trigger_list: @@ -137,28 +130,29 @@ class weighted_random_chooser_with_triggers(weighted_random_chooser): if x is not None and len(x) > 0: for y in x: self.page_queue.add(y) - logger.info(f'chooser: noticed active trigger {y}') + logger.info(f"noticed active trigger {y}") triggered = True return triggered + @logging_utils.LoggingContext(logger, prefix="chooser:") def choose_next_page(self) -> Tuple[str, bool]: if self.pages is None or self.count % 100 == 0: - logger.info('chooser: refreshing the candidates page list') + logger.info("refreshing the candidates page list") self.pages = self.get_page_list() triggered = self.check_for_triggers() # First try to satisfy from the page queue. if len(self.page_queue) > 0: - logger.info('chooser: page queue has entries; pulling choice from there.') + logger.info("page queue has entries; pulling choice from there.") page = None priority = None for t in self.page_queue: if priority is None or t[1] > priority: page = t[0] priority = t[1] - assert(page is not None) - assert(priority is not None) + assert page is not None + assert priority is not None self.page_queue.remove((page, priority)) return (page, triggered)