#!/usr/bin/env python3 import io import re import yaml import json import unittest from utils import xjson def load(f): data = f.read() if isinstance(data, bytes): data = data.decode('utf-8') # Strip out of ! data = re.sub("!<[^>]*>", "", data) return yaml.load(io.StringIO(data)) def tojson(f): d = load(f) o = io.StringIO() xjson.pprint(o, d) return o.getvalue() class XYamlTest(unittest.TestCase): def test(self): s = io.StringIO( """\ ! idcode: 0x362d093 global_clock_regions: top: ! rows: 0: ! configuration_buses: CLB_IO_CLK: ! configuration_columns: 0: ! frame_count: 42 """) djson = tojson(s) self.assertMultiLineEqual( djson, """\ { "global_clock_regions": { "top": { "rows": { "0": { "configuration_buses": { "CLB_IO_CLK": { "configuration_columns": { "0": { "frame_count": 42 } } } } } } } }, "idcode": 56807571 }""") if __name__ == "__main__": import sys if len(sys.argv) == 1: unittest.main() else: assert len(sys.argv) == 2 print(tojson(open(sys.argv[1])))