def _parse(self): # create the settings tree and preserve the order in which arguments # are passed. Convert all args into an ordered tree so that # --foo fooz --too moo --foo-bar baaz --foo-arg vali # will be like the ordered tree below # foo: # <special-key>: fooz # bar: ### <-- foo-bar is not foo/bar # <special-key>: baaz # arg: ### <-- arg comes after bar # <special-key>: val # too: # <special-key>: moo logger.debug("Parsing: %s", self.args) logger.debug("DocString for Generate: %s", self._doc_string) try: self.parsed = docopt(self._doc_string, options_first=True, argv=self.args) except DocoptExit: logger.error(self._doc_string) return False logger.info("Parsed \n%s", self.parsed) self._prepare_defaults() if not self._apply_rules(): logger.error("Error while validating rules: check args %s", ' \n'.join(self.args)) return False logger.debug("New Args: %s", self.args) logger.info("After applying rules Parsed: \n%s", self.parsed) self.output_file = utils.extract_value(self.parsed, '<output-file>', optional=False) self.extra_vars = utils.extract_value(self.parsed, '--extra-vars') # filter only options; [ --foo, fooz, --bar baz ] -> [--foo, --bar] options = [x for x in self.args + self.defaults if x.startswith('--')] settings = OrderedTree(delimiter='-') for option in options: # iterate options to preserve order of args option = option.split('=')[0] value = self.parsed.get(option) if not value: continue key = option[2:] + settings.delimiter + VALUES_KEY settings[key] = value logger.debug("%s: %s", key, value) logger.debug( yaml_utils.to_yaml("Directory structure from args:", settings)) self.settings = settings return True
def _parse(self): # create the settings tree and preserve the order in which arguments # are passed. Convert all args into an ordered tree so that # --foo fooz --too moo --foo-bar baaz --foo-arg vali # will be like the ordered tree below # foo: # <special-key>: fooz # bar: ### <-- foo-bar is not foo/bar # <special-key>: baaz # arg: ### <-- arg comes after bar # <special-key>: val # too: # <special-key>: moo logger.debug("Parsing: %s", self.args) logger.debug("DocString for Generate: %s", self._doc_string) try: self.parsed = docopt(self._doc_string, options_first=True, argv=self.args) except DocoptExit: logger.error(self._doc_string) return False logger.info("Parsed \n%s", self.parsed) self._prepare_defaults() if not self._apply_rules(): logger.error("Error while validating rules: check args %s", ' \n'.join(self.args)) return False logger.debug("New Args: %s", self.args) logger.info("After applying rules Parsed: \n%s", self.parsed) self.output_file = utils.extract_value( self.parsed, '<output-file>', optional=False) self.extra_vars = utils.extract_value(self.parsed, '--extra-vars') # filter only options; [ --foo, fooz, --bar baz ] -> [--foo, --bar] options = [x for x in self.args + self.defaults if x.startswith('--')] settings = OrderedTree(delimiter='-') for option in options: # iterate options to preserve order of args option = option.split('=')[0] value = self.parsed.get(option) if not value: continue key = option[2:] + settings.delimiter + VALUES_KEY settings[key] = value logger.debug("%s: %s", key, value) logger.debug(yaml_utils.to_yaml( "Directory structure from args:", settings)) self.settings = settings return True
def run(self): if not self._parse(): return 1 loader = Loader(self.config_dir, self.settings) self._merge_rules_file_exports(loader) loader.load() self._merge_extra_vars(loader) all_settings = loader.settings() logger.debug(yaml_utils.to_yaml("All Settings", all_settings)) logger.info("Writing to file: %s", self.output_file) with open(self.output_file, 'w') as out: out.write(yaml.safe_dump(all_settings, default_flow_style=False)) return 0
def run(self): if not self._parse(): return 1 loader = Loader(self.config_dir, self.settings) self._merge_rules_file_exports(loader) loader.load() self._merge_extra_vars(loader) all_settings = loader.settings() logger.debug(yaml_utils.to_yaml("All Settings", all_settings)) logger.info("Writing to file: %s", self.output_file) with open(self.output_file, 'w') as out: out.write(yaml.safe_dump( all_settings, default_flow_style=False)) return 0
def print_yaml(msg, x): logging.info(yaml_utils.to_yaml(msg, x))
def print_yaml(msg, x): import logging logging.info(yaml_utils.to_yaml(msg, x))
def generate(config_dir, args): """ Usage: generate [options] <output-file> generate [--extra-vars=KEY_PAIR]... [options] <output-file> Options: --extra-vars=<val>... Provide extra vars {options} """ logging.debug("config_dir: %s, args: %s", config_dir, args) doc_string = generate.__doc__.format( options=docstring.Generator(config_dir).generate()) logging.debug("Parsing: %s", args) logging.debug("DocString for Generate: %s", doc_string) parsed = docopt(doc_string, options_first=True, argv=args) logging.info("Parsed: \n%s", parsed) output_file = _extract_value_for_option(parsed, '<output-file>') extra_vars = _extract_value_for_option(parsed, '--extra-vars', must_exist=False) # create the settings tree and preserve the order in which arguments # are passed. Convert all args into an ordered tree so that # --foo fooz --too moo --foo-bar baaz --foo-arg vali # will be like the ordered tree below # foo: # <special-key>: fooz # bar: ### <-- foo-bar is not foo/bar # <special-key>: baaz # arg: ### <-- arg comes after bar # <special-key>: val # too: # <special-key>: moo settings_tree = OrderedTree(delimiter='-') # filter only options; [ --foo, fooz, --bar baz ] -> [--foo, --bar] options = [x for x in args if x.startswith('--')] for option in options: # iterate options to preserve order of args option = option.split('=')[0] value = parsed.get(option) if not value: continue key = option[2:] + '-' + settings.VALUES_KEY settings_tree[key] = value logging.debug("%s: %s", key, value) logging.debug( yaml_utils.to_yaml("Directory structure from args:", settings_tree)) loader = settings.Loader(config_dir, settings_tree) _update_extra_vars(extra_vars, loader) all_settings = loader.settings_tree() logging.debug("\n" + yaml.safe_dump(all_settings, default_flow_style=False)) logging.info("Writing to file: %s", output_file) with open(output_file, 'w') as out: out.write(yaml.safe_dump(all_settings, default_flow_style=False))
def generate(config_dir, args): """ Usage: generate [options] <output-file> generate [--extra-vars=KEY_PAIR]... [options] <output-file> Options: --extra-vars=<val>... Provide extra vars {options} """ logging.debug("config_dir: %s, args: %s", config_dir, args) doc_string = generate.__doc__.format( options=docstring.Generator(config_dir).generate() ) logging.debug("Parsing: %s", args) logging.debug("DocString for Generate: %s", doc_string) parsed = docopt(doc_string, options_first=True, argv=args) logging.info("Parsed: \n%s", parsed) output_file = _extract_value_for_option(parsed, '<output-file>') extra_vars = _extract_value_for_option( parsed, '--extra-vars', must_exist=False) # create the settings tree and preserve the order in which arguments # are passed. Convert all args into an ordered tree so that # --foo fooz --too moo --foo-bar baaz --foo-arg vali # will be like the ordered tree below # foo: # <special-key>: fooz # bar: ### <-- foo-bar is not foo/bar # <special-key>: baaz # arg: ### <-- arg comes after bar # <special-key>: val # too: # <special-key>: moo settings_tree = OrderedTree(delimiter='-') # filter only options; [ --foo, fooz, --bar baz ] -> [--foo, --bar] options = [x for x in args if x.startswith('--')] for option in options: # iterate options to preserve order of args option = option.split('=')[0] value = parsed.get(option) if not value: continue key = option[2:] + '-' + settings.VALUES_KEY settings_tree[key] = value logging.debug("%s: %s", key, value) logging.debug(yaml_utils.to_yaml( "Directory structure from args:", settings_tree)) loader = settings.Loader(config_dir, settings_tree) _update_extra_vars(extra_vars, loader) all_settings = loader.settings_tree() logging.debug("\n" + yaml.safe_dump( all_settings, default_flow_style=False)) logging.info("Writing to file: %s", output_file) with open(output_file, 'w') as out: out.write(yaml.safe_dump(all_settings, default_flow_style=False))