File size: 821 Bytes
983234c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import yaml
class MyLoader(yaml.SafeLoader):
# returns
def construct_mapping(self, *args, **kwargs):
super().add_constructor(None, construct_undefined)
# when loading we want to skip keys that require construction,
mapping = super().construct_mapping(*args, **kwargs)
return mapping
import typing
class Tagged(typing.NamedTuple):
tag: str
value: object
def construct_undefined(self, node):
if isinstance(node, yaml.nodes.ScalarNode):
value = self.construct_scalar(node)
elif isinstance(node, yaml.nodes.SequenceNode):
value = self.construct_sequence(node)
elif isinstance(node, yaml.nodes.MappingNode):
value = self.construct_mapping(node)
else:
assert False, f"unexpected node: {node!r}"
return Tagged(node.tag, value) |