move to a verb-based architecture
This commit is contained in:
parent
050ca1a081
commit
09337cc608
|
@ -6,7 +6,7 @@ import json
|
|||
from . import application
|
||||
|
||||
def main():
|
||||
return application.Application().run()
|
||||
return application.Application(sys.argv[1:]).run()
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
|
|
|
@ -15,6 +15,9 @@ class Application(object):
|
|||
def logger(self):
|
||||
return package_logger().getChild("application")
|
||||
|
||||
def __init__(self, argv):
|
||||
self.argv = argv
|
||||
|
||||
def configure_logging(self):
|
||||
logging.basicConfig()
|
||||
l = package_logger()
|
||||
|
@ -31,9 +34,9 @@ class Application(object):
|
|||
backend_types.load_backend_types()
|
||||
|
||||
def load_config(self):
|
||||
self.config = configuration.read_config()
|
||||
self.config = configuration.Config(self.argv, "backupmgr")
|
||||
self.email_handler.toaddr = self.config.notification_address
|
||||
if self.config.quiet:
|
||||
if self.config.config_options.quiet:
|
||||
self.stderr_handler.disable()
|
||||
|
||||
def prepare_backups(self):
|
||||
|
@ -47,17 +50,26 @@ class Application(object):
|
|||
def finalize(self):
|
||||
self.email_handler.finalize()
|
||||
|
||||
def perform_backups(self):
|
||||
backups = self.prepare_backups()
|
||||
backup_successes = []
|
||||
for backup in backups:
|
||||
if backup.perform():
|
||||
backup_successes.append(backup)
|
||||
self.log_backups(backup_successes)
|
||||
self.logger.info("Successfully completed {}/{} backups.".format(len(backup_successes), len(backups)))
|
||||
|
||||
def unknown_verb(self):
|
||||
raise Exception("Unknown verb")
|
||||
|
||||
def run(self):
|
||||
verbs = {
|
||||
"backup": self.perform_backups
|
||||
}
|
||||
try:
|
||||
self.bootstrap()
|
||||
self.load_config()
|
||||
backups = self.prepare_backups()
|
||||
backup_successes = []
|
||||
for backup in backups:
|
||||
if backup.perform():
|
||||
backup_successes.append(backup)
|
||||
self.log_backups(backup_successes)
|
||||
self.logger.info("Successfully completed {}/{} backups.".format(len(backup_successes), len(backups)))
|
||||
verbs.get(self.config.config_options.verb, self.unknown_verb)()
|
||||
except error.Error as e:
|
||||
self.logger.fatal(e.message)
|
||||
sys.exit(1)
|
||||
|
|
|
@ -142,11 +142,20 @@ class Config(object):
|
|||
def default_state(self):
|
||||
return {}
|
||||
|
||||
def __init__(self):
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("-q", "--quiet", action="store_true")
|
||||
ns = parser.parse_args()
|
||||
self.quiet = ns.quiet
|
||||
def parse_args(self):
|
||||
parser = argparse.ArgumentParser(prog=self.prog)
|
||||
parser.add_argument("-q", "--quiet", action="store_true",
|
||||
help="Be quiet on logging to stdout/stderr")
|
||||
subparsers = parser.add_subparsers()
|
||||
parser_backup = subparsers.add_parser("backup")
|
||||
parser_backup.set_defaults(verb="backup")
|
||||
return parser.parse_args(self.argv)
|
||||
|
||||
def __init__(self, argv, prog):
|
||||
self.argv = argv
|
||||
self.prog = prog
|
||||
ns = self.parse_args()
|
||||
self.config_options = ns
|
||||
|
||||
self.configfile = CONFIG_LOCATION
|
||||
try:
|
||||
|
@ -253,6 +262,3 @@ class Config(object):
|
|||
if backup.should_run(self.last_run_of_backup(backup)):
|
||||
backups_to_run.append(backup)
|
||||
return backups_to_run
|
||||
|
||||
def read_config():
|
||||
return Config()
|
||||
|
|
Loading…
Reference in New Issue