move to a verb-based architecture

This commit is contained in:
Conor Hughes 2014-04-07 18:51:46 -07:00
parent 050ca1a081
commit 09337cc608
3 changed files with 36 additions and 18 deletions

View File

@ -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())

View File

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

View File

@ -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()