def __init__(self): signal.signal(signal.SIGINT, self.stop) signal.signal(signal.SIGTERM, self.stop) self.running = False self.system = System() self.media_repository = MediaRepository() self.media_server = MediaServer(self.media_repository)
class InstagramPrinter: def __init__(self): signal.signal(signal.SIGINT, self.stop) signal.signal(signal.SIGTERM, self.stop) self.running = False self.system = System() self.media_repository = MediaRepository() self.media_server = MediaServer(self.media_repository) def start(self): self.running = True self.run() def run(self): if self.system.has_printer(): SupportTeam.notify("using system default printer %s" % self.system.printer().printer_name) while self.running: try: if not self.system.has_printer(): SupportTeam.notify("failure - system has no default printer, skipping print") # wait a bit longer than normal, so that the printer doesn't smash the log failed time.sleep(20) continue media = self.media_server.next() if media and self.running: SupportTeam.notify("%s - preparing to print" % media.id) self.system.printer().send(media.download()) self.media_repository.update_media_status(media, "printed") SupportTeam.notify("%s - print complete." % media.id) except: exceptiondata = traceback.format_exc().splitlines() SupportTeam.notify("failure - uncaught error, %s. skipping print" % (exceptiondata[-1])) finally: if "DEBUG" in os.environ and os.environ["DEBUG"] == "true": SupportTeam.notify("debug: end loop, %s" % self.media_repository) time.sleep(5) SupportTeam.notify("safely exiting process.") def stop(self, signum, frame): SupportTeam.notify("shutdown hook received, will stop at the end of print loop") self.running = False