2 from datetime import datetime
4 class renderer(object):
5 """Base class for something that can render."""
9 class abstaining_renderer(renderer):
10 """A renderer that doesn't do it all the time."""
11 def __init__(self, name_to_timeout_dict):
12 self.name_to_timeout_dict = name_to_timeout_dict;
14 for key in name_to_timeout_dict:
15 self.last_runs[key] = 0
17 def should_render(self, keys_to_skip):
19 for key in self.name_to_timeout_dict:
20 if key in keys_to_skip:
22 if (now - self.last_runs[key]) > self.name_to_timeout_dict[key]:
30 key = self.should_render(keys_to_skip)
39 print(('Too many retries for "%s.%s", giving up for now' % (
40 key, self.__class__)))
43 msg = 'renderer: periodic render event for "%s.%s"' % (
46 msg = msg + " (try %d)" % tries[key]
48 if (self.periodic_render(key)):
49 self.last_runs[key] = time.time()
51 def periodic_render(self, key):
54 class debuggable_abstaining_renderer(abstaining_renderer):
55 def __init__(self, name_to_timeout_dict, debug):
56 super(debuggable_abstaining_renderer, self).__init__(name_to_timeout_dict);
59 def debug_prefix(self):
62 def being_debugged(self):
65 def debug_print(self, template, *args):
67 if self.being_debugged():
69 msg = template.format(args)
73 # current date and time
75 timestamp = now.strftime("%d-%b-%Y (%H:%M:%S.%f)")
76 print("%s(%s): %s" % (self.debug_prefix(), timestamp, msg))
77 except Exception as e:
78 print("Exception in debug_print!")