sanitycheck: refactor data parsing in script
Simplify parsing of yaml structures and remove usage of cp which was for
the ConfigParser used for ini files.
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
diff --git a/scripts/sanitycheck b/scripts/sanitycheck
index 37a39f8..836f54b 100755
--- a/scripts/sanitycheck
+++ b/scripts/sanitycheck
@@ -975,9 +975,14 @@
@param filename Source .yaml file to read
"""
- cp = scl.yaml_load_verify(filename, schema)
+ self.data = scl.yaml_load_verify(filename, schema)
self.filename = filename
- self.cp = cp
+ self.tests = {}
+ self.common = {}
+ if 'tests' in self.data:
+ self.tests = self.data['tests']
+ if 'common' in self.data:
+ self.common = self.data['common']
def _cast_value(self, value, typestr):
if type(value) is str:
@@ -1014,17 +1019,9 @@
raise ConfigurationError(self.filename, "unknown type '%s'" % value)
def section(self, name):
- for s in self.sections():
- if name in s:
- return s.get(name, {})
+ return self.tests.get(name, {})
- def sections(self):
- """Get the set of test sections within the .yaml file
-
- @return a list of string section names"""
- return self.cp['tests']
-
- def get_section(self, section, valid_keys, common):
+ def get_section(self, section, valid_keys):
"""Get a dictionary representing the keys/values within a section
@param section The section in the .yaml file to retrieve data from
@@ -1050,7 +1047,7 @@
"""
d = {}
- for k, v in common.items():
+ for k, v in self.common.items():
d[k] = v
for k, v in self.section(section).items():
if k not in valid_keys:
@@ -1110,24 +1107,24 @@
See the Architecture class.
"""
scp = SanityConfigParser(cfile, self.yaml_platform_schema)
- cp = scp.cp
+ data = scp.data
- self.name = cp['identifier']
+ self.name = data['identifier']
# if no RAM size is specified by the board, take a default of 128K
- self.ram = cp.get("ram", 128)
- testing = cp.get("testing", {})
+ self.ram = data.get("ram", 128)
+ testing = data.get("testing", {})
self.ignore_tags = testing.get("ignore_tags", [])
self.default = testing.get("default", False)
# if no flash size is specified by the board, take a default of 512K
- self.flash = cp.get("flash", 512)
+ self.flash = data.get("flash", 512)
self.supported = set()
- for supp_feature in cp.get("supported", []):
+ for supp_feature in data.get("supported", []):
for item in supp_feature.split(":"):
self.supported.add(item)
- self.qemu_support = True if cp.get('type', "na") == 'qemu' else False
- self.arch = cp['arch']
- self.supported_toolchains = cp.get("toolchain", [])
+ self.qemu_support = True if data.get('type', "na") == 'qemu' else False
+ self.arch = data['arch']
+ self.supported_toolchains = data.get("toolchain", [])
self.defconfig = None
pass
@@ -1310,19 +1307,15 @@
dirnames[:] = []
yaml_path = os.path.join(dirpath, filename)
try:
- cp = SanityConfigParser(yaml_path, self.yaml_tc_schema)
+ parsed_data = SanityConfigParser(yaml_path, self.yaml_tc_schema)
except RuntimeError as e:
error("E: %s: can't load: %s" % (yaml_path, e))
workdir = os.path.relpath(dirpath, testcase_root)
- common = {}
- if 'common' in cp.cp:
- common = cp.cp['common']
-
- for section in cp.sections():
- name = list(section.keys())[0]
- tc_dict = cp.get_section(name, testcase_valid_keys, common)
+ print(parsed_data.tests)
+ for name, section in parsed_data.tests.items():
+ tc_dict = parsed_data.get_section(name, testcase_valid_keys)
tc = TestCase(testcase_root, workdir, name, tc_dict,
yaml_path)