def load_config(configdb, args = None): args = argv[1:] if args is None else args set_debug_details(args.count('--debug')+args.count('-d')) default_config = config.DefaultValueLoader().load(configdb) _logger.info('default config:\n\t%s', config.pretty(default_config, '\n\t')) # parse cli options at first because we need the config file path in it cli_config = config.CommandLineArgumentsLoader().load(configdb, argv[1:]) _logger.info('cli arg parsed:\n\t%s', config.pretty(cli_config, '\n\t')) run_config = config.merge_config(default_config, cli_config) if run_config.generate_config: generate_config_file(configdb, run_config) try: conf_config = config.from_file(configdb, run_config.config_file) except config.ConfigFileLoader.ConfigValueError as err: _logger.error(err) sysexit(1) _logger.info('config file parsed:\n\t%s', config.pretty(conf_config, '\n\t')) run_config = config.merge_config(run_config, conf_config) # override saved settings again with cli options again, because we want # command line options to take higher priority run_config = config.merge_config(run_config, cli_config) if run_config.setter_args: run_config.setter_args = ','.join(run_config.setter_args).split(',') else: run_config.setter_args = list() _logger.info('running config is:\n\t%s', config.pretty(run_config, '\n\t')) return run_config
def load_config(configdb, args=None): args = argv[1:] if args is None else args set_debug_details(args.count('--debug') + args.count('-d')) default_config = config.DefaultValueLoader().load(configdb) _logger.debug('default config:\n\t%s', config.pretty(default_config, '\n\t')) # parse cli options at first because we need the config file path in it cli_config = config.CommandLineArgumentsLoader().load(configdb, argv[1:]) _logger.debug('cli arg parsed:\n\t%s', config.pretty(cli_config, '\n\t')) run_config = config.merge_config(default_config, cli_config) if run_config.generate_config: generate_config_file(configdb, run_config) config_file = run_config.config_file if not isfile(config_file): _logger.warning( "can't find config file %s, use default settings and cli settings", config_file) else: try: conf_config = config.from_file(configdb, run_config.config_file) except config.ConfigFileLoader.ConfigValueError as err: _logger.error(err) sysexit(1) _logger.debug('config file parsed:\n\t%s', config.pretty(conf_config, '\n\t')) run_config = config.merge_config(run_config, conf_config) # override saved settings again with cli options again, because we want # command line options to take higher priority run_config = config.merge_config(run_config, cli_config) if run_config.setter_args: run_config.setter_args = ','.join(run_config.setter_args).split(',') else: run_config.setter_args = list() # backward compatibility modifications if run_config.size_mode == 'collect': _logger.warning( 'size_mode=collect is obsolete, considering use collect=accompany instead' ) run_config.size_mode = 'highest' if 'accompany' not in run_config.collect: run_config.collect.append('accompany') _logger.info('running config is:\n\t%s', config.pretty(run_config, '\n\t')) return run_config
def load_config(configdb, args = None): args = argv[1:] if args is None else args set_debug_details(args.count('--debug')+args.count('-d')) default_config = config.DefaultValueLoader().load(configdb) _logger.debug('default config:\n\t%s', config.pretty(default_config, '\n\t')) # parse cli options at first because we need the config file path in it cli_config = config.CommandLineArgumentsLoader().load(configdb, argv[1:]) _logger.debug('cli arg parsed:\n\t%s', config.pretty(cli_config, '\n\t')) run_config = config.merge_config(default_config, cli_config) if run_config.generate_config: generate_config_file(configdb, run_config) config_file = run_config.config_file if not isfile(config_file): _logger.warning("can't find config file %s, use default settings and cli settings", config_file) else: try: conf_config = config.from_file(configdb, run_config.config_file) except config.ConfigFileLoader.ConfigValueError as err: _logger.error(err) sysexit(1) _logger.debug('config file parsed:\n\t%s', config.pretty(conf_config, '\n\t')) run_config = config.merge_config(run_config, conf_config) # override saved settings again with cli options again, because we want # command line options to take higher priority run_config = config.merge_config(run_config, cli_config) if run_config.setter_args: run_config.setter_args = ','.join(run_config.setter_args).split(',') else: run_config.setter_args = list() # backward compatibility modifications if run_config.size_mode == 'collect': _logger.warning( 'size_mode=collect is obsolete, considering use collect=accompany instead' ) run_config.size_mode = 'highest' if 'accompany' not in run_config.collect: run_config.collect.append('accompany') _logger.info('running config is:\n\t%s', config.pretty(run_config, '\n\t')) return run_config
def test_merge(self): ns1 = Namespace() ns2 = Namespace() ns1.param1 = 123 ns2.param1 = 456 ns1.parama = 'a' ns2.paramb = ('1', 2, 's') ans = config.merge_config(ns1, ns2) self.assertEqual(ns1.param1, 123) self.assertEqual(ns2.param1, 456) self.assertEqual(ans.param1, 456) self.assertEqual(ns1.parama, 'a') self.assertFalse(hasattr(ns2, 'parama')) self.assertEqual(ans.parama, 'a') self.assertFalse(hasattr(ns1, 'paramb')) self.assertEqual(ns2.paramb, ('1', 2, 's')) self.assertEqual(ans.paramb, ('1', 2, 's'))
def compile_set(config_set, set_id=None): repo = "https://github.com/openwrt/openwrt.git" if config_set.get("repo"): repo = config_set["repo"] build_directory: str = args.build_directory if set_id is not None: build_directory = os.path.join(build_directory, str(set_id)) repo_path: str = pull_repo(build_directory, repo, config_set["branch"], config_set["extra_feeds"]) task_list = [] for template in config_set["templates"]: for device in config_set["devices"]: name, device_config = merge_config(template, device) logging.info("Creating build environment for {}.".format(name)) build_path: str = os.path.join(build_directory, name) output_directory: str = None if set_id is None: output_directory = os.path.join(args.output_directory, name) else: output_directory = os.path.join(args.output_directory, str(set_id), name) shutil.copytree(repo_path, build_path) device_config.update({ "build_dir": build_path, "out_dir": output_directory }) logging.info("Scheduling {} for built.".format(name)) task_list.append(device_config) logging.info("Starting compiling.") no_errors: bool = True with Pool() as p: for name, success in p.map(build_image, task_list): if success: logging.info("Successfully compiled image {}.".format(name)) else: no_errors = False logging.info("Failed to compile image {}.".format(name)) return no_errors