1 """Custom dumper and representers."""
3 from collections
import OrderedDict
8 from .objects
import Input, NodeDictClass, NodeListClass, NodeStrClass
14 from yaml
import CSafeDumper
as FastestAvailableSafeDumper
17 SafeDumper
as FastestAvailableSafeDumper,
21 def dump(_dict: dict | list) -> str:
22 """Dump YAML to a string and remove null."""
25 default_flow_style=
False,
28 Dumper=FastestAvailableSafeDumper,
29 ).replace(
": null\n",
":\n")
33 """Save YAML to a file."""
36 with open(path,
"w", encoding=
"utf-8")
as outfile:
37 outfile.write(str_data)
42 dumper, tag, mapping, flow_style=None
43 ) -> yaml.MappingNode:
44 """Like BaseRepresenter.represent_mapping but does not issue the sort()."""
46 node = yaml.MappingNode(tag, value, flow_style=flow_style)
47 if dumper.alias_key
is not None:
48 dumper.represented_objects[dumper.alias_key] = node
50 if hasattr(mapping,
"items"):
51 mapping = mapping.items()
52 for item_key, item_value
in mapping:
53 node_key = dumper.represent_data(item_key)
54 node_value = dumper.represent_data(item_value)
55 if not (isinstance(node_key, yaml.ScalarNode)
and not node_key.style):
57 if not (isinstance(node_value, yaml.ScalarNode)
and not node_value.style):
59 value.append((node_key, node_value))
60 if flow_style
is None:
61 if dumper.default_flow_style
is not None:
62 node.flow_style = dumper.default_flow_style
64 node.flow_style = best_style
69 """Add to representer to the dumper."""
70 FastestAvailableSafeDumper.add_representer(klass, representer)
75 lambda dumper, value:
represent_odict(dumper,
"tag:yaml.org,2002:map", value),
80 lambda dumper, value:
represent_odict(dumper,
"tag:yaml.org,2002:map", value),
85 lambda dumper, value: dumper.represent_sequence(
"tag:yaml.org,2002:seq", value),
90 lambda dumper, value: dumper.represent_scalar(
"tag:yaml.org,2002:str",
str(value)),
95 lambda dumper, value: dumper.represent_scalar(
"!input", value.name),
None open(self, **Any kwargs)
None add_representer(Any klass, Any representer)
str dump(dict|list _dict)
None save_yaml(str path, dict data)
yaml.MappingNode represent_odict(dumper, tag, mapping, flow_style=None)