Sun, 28 Jan 2018 11:38:01 +0000
Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
#!/usr/local/bin/python3 # Common modules import os import sys import argparse import platform import branding # Own modules needed at this stage import locations # # Argument processing # parser=argparse.ArgumentParser( description=branding.appname_stylised + ": BorgBackup scheduler, queue, and tray icon.", epilog='Configuration file location:\n\n %s\n ' % locations.cfgfile, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument( '--no-tray', dest='notray', action='store_true', help='Do not show the tray icon') parser.add_argument( '--debug', dest='debug', action='store_true', help='Set logging level to debug') args=parser.parse_args() # # Done parsing args, import our own modules, and launch everything # import branding import config import dreamtime import loggers import logging from scheduler import Scheduler from repository import Repository from backup import Backup logger=loggers.mainlogger if args.debug: logger.setLevel(logging.DEBUG) tray = None repos=[] backups=[] try: dreamtime.start_monitoring() scheduler = Scheduler() scheduler.start() repoconfigs=config.settings['repositories'] for i in range(len(repoconfigs)): logger.info('Setting up repository %d' % i) r=Repository(i, repoconfigs[i]) repos.append(r) backupconfigs=config.settings['backups'] for i in range(len(backupconfigs)): logger.info('Setting up backup set %d' % i) b=Backup(i, backupconfigs[i], scheduler) backups.append(b) for r in repos: r.start() for b in backups: b.start() if args.notray or platform.system()!='Darwin': # Wait for scheduler to finish scheduler.join() else: # Start UI, and let it handle exit control from ui import BorgendTray tray=BorgendTray(backups); tray.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") finally: for b in backups: b.terminate() for r in repos: r.terminate() if tray: tray.quit() else: logging.shutdown()