summaryrefslogtreecommitdiff
path: root/cloudinit/safeyaml.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/safeyaml.py')
-rw-r--r--cloudinit/safeyaml.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/cloudinit/safeyaml.py b/cloudinit/safeyaml.py
index 7bcf9dd3..d6f5f95b 100644
--- a/cloudinit/safeyaml.py
+++ b/cloudinit/safeyaml.py
@@ -6,6 +6,8 @@
import yaml
+YAMLError = yaml.YAMLError
+
class _CustomSafeLoader(yaml.SafeLoader):
def construct_python_unicode(self, node):
@@ -17,7 +19,27 @@ _CustomSafeLoader.add_constructor(
_CustomSafeLoader.construct_python_unicode)
+class NoAliasSafeDumper(yaml.dumper.SafeDumper):
+ """A class which avoids constructing anchors/aliases on yaml dump"""
+
+ def ignore_aliases(self, data):
+ return True
+
+
def load(blob):
return(yaml.load(blob, Loader=_CustomSafeLoader))
+
+def dumps(obj, explicit_start=True, explicit_end=True, noalias=False):
+ """Return data in nicely formatted yaml."""
+
+ return yaml.dump(obj,
+ line_break="\n",
+ indent=4,
+ explicit_start=explicit_start,
+ explicit_end=explicit_end,
+ default_flow_style=False,
+ Dumper=(NoAliasSafeDumper
+ if noalias else yaml.dumper.Dumper))
+
# vi: ts=4 expandtab