Пример #1
0
    def setup_commands(self):
        self.worker_cmd = WorkerCommand()
        self.worker_parser = self.worker_cmd.setup_parser(
            self.subparsers, CONFIG_PARSER, VERBOSE_PARSER
        )
        self.parsers.append(self.worker_parser)

        self.commands = OrderedDict([
            ('install-db', InstallDbCommand),
            ('install-worker', InstallWorkerCommand),
            ('migrate', MigrateCommand),
            ('upload-json', UploadJsonCommand),
            ('dns-import', ImportDnsCommand),
            ('dns-ldifplain', LdifPlainDnsCommand),
            ('dns-export-powerdns', PowerdnsExportCommand),
            ('dns-rebuild-powerdns', PowerdnsRebuildCommand),
            ('invoices-create', CreateInvoicesCommand),
            ('service-import', ImportServiceCommand),
            ('service-query', QueryServiceCommand),
        ])

        for command_name, command in self.commands.items():
            name_snake = to_snake_case(command.__name__)
            command_instance = command()
            command_parser = command_instance.setup_parser(
                self.subparsers, CONFIG_PARSER
            )
            self.commands[command_name] = command_instance

            setattr(self, '%s_cmd' % name_snake, command_instance)
            setattr(self, '%s_parser' % name_snake, command_parser)
            self.parsers.append(command_parser)
Пример #2
0
class SetupWorkerParser(object):
    def __init__(self, pass_args=None):
        """create the command line parser / config file reader """

        self.main_parser = argparse.ArgumentParser()
        self.pass_args = pass_args
        self.subparsers = self.main_parser.add_subparsers(
            dest='command',
            title="subcommands",
            description="available subcommands",
            help="all commands"
        )
        self.parsers = []
        self.commands_map = {}

        self.setup_commands()
        self.merge_configfile()
        self.update_parser()

    def setup_commands(self):
        self.worker_cmd = WorkerCommand()
        self.worker_parser = self.worker_cmd.setup_parser(
            self.subparsers, CONFIG_PARSER, VERBOSE_PARSER
        )
        self.parsers.append(self.worker_parser)

        self.commands = OrderedDict([
            ('install-db', InstallDbCommand),
            ('install-worker', InstallWorkerCommand),
            ('migrate', MigrateCommand),
            ('upload-json', UploadJsonCommand),
            ('dns-import', ImportDnsCommand),
            ('dns-ldifplain', LdifPlainDnsCommand),
            ('dns-export-powerdns', PowerdnsExportCommand),
            ('dns-rebuild-powerdns', PowerdnsRebuildCommand),
            ('invoices-create', CreateInvoicesCommand),
            ('service-import', ImportServiceCommand),
            ('service-query', QueryServiceCommand),
        ])

        for command_name, command in self.commands.items():
            name_snake = to_snake_case(command.__name__)
            command_instance = command()
            command_parser = command_instance.setup_parser(
                self.subparsers, CONFIG_PARSER
            )
            self.commands[command_name] = command_instance

            setattr(self, '%s_cmd' % name_snake, command_instance)
            setattr(self, '%s_parser' % name_snake, command_parser)
            self.parsers.append(command_parser)

    def merge_configfile(self):
        if self.pass_args:
            args = self.main_parser.parse_args(self.pass_args)
        else:
            args = self.main_parser.parse_args()

        # load config files with settings
        # puts them into a dict format "section_option"
        merged_defaults = DEFAULTS.copy()
        if hasattr(args, 'config') and args.config:
            config = SafeConfigParser()
            config.readfp(codecs.open(args.config, "r", "utf8"))
            if not config:
                print("Can't open file '{}'".format(args.config))
                sys.exit(0)
            else:
                for section in CONF_SECTIONS:
                    conf = {}
                    if config.has_section(section):
                        for k, v in config.items(section):
                            prop = '{}_{}'.format(section, k)
                            if prop in BOOLEAN_TYPES:
                                conf[prop] = config.getboolean(section, k)
                            else:
                                conf[prop] = config.get(section, k)
                    merged_defaults.update(conf)
        self.merged_defaults = merged_defaults

    def update_parser(self):
        for parser in self.parsers:
            parser.set_defaults(**self.merged_defaults)
        if self.pass_args:
            self.settings = self.main_parser.parse_args(self.pass_args)
        else:
            self.settings = self.main_parser.parse_args()