def yaml_load()

in glean_parser/util.py [0:0]


def yaml_load(stream):
    """
    Map line number to yaml nodes, and preserve the order
    of metrics as they appear in the metrics.yaml file.
    """

    class SafeLineLoader(_NoDatesSafeLoader):
        pass

    def _construct_mapping_adding_line(loader, node):
        loader.flatten_mapping(node)
        pairs = loader.construct_pairs(node)

        # Redefinition of a key might be a mistake if that key is a metric name.
        mapping = DictWrapper()
        for pair in pairs:
            if pair[0] in mapping:
                mapping.duplicate = pair[0]
            mapping[pair[0]] = pair[1]

        mapping.defined_in = {"line": node.start_mark.line}
        return mapping

    SafeLineLoader.add_constructor(
        yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, _construct_mapping_adding_line
    )
    return yaml.load(stream, SafeLineLoader)