Format codebase w/ black.
[kiosk.git] / renderer.py
index 34e4459d429abda03a28da88048690cbc0834f0c..2be7780c1c85ec02808abea8eb55fbd00fdbea57 100644 (file)
@@ -1,15 +1,24 @@
 import time
 from datetime import datetime
+from decorators import invokation_logged
+
 
 class renderer(object):
     """Base class for something that can render."""
+
+    @invokation_logged
     def render(self):
         pass
 
+    def get_name(self):
+        return self.__class__.__name__
+
+
 class abstaining_renderer(renderer):
     """A renderer that doesn't do it all the time."""
+
     def __init__(self, name_to_timeout_dict):
-        self.name_to_timeout_dict = name_to_timeout_dict;
+        self.name_to_timeout_dict = name_to_timeout_dict
         self.last_runs = {}
         for key in name_to_timeout_dict:
             self.last_runs[key] = 0
@@ -17,47 +26,51 @@ class abstaining_renderer(renderer):
     def should_render(self, keys_to_skip):
         now = time.time()
         for key in self.name_to_timeout_dict:
-            if key in keys_to_skip:
-                continue
-            if (now - self.last_runs[key]) > self.name_to_timeout_dict[key]:
+            if (
+                (now - self.last_runs[key]) > self.name_to_timeout_dict[key]
+            ) and key not in keys_to_skip:
                 return key
         return None
 
     def render(self):
-        tries = {}
+        tries_per_key = {}
         keys_to_skip = set()
         while True:
             key = self.should_render(keys_to_skip)
             if key == None:
                 break
-            if key in tries:
-                tries[key] += 1
+
+            if key in tries_per_key:
+                tries_per_key[key] += 1
             else:
-                tries[key] = 0
+                tries_per_key[key] = 0
 
-            if tries[key] > 5:
-                print(('Too many retries for "%s.%s", giving up for now' % (
-                    key, self.__class__)))
+            if tries_per_key[key] >= 3:
+                print(
+                    'renderer: Too many failures for "%s.%s", giving up'
+                    % (self.get_name(), key)
+                )
                 keys_to_skip.add(key)
             else:
-                msg = 'renderer: periodic render event for "%s.%s"' % (
-                    key, self.__class__)
-                if (tries[key] > 1):
-                    msg = msg + " (try %d)" % tries[key]
+                msg = 'renderer: executing "%s.%s"' % (self.get_name(), key)
+                if tries_per_key[key] > 1:
+                    msg = msg + " (retry #%d)" % tries_per_key[key]
                 print(msg)
-                if (self.periodic_render(key)):
+                if self.periodic_render(key):
                     self.last_runs[key] = time.time()
 
+    @invokation_logged
     def periodic_render(self, key):
         pass
 
+
 class debuggable_abstaining_renderer(abstaining_renderer):
     def __init__(self, name_to_timeout_dict, debug):
-        super(debuggable_abstaining_renderer, self).__init__(name_to_timeout_dict);
+        super(debuggable_abstaining_renderer, self).__init__(name_to_timeout_dict)
         self.debug = debug
 
     def debug_prefix(self):
-        return "none"
+        return self.get_name()
 
     def being_debugged(self):
         return self.debug