mirror of https://github.com/openXC7/prjxray.git
84 lines
1.9 KiB
Python
Executable File
84 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (C) 2017-2020 The Project X-Ray Authors.
|
|
#
|
|
# Use of this source code is governed by a ISC-style
|
|
# license that can be found in the LICENSE file or at
|
|
# https://opensource.org/licenses/ISC
|
|
#
|
|
# SPDX-License-Identifier: ISC
|
|
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 !<tags>
|
|
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(
|
|
"""\
|
|
!<xilinx/xc7series/part>
|
|
idcode: 0x362d093
|
|
global_clock_regions:
|
|
top: !<xilinx/xc7series/global_clock_region>
|
|
rows:
|
|
0: !<xilinx/xc7series/row>
|
|
configuration_buses:
|
|
CLB_IO_CLK: !<xilinx/xc7series/configuration_bus>
|
|
configuration_columns:
|
|
0: !<xilinx/xc7series/configuration_column>
|
|
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])))
|