X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=renderer.py;h=5f80e045ed886784a5b17579c70a69f009ed3baf;hb=18913d6fecc43aeecfd5b617030e9cd3e840ef08;hp=2be7780c1c85ec02808abea8eb55fbd00fdbea57;hpb=5e241dc47e497c547463cecc07946ea6882835a7;p=kiosk.git diff --git a/renderer.py b/renderer.py index 2be7780..5f80e04 100644 --- a/renderer.py +++ b/renderer.py @@ -1,29 +1,34 @@ -import time +#!/usr/bin/env python3 + +from abc import ABC, abstractmethod from datetime import datetime -from decorators import invokation_logged +from decorators import invocation_logged +import time +from typing import Dict, List, Optional, Set -class renderer(object): +class renderer(ABC): """Base class for something that can render.""" - @invokation_logged + @abstractmethod def render(self): pass + @abstractmethod def get_name(self): - return self.__class__.__name__ + pass class abstaining_renderer(renderer): """A renderer that doesn't do it all the time.""" - def __init__(self, name_to_timeout_dict): + def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None: self.name_to_timeout_dict = name_to_timeout_dict self.last_runs = {} for key in name_to_timeout_dict: - self.last_runs[key] = 0 + self.last_runs[key] = 0.0 - def should_render(self, keys_to_skip): + def should_render(self, keys_to_skip: Set[str]) -> Optional[str]: now = time.time() for key in self.name_to_timeout_dict: if ( @@ -32,12 +37,13 @@ class abstaining_renderer(renderer): return key return None - def render(self): - tries_per_key = {} - keys_to_skip = set() + @invocation_logged + def render(self) -> None: + tries_per_key: Dict[str, int] = {} + keys_to_skip: Set[str] = set() while True: key = self.should_render(keys_to_skip) - if key == None: + if key is None: break if key in tries_per_key: @@ -59,23 +65,27 @@ class abstaining_renderer(renderer): if self.periodic_render(key): self.last_runs[key] = time.time() - @invokation_logged - def periodic_render(self, key): + @invocation_logged + @abstractmethod + def periodic_render(self, key) -> bool: pass + def get_name(self) -> str: + return self.__class__.__name__ + class debuggable_abstaining_renderer(abstaining_renderer): - def __init__(self, name_to_timeout_dict, debug): + def __init__(self, name_to_timeout_dict: Dict[str, int], debug: bool) -> None: super(debuggable_abstaining_renderer, self).__init__(name_to_timeout_dict) self.debug = debug - def debug_prefix(self): + def debug_prefix(self) -> str: return self.get_name() - def being_debugged(self): + def being_debugged(self) -> bool: return self.debug - def debug_print(self, template, *args): + def debug_print(self, template: str, *args) -> None: try: if self.being_debugged(): if args: