--- a/borgend/__main__.py Sun Dec 05 13:09:12 2021 +0200 +++ b/borgend/__main__.py Sun Dec 05 13:34:02 2021 +0200 @@ -44,86 +44,86 @@ action='store_true', help='Set logging level to debug') -args=parser.parse_args() - -# -# Done parsing args, import our own modules, and launch everything -# +def main(): + args=parser.parse_args() -import borgend.config as config -import borgend.dreamtime as dreamtime -import borgend.loggers as loggers -from borgend.scheduler import Scheduler -from borgend.repository import Repository -from borgend.backup import Backup + # Done parsing args, import our own modules, and launch everything + import borgend.config as config + import borgend.dreamtime as dreamtime + import borgend.loggers as loggers + from borgend.scheduler import Scheduler + from borgend.repository import Repository + from borgend.backup import Backup -logger=loggers.mainlogger + logger=loggers.mainlogger -if args.debug: - logger.setLevel(logging.DEBUG) + if args.debug: + logger.setLevel(logging.DEBUG) + + tray = None + repos=[] + backups=[] -tray = None -repos=[] -backups=[] + try: + dreamtime.start_monitoring() -try: - dreamtime.start_monitoring() + scheduler = Scheduler() + scheduler.start() - scheduler = Scheduler() - scheduler.start() - - repoconfigs=config.settings['repositories'] + repoconfigs=config.settings['repositories'] - logger.info('Initialising repositories') - for i in range(len(repoconfigs)): - r=Repository(i, repoconfigs[i]) - repos.append(r) + logger.info('Initialising repositories') + for i in range(len(repoconfigs)): + r=Repository(i, repoconfigs[i]) + repos.append(r) - backupconfigs=config.settings['backups'] + backupconfigs=config.settings['backups'] - logger.info('Initialising backups') - for i in range(len(backupconfigs)): - b=Backup(i, backupconfigs[i], scheduler) - backups.append(b) + logger.info('Initialising backups') + for i in range(len(backupconfigs)): + b=Backup(i, backupconfigs[i], scheduler) + backups.append(b) - if args.notray or platform.system()!='Darwin': - # Wait for scheduler to finish - run=scheduler.join - else: - # This is needed for Ctrl+C to work. - # TODO: proper exit handler, which seems to require - # ditching/forking/extending rumps to extend the NSApp class - from PyObjCTools.AppHelper import installMachInterrupt - installMachInterrupt() - # Start UI, and let it handle exit control - from borgend.ui import BorgendTray - tray=BorgendTray(backups); - run=tray.run + if args.notray or platform.system()!='Darwin': + # Wait for scheduler to finish + run=scheduler.join + else: + # This is needed for Ctrl+C to work. + # TODO: proper exit handler, which seems to require + # ditching/forking/extending rumps to extend the NSApp class + from PyObjCTools.AppHelper import installMachInterrupt + installMachInterrupt() + # Start UI, and let it handle exit control + from borgend.ui import BorgendTray + tray=BorgendTray(backups); + run=tray.run - for r in repos: - r.start() + for r in repos: + r.start() - for b in backups: - b.start() + for b in backups: + b.start() + + run() - run() + except Exception as err: + # TODO: Should write errors here to stderr; + # perhaps add an extra stderr logger for error level messages + logger.exception("Exception fell through: exiting") -except Exception as err: - # TODO: Should write errors here to stderr; - # perhaps add an extra stderr logger for error level messages - logger.exception("Exception fell through: exiting") + finally: + logger.debug("Exiting") -finally: - logger.debug("Exiting") + for b in backups: + b.terminate() - for b in backups: - b.terminate() - - for r in repos: - r.terminate() + for r in repos: + r.terminate() - if tray: - tray.quit() - else: - logging.shutdown() + if tray: + tray.quit() + else: + logging.shutdown() +if __name__ == "__main__": + sys.exit(main())