def show(self, style="yaml"): """Show (print) the current configuration to STDOUT. Args: style: Choose between 'yaml' (default), or 'json'""" xfmu.echo("Output of configuration:") if style in ("yaml", "yml"): yaml.dump(self.config, stream=sys.stdout) elif style in ("json", "jason"): stream = json.dumps(self.config, indent=4, default=str) print(stream)
def _validate_unique_tmplkeys(self): """Collect all <...> and check that they are unique and uppercase. Note that duplicate <xxx> may be OK, and a print should only be issued if required, as information. """ mystream = yaml.dump(self._config) tlist = [] tmpl = re.findall(r"<\w+>", mystream) for item in tmpl: tlist.append(item) for item in tlist: wasitem = item item = item.rstrip(">") item = item.lstrip("<") if any(char.islower() for char in item): xfmu.error("Your template key contains lowercase " "letter: {}".format(wasitem)) if len(tlist) != len(set(tlist)) and not self._runsilent: xfmu.echo("Note, there are duplicates in <...> keywords") counter = Counter(tlist) for item, cnt in counter.items(): if cnt > 1: xfmu.echo("{0:30s} occurs {1:3d} times".format(item, cnt))
def compare_yaml_files(file1, file2): """Compare two YAML files and return True if they are equal Args: file1 (str): Path to file1 file2 (str): Path to file2 """ cfg1 = yaml_load(file1) cfg2 = yaml_load(file2) cfg1txt = yaml.dump(cfg1) cfg2txt = yaml.dump(cfg2) if cfg1txt == cfg2txt: return True return False
def to_yaml( self, rootname="myconfig", destination=None, template=None, tool=None, createfolders=False, ): # pylint: disable=too-many-arguments """Export the config as YAML files; one with true values and one with templated variables. Args: rootname: Root file name without extension. An extension .yml will be added for destination, and .yml.tmpl for template output. destination: The directory path for the destination file. If None, then no output will be given template: The directory path for the templated file. If None, then no templated output will be given. tool (str): Using one of the specified tool sections in the master config, e.g. 'rms'. Default is None which means all. createfolders (bool): If True then folders will be created if they do not exist (default is False). Raises: ValueError: If both destination and template output is None, or folder does not exist in advance, if createfolder=False. Example: >>> config.to_yaml('global_variables', destination='../') """ logger.info("To YAML") if not destination and not template: raise ValueError("Both destination and template are None." "At least one of them has to be set!.") if createfolders: self._force_create_folders([destination, template]) else: self._check_folders([destination, template]) # remove dtype, value(s) from RMS/IPL freeform entries newcfg = self._strip_rmsdtype() if tool is not None: mystream = yaml.dump(newcfg[tool]) else: mystream = yaml.dump(newcfg) mystream = "".join(self._get_sysinfo()) + mystream mystream = re.sub(r"\s+~", "~", mystream) mystream = re.sub(r"~\s+", "~", mystream) # pdb.set_trace() cfg1 = self._get_dest_form(mystream) cfg2 = self._get_tmpl_form(mystream) if destination: out = os.path.join(destination, rootname + ".yml") with open(out, "w") as stream: stream.write(cfg1) if template: out = os.path.join(template, rootname + ".yml.tmpl") with open(out, "w") as stream: stream.write(cfg2)