diff options
Diffstat (limited to 'kvmd/yamlconf/dumper.py')
-rw-r--r-- | kvmd/yamlconf/dumper.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/kvmd/yamlconf/dumper.py b/kvmd/yamlconf/dumper.py new file mode 100644 index 00000000..bbee71d2 --- /dev/null +++ b/kvmd/yamlconf/dumper.py @@ -0,0 +1,41 @@ +# pylint: skip-file +# infinite recursion + + +import operator + +from typing import Tuple +from typing import List +from typing import Any + +import yaml + +from . import Section + + +# ===== +def make_config_dump(config: Section) -> str: + return "\n".join(_inner_make_dump(config)) + + +def _inner_make_dump(config: Section, _path: Tuple[str, ...]=()) -> List[str]: + lines = [] + for (key, value) in sorted(config.items(), key=operator.itemgetter(0)): + indent = len(_path) * " " + if isinstance(value, Section): + lines.append("{}{}:".format(indent, key)) + lines += _inner_make_dump(value, _path + (key,)) + lines.append("") + else: + default = config._get_default(key) # pylint: disable=protected-access + comment = config._get_help(key) # pylint: disable=protected-access + if default == value: + lines.append("{}{}: {} # {}".format(indent, key, _make_yaml(value), comment)) + else: + lines.append("{}# {}: {} # {}".format(indent, key, _make_yaml(default), comment)) + lines.append("{}{}: {}".format(indent, key, _make_yaml(value))) + return lines + + +def _make_yaml(value: Any) -> str: + return yaml.dump(value, allow_unicode=True).replace("\n...\n", "").strip() |