import optparse import os import logging import wizard from wizard import command, deploy def main(argv, baton): usage = """usage: %prog summary [ARGS] APPS Scans all of the collected data from parallel-find.pl, and calculates interesting information about them. Its subcommands are: count-exists Counts how many autoinstalls contain a file list Prints the locations of all autoinstalls list-errors Prints all errors that occurred during parsing version Breakdown of autoinstalls by version (default) Use %prog summary SUBCOMMAND --help for more information.""" parser = command.WizardOptionParser(usage) parser.disable_interspersed_args() baton.push(parser, "versions_path") _, args = parser.parse_all(argv) rest_argv = args[1:] try: command_name = args[0] except IndexError: command_name = "version" def get_command(name): member = name.replace("-", "_") module = "wizard.command.summary." + member __import__(module) return getattr(wizard.command.summary, member) if command == "help": try: get_command(rest_argv[0]).main(['--help'], baton) except ImportError: parser.error("invalid action") except IndexError: parser.print_help() raise SystemExit(1) try: command_module = get_command(command_name) except ImportError: parser.error("invalid action") command_module.main(rest_argv, baton) ## -- some generic helper stuff -- def parse_install_lines(show, options, yield_errors = False): if not show: show = deploy.applications() show = frozenset(show) for line in deploy.getInstallLines(options.versions_path): # construction try: d = deploy.Deployment.parse(line) name = d.application.name except deploy.NoSuchApplication as e: if yield_errors: yield e continue except deploy.Error: # we consider this a worse error logging.warning("Error with '%s'" % line.rstrip()) continue # filter if name + "-" + str(d.version) in show or name in show: pass else: continue # yield yield d class Counter(object): def __init__(self): self.dict = {} def count(self, value): self.dict.setdefault(value, 0) self.dict[value] += 1 def __getitem__(self, key): return self.dict[key] def __iter__(self): return self.dict.__iter__()