X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=renderer.py;h=b78eb2b713e3b4901a912f8e763a90ee818953f3;hb=d6990436e08a57ce211b10058dc61fb223cb94ec;hp=34e4459d429abda03a28da88048690cbc0834f0c;hpb=75b27cc68871343681f01e3f5b04cae84b1b7b2a;p=kiosk.git diff --git a/renderer.py b/renderer.py index 34e4459..b78eb2b 100644 --- a/renderer.py +++ b/renderer.py @@ -1,11 +1,17 @@ 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): @@ -17,37 +23,37 @@ 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)): self.last_runs[key] = time.time() + @invokation_logged def periodic_render(self, key): pass @@ -57,7 +63,7 @@ class debuggable_abstaining_renderer(abstaining_renderer): self.debug = debug def debug_prefix(self): - return "none" + return self.get_name() def being_debugged(self): return self.debug