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
                    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

if __name__ == '__main__':
    SupportTeam.notify("startup hook received")
    InstagramPrinter().start()